【目 标】:自己写的一个小程序
【工 具】:OllyDbg v1.1(diy版) Process Explorer v9.25
【任 务】:穿透ExeCryptor 2.2x保护体系
【操作平台】:Windows xp sp2
【作 者】: LOVEBOOM[DFCG][FCG][CUG]
【相关链接】: http://www.pediy.com/bbs/pediy7/pediy7-771.rar
【简要说明】: 这东西困了我很久了,早就狠狠的玩它一把,外壳的保护保护体系和其它很多外壳相比确实强了不少、狠了不少,针对OD更是火上加油,使得很多用OD的朋友倍感不便,让OD不方便调试,并不表示我们没有好办法来对付它。今次,我们就来小小试身解除Execryptor的保护体系,让你的OD可以不脱壳也同样操作和分析加密保护的程序。今天yock问了,自己找了下,找到这东西,因此整理下,放出来和大家共享,也算是2005年的年终作品,祝大家有个开心的圣诞,2006活的更精彩!
【详细过程】:
我们先来看看ExeCryptor软件本身的说明。
ExeCryptor 原软件说明:
EXECryptor - is a powerful tool used for an application code protection from reverse engineering, analysis and modifications, based on a brand new metamorphing code tranformation technology, that allows to significantly increase software security. With EXECryptor the code block to protect is disassembling and becomes a subject of nondeterminate transformations, which destroys the visible logical code structure. After the code transformation it remains executable and working as it is supposed to but it cannot be neither analysed nor modificated. There is no concept of the code decryption with EXECryptor unlike the others. Protected code blocks are always in the executable state and they are executed as a transformed code. Code restoration becomes an NP-hard problem.
EXECryptor has the innovative very powerful antidebug, antitrace and import protection features. EXECryptor allows to work with the short registration keys of 12/16 characters long. It is based on new generation of HardKey algorithm - cryptographically strong ultrashort digital signature. Algorithm is based on NP-hard problem of finding solution of low degree equation system in Galua field. The algorithm has good resistance and allows to get digital signature 60bits long. In addition to advanced protection features EXECryptor allows to compress code and resources of your application.
后面还有一大堆就不全部copy下来了,跟过这个外壳的朋友也应该知道这个外壳的保护体系就非常强悍的,如果用ollydbg进行脱壳或分析将会出非常困难并且费时间的事。
看看软件本身的关于反调试方面的选项:
关于Execryptor 2.2x的具体反调试手段,建议看看simonzh2000的《ExeCryptor 2.2.X 的 Anti Ollydbg 小结》,作者已经很详细了,摘自他文章里的:
1. OEP 处的 CC 检查
2. AntiDump
3. IsDebuggerPresent
4. [Heap+10h]
5. PEB.NtGlobalFlag
6. GetTickCount
7. FindWindow
8. OutputDebugString
9. ReadProcessMemory(004B1C86, 004C91A0)
10. 对 API 的检查很严格, 几乎每一句都不能下 CC 断点, 不能修改
11. 对 Softice 也有一些检查.
12. 利用 OpenProcess("CSRSS.EXE") 来检测 OD
看到十几种保护方式是不是有点想退的感觉,那么有没有什么方法可以比较简单的跳过反od保护体系,进行动态代码分析呢?当然有,这篇文章就是知道你怎么去穿透ExeCryptor保护体系,从而进行动态代码分析。下面我们来一步一步的穿透它的保护体系。
要穿透它的保护体系,我们都需要些什么呢?首先,得有个目标;再者对软件保护体系有个了解,知道对方是什么样子,再想可能的办法,想到可能的方法,再去找相关的武器,收集好了全部所需的东西后,就可以进行实战了。
先设置一个目标:
我自己写个了简单的Crackme( 作为教学演示,我写的程序没有用SDK。),然后加上Execryptor,既然要想穿过Execryptor的保护系统,我也就加上壳所提供的尽可能强的保护方式。
保护体系上面都已经讲过了,既然外壳启动的时候那么多保护来防止OD调试加载过程,那有没有办法跳过他的启动时的保护来跟踪程序呢?对DEBUG有所了解的朋友应该很容易想到让程序先运行然后Attatch process(关于Attatch的文章可以见我以前写的不脱壳也破解Acprotect 的文章),嗯,我当时也是这么想的,来试试看:
先运行目标程序,然后打开OD,你会发现,外壳很快就会告诉你,od被发现了,打开立刻出现以下错误信息“[288]Debugger
detected -please disable it and restart the application”。
既然OD一运行就会检测到,那么可以推断出外壳在实时检测调试器,外壳又要让原程序在没有调试器的情况下正确工作,又要保证有调试器时能够发现的话,只有可能两种方法,第一种,设置几个进程,一个进程进行反调试之类的,一个进程进行原程序的正常工作。
第二种,通过在加载程序的时候,增加外壳自己的线程进行检测调试器。
嗯,想到了可能有这两种情况后,先看下是不是第一种情况,怎么看,当然是用进程工具进行查看,说到进程工具,也许你会说,直接用Windows的进程管理工具不就行了。没错,是可以,但是,我想说的就是M$做出来的很多东西很鸡肋,看起来功能是有,但往往功能方面少之又少(当然这也是件好事,要是他什么都做的很好,那很多做软件朋友不就难过了:-0)。既然M$的不好用,就随便去网上下个功能强大一点的不就行了,说到功能强大点的,我想很多朋友也应该知道Mark Russin..出品的process explorer吧,也许会说不知道是谁,但如果说是FILEMON,我想搞pj的很多朋友应该知道。没错了就是process explorer。这也是本文的重要武器之一,并不单是简单的看看进程。后面会讲这个工具在这篇文章里的其它重要用途,好了,process explorer就介绍到这里。回到上面的话题,用proc explorer查看下,发现程序是单进程的, 这样就可以把第一种想法给枪B掉。
现在可以确定是第二种方式,那么外壳创建了几个线程呢?用process explorer看看线程信息:
通过上面的图可以看出有三线程,因为原程序最少要一主线程,因此可以推测外壳创建了一或两个线程,我自己用VB写的程序,其中并没有用到多线程,因此可以判断其中有两个线程是外壳创建的,那么哪两个线程是外壳创建的呢,再试双击可以发现:
(主线程)
(外壳线程1)
(外壳线程2)
对比一下几个图就可以很容易的发现哪两个线程是外壳所创建的了。
现在线程已经知道了,那么这两个线程哪个检测调试器的呢?还是两个都是检测调试器的?杀了线程会不会影响主线程的运行呢?这么多问题只能一个一个试了,经过试尝发现外壳的两个线程随便杀一个都不会检测调试器了,两个线程都杀掉都不会影响主线程的运行。
那好办,我们把线程都杀掉,再打开OD进行附加。选择好目标进程后,点附加试试,出现什么信息了??,点附加出来如下出错信息了:
提示不能附加进程,这样直接用OD里的attatch就失败了,那么我们就没有办法调试吗?难道就不能附加了??,当然不是了,细心的你就应该会发现,process explorer右键还有一个DEBUG菜单,那么那个Debug又是什么呢?想想就知道了,对了就是JIT Debugger,快快打开OD看看,OD里是不是有相关设置把od设置为Jit Debugger呢,对了,在OD里选择Options――>Just-in-time-debuging,设置一下,设置为JIT Debugger:
设置好了,然后在process explorer里Debug一下试试,选择时会有提示:
选择“是”就可以附加成功了,到这里就基本上把Execryptor的保护体系给击破了。
我的测试程序里,载入后出现异常,Shift+f9继续。怎么样,现在是不是可以动态分析这个软件了,到这里Execryptor 的保护体系就这样给穿透了。下面以演示软件为例,继续说说,
已经可以动态调试器了,下面简单的说说这个演示软件的分析,随便输入几位用户名,点注册没有反应,因此可以推断有可能是程序判断用户名长度是否合法。重来输入注册名,重来输入注册名,我输入的信息:
然后下断bp __vbaLenBstr,再点Check,断下后,执行到返回,看看代码:
004040F8 8B55 E0 MOV EDX,DWORD PTR SS:[EBP-20]
004040FB 52 PUSH EDX
004040FC FF15 14104000 CALL DWORD PTR DS:[401014] ; MSVBVM60.__vbaLenBstr
00404102 33C9 XOR ECX,ECX ; 返回到这里
00404104 83F8 08 CMP EAX,8 ; 这里判断用户名长度是否够8位
00404107 0F9CC1 SETL CL
0040410A F7D9 NEG ECX ; ntdll.7C93056D
0040410C 8BF1 MOV ESI,ECX ; ntdll.7C93056D
0040410E 8D4D E0 LEA ECX,DWORD PTR SS:[EBP-20]
00404111 FF15 58114000 CALL DWORD PTR DS:[401158] ; MSVBVM60.__vbaFreeStr
00404117 8D4D D0 LEA ECX,DWORD PTR SS:[EBP-30]
0040411A FF15 5C114000 CALL DWORD PTR DS:[40115C] ; MSVBVM60.__vbaFreeObj
00404120 66:3BF3 CMP SI,BX
00404123 0F85 CA020000 JNZ <Over> ; 如果不够8位就over了
00404129 8B17 MOV EDX,DWORD PTR DS:[EDI]
0040412B 57 PUSH EDI
0040412C FF92 FC020000 CALL DWORD PTR DS:[EDX+2FC]
00404132 50 PUSH EAX
00404133 8D45 D0 LEA EAX,DWORD PTR SS:[EBP-30]
00404136 50 PUSH EAX
00404137 FF15 58104000 CALL DWORD PTR DS:[401058] ; MSVBVM60.__vbaObjSet
0040413D 8BF0 MOV ESI,EAX
0040413F 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
00404142 52 PUSH EDX
00404143 56 PUSH ESI
00404144 8B0E MOV ECX,DWORD PTR DS:[ESI]
00404146 FF91 A0000000 CALL DWORD PTR DS:[ECX+A0]
0040414C 3BC3 CMP EAX,EBX
0040414E DBE2 FCLEX
00404150 7D 12 JGE SHORT 00404164
00404152 68 A0000000 PUSH 0A0
00404157 68 1C354000 PUSH 40351C
0040415C 56 PUSH ESI
0040415D 50 PUSH EAX
0040415E FF15 3C104000 CALL DWORD PTR DS:[40103C] ; MSVBVM60.__vbaHresultCheckObj
00404164 8B45 E0 MOV EAX,DWORD PTR SS:[EBP-20]
00404167 50 PUSH EAX
00404168 FF15 14104000 CALL DWORD PTR DS:[401014] ; MSVBVM60.__vbaLenBstr
0040416E 33C9 XOR ECX,ECX ; ntdll.7C93056D
00404170 83F8 0A CMP EAX,0A ; 判断用户名长度是大于10位大于也over了
00404173 0F9FC1 SETG CL
00404176 F7D9 NEG ECX ; ntdll.7C93056D
00404178 8BF1 MOV ESI,ECX ; ntdll.7C93056D
0040417A 8D4D E0 LEA ECX,DWORD PTR SS:[EBP-20]
0040417D FF15 58114000 CALL DWORD PTR DS:[401158] ; MSVBVM60.__vbaFreeStr
00404183 8D4D D0 LEA ECX,DWORD PTR SS:[EBP-30]
00404186 FF15 5C114000 CALL DWORD PTR DS:[40115C] ; MSVBVM60.__vbaFreeObj
0040418C 66:3BF3 CMP SI,BX
0040418F 0F85 5E020000 JNZ <Over>
00404195 8B17 MOV EDX,DWORD PTR DS:[EDI]
到这里可以判断出用户名长度为8-10 位
00404195 8B17 MOV EDX,DWORD PTR DS:[EDI]
00404197 57 PUSH EDI
00404198 FF92 FC020000 CALL DWORD PTR DS:[EDX+2FC]
0040419E 50 PUSH EAX
0040419F 8D45 D0 LEA EAX,DWORD PTR SS:[EBP-30]
004041A2 50 PUSH EAX
004041A3 FF15 58104000 CALL DWORD PTR DS:[401058] ; MSVBVM60.__vbaObjSet
004041A9 8BF0 MOV ESI,EAX
004041AB 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
004041AE 52 PUSH EDX
004041AF 56 PUSH ESI
004041B0 8B0E MOV ECX,DWORD PTR DS:[ESI]
004041B2 FF91 A0000000 CALL DWORD PTR DS:[ECX+A0]
004041B8 3BC3 CMP EAX,EBX
004041BA DBE2 FCLEX
004041BC 7D 12 JGE SHORT 004041D0
004041BE 68 A0000000 PUSH 0A0
004041C3 68 1C354000 PUSH 40351C
004041C8 56 PUSH ESI
004041C9 50 PUSH EAX
004041CA FF15 3C104000 CALL DWORD PTR DS:[40103C] ; MSVBVM60.__vbaHresultCheckObj
004041D0 8D55 80 LEA EDX,DWORD PTR SS:[EBP-80]
004041D3 8D4D C0 LEA ECX,DWORD PTR SS:[EBP-40] ; 传入参数
004041D6 C745 88 3835400>MOV DWORD PTR SS:[EBP-78],403538 ; UNICODE "LOVEBOOM"
004041DD C745 80 0800000>MOV DWORD PTR SS:[EBP-80],8
004041E4 FF15 34114000 CALL DWORD PTR DS:[401134] ; MSVBVM60.__vbaVarDup
004041EA 53 PUSH EBX
004041EB 8D45 C0 LEA EAX,DWORD PTR SS:[EBP-40]
004041EE 68 80000000 PUSH 80
004041F3 8D4D B0 LEA ECX,DWORD PTR SS:[EBP-50]
004041F6 50 PUSH EAX
004041F7 51 PUSH ECX ; 把固定字符串转为ascii
004041F8 FF15 D4104000 CALL DWORD PTR DS:[4010D4] ; MSVBVM60.rtcStrConvVar2
004041FE 395D E4 CMP DWORD PTR SS:[EBP-1C],EBX
00404201 75 0F JNZ SHORT 00404212
00404203 8D55 E4 LEA EDX,DWORD PTR SS:[EBP-1C]
00404206 52 PUSH EDX
00404207 68 E0284000 PUSH 4028E0 ; 引用COM对象,可以简单的判断程序可能是用的Cls类模块
0040420C FF15 00114000 CALL DWORD PTR DS:[401100] ; MSVBVM60.__vbaNew2
00404212 8B75 E4 MOV ESI,DWORD PTR SS:[EBP-1C] ; 上面进去会有异常,忽略异常继续分析
00404215 8D45 B0 LEA EAX,DWORD PTR SS:[EBP-50]
00404218 50 PUSH EAX
00404219 C785 4CFFFFFF F>MOV DWORD PTR SS:[EBP-B4],-1 ; mov string 'LOVEBOOM'
00404223 FF15 18104000 CALL DWORD PTR DS:[401018] ; MSVBVM60.__vbaStrVarMove
00404229 8BD0 MOV EDX,EAX
0040422B 8D4D D8 LEA ECX,DWORD PTR SS:[EBP-28]
0040422E FF15 40114000 CALL DWORD PTR DS:[401140] ; MSVBVM60.__vbaStrMove
00404234 8B55 E0 MOV EDX,DWORD PTR SS:[EBP-20] ; 准备传入注册名'loveboom'
00404237 8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
0040423A 895D E0 MOV DWORD PTR SS:[EBP-20],EBX
0040423D FF15 40114000 CALL DWORD PTR DS:[401140] ; MSVBVM60.__vbaStrMove
00404243 8B0E MOV ECX,DWORD PTR DS:[ESI]
00404245 8D55 D4 LEA EDX,DWORD PTR SS:[EBP-2C]
00404248 8D85 4CFFFFFF LEA EAX,DWORD PTR SS:[EBP-B4]
0040424E 52 PUSH EDX
0040424F 50 PUSH EAX
00404250 8D55 D8 LEA EDX,DWORD PTR SS:[EBP-28]
00404253 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
00404256 52 PUSH EDX
00404257 50 PUSH EAX
00404258 56 PUSH ESI
00404259 FF51 20 CALL DWORD PTR DS:[ECX+20] ; COM对象进行算法运算,跟踪过的朋友就知道是什么算法了:-),不信你试试
0040425C 3BC3 CMP EAX,EBX
0040425E DBE2 FCLEX
00404260 7D 0F JGE SHORT 00404271
00404262 6A 20 PUSH 20
00404264 68 7C354000 PUSH 40357C
00404269 56 PUSH ESI
0040426A 50 PUSH EAX
0040426B FF15 3C104000 CALL DWORD PTR DS:[40103C] ; MSVBVM60.__vbaHresultCheckObj
00404271 8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C] ; [EBP-2C]处就是正确的注册码了.'3F436E403F9DA3793F3FB3E34DD7C6D9FC3F00'
00404274 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
00404277 895D D4 MOV DWORD PTR SS:[EBP-2C],EBX
0040427A FF15 40114000 CALL DWORD PTR DS:[401140] ; MSVBVM60.__vbaStrMove
00404280 8D4D D8 LEA ECX,DWORD PTR SS:[EBP-28]
00404283 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24]
00404286 51 PUSH ECX ; ntdll.7C93056D
00404287 52 PUSH EDX
00404288 6A 02 PUSH 2
0040428A FF15 14114000 CALL DWORD PTR DS:[401114] ; MSVBVM60.__vbaFreeStrList
00404290 83C4 0C ADD ESP,0C
00404293 8D4D D0 LEA ECX,DWORD PTR SS:[EBP-30]
00404296 FF15 5C114000 CALL DWORD PTR DS:[40115C] ; MSVBVM60.__vbaFreeObj
0040429C 8D45 B0 LEA EAX,DWORD PTR SS:[EBP-50]
0040429F 8D4D C0 LEA ECX,DWORD PTR SS:[EBP-40]
004042A2 50 PUSH EAX
004042A3 51 PUSH ECX ; ntdll.7C93056D
004042A4 6A 02 PUSH 2
004042A6 FF15 1C104000 CALL DWORD PTR DS:[40101C] ; MSVBVM60.__vbaFreeVarList
004042AC 8B17 MOV EDX,DWORD PTR DS:[EDI]
004042AE 83C4 0C ADD ESP,0C
004042B1 57 PUSH EDI
004042B2 FF92 08030000 CALL DWORD PTR DS:[EDX+308]
004042B8 50 PUSH EAX
004042B9 8D45 D0 LEA EAX,DWORD PTR SS:[EBP-30]
004042BC 50 PUSH EAX
004042BD FF15 58104000 CALL DWORD PTR DS:[401058] ; MSVBVM60.__vbaObjSet
004042C3 8BF0 MOV ESI,EAX
004042C5 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
004042C8 52 PUSH EDX
004042C9 56 PUSH ESI
004042CA 8B0E MOV ECX,DWORD PTR DS:[ESI]
004042CC FF91 A0000000 CALL DWORD PTR DS:[ECX+A0] ; 释放COM对象
004042D2 3BC3 CMP EAX,EBX
004042D4 DBE2 FCLEX
004042D6 7D 12 JGE SHORT 004042EA
004042D8 68 A0000000 PUSH 0A0
004042DD 68 1C354000 PUSH 40351C
004042E2 56 PUSH ESI
004042E3 50 PUSH EAX
004042E4 FF15 3C104000 CALL DWORD PTR DS:[40103C] ; MSVBVM60.__vbaHresultCheckObj
004042EA 8B45 E0 MOV EAX,DWORD PTR SS:[EBP-20] ; 这里就是输入的注册码
004042ED 8B4D E8 MOV ECX,DWORD PTR SS:[EBP-18] ; 这里便是正确的注册码
004042F0 50 PUSH EAX
004042F1 51 PUSH ECX ; ntdll.7C93056D
004042F2 FF15 90104000 CALL DWORD PTR DS:[401090] ; MSVBVM60.__vbaStrCmp
004042F8 8BF0 MOV ESI,EAX
004042FA 8D4D E0 LEA ECX,DWORD PTR SS:[EBP-20]
004042FD F7DE NEG ESI
004042FF 1BF6 SBB ESI,ESI
00404301 46 INC ESI
00404302 F7DE NEG ESI
00404304 FF15 58114000 CALL DWORD PTR DS:[401158] ; MSVBVM60.__vbaFreeStr
0040430A 8D4D D0 LEA ECX,DWORD PTR SS:[EBP-30]
0040430D FF15 5C114000 CALL DWORD PTR DS:[40115C] ; MSVBVM60.__vbaFreeObj
00404313 66:3BF3 CMP SI,BX ; 这里进行比较
00404316 BA 30354000 MOV EDX,403530
0040431B 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
0040431E 74 65 JE SHORT 00404385 ; 如果注册码不对则跳
00404320 FF15 10114000 CALL DWORD PTR DS:[401110] ; MSVBVM60.__vbaStrCopy
00404326 B9 0A000000 MOV ECX,0A ; 显示信息框
0040432B B8 04000280 MOV EAX,80020004
00404330 894D 90 MOV DWORD PTR SS:[EBP-70],ECX ; ntdll.7C93056D
00404333 894D A0 MOV DWORD PTR SS:[EBP-60],ECX ; ntdll.7C93056D
00404336 894D B0 MOV DWORD PTR SS:[EBP-50],ECX ; ntdll.7C93056D
00404339 8D55 80 LEA EDX,DWORD PTR SS:[EBP-80]
0040433C 8D4D C0 LEA ECX,DWORD PTR SS:[EBP-40]
0040433F 8945 98 MOV DWORD PTR SS:[EBP-68],EAX
00404342 8945 A8 MOV DWORD PTR SS:[EBP-58],EAX
00404345 8945 B8 MOV DWORD PTR SS:[EBP-48],EAX
00404348 C745 88 5037400>MOV DWORD PTR SS:[EBP-78],403750 ; UNICODE "pass"
0040434F C745 80 0800000>MOV DWORD PTR SS:[EBP-80],8
00404356 FF15 34114000 CALL DWORD PTR DS:[401134] ; MSVBVM60.__vbaVarDup
0040435C 8D55 90 LEA EDX,DWORD PTR SS:[EBP-70]
0040435F 8D45 A0 LEA EAX,DWORD PTR SS:[EBP-60]
00404362 52 PUSH EDX
00404363 8D4D B0 LEA ECX,DWORD PTR SS:[EBP-50]
00404366 50 PUSH EAX
00404367 51 PUSH ECX ; ntdll.7C93056D
00404368 8D55 C0 LEA EDX,DWORD PTR SS:[EBP-40]
0040436B 53 PUSH EBX
0040436C 52 PUSH EDX
0040436D FF15 5C104000 CALL DWORD PTR DS:[40105C] ; MSVBVM60.rtcMsgBox
00404373 8D45 90 LEA EAX,DWORD PTR SS:[EBP-70]
00404376 8D4D A0 LEA ECX,DWORD PTR SS:[EBP-60]
00404379 50 PUSH EAX
0040437A 8D55 B0 LEA EDX,DWORD PTR SS:[EBP-50]
0040437D 51 PUSH ECX ; ntdll.7C93056D
0040437E 8D45 C0 LEA EAX,DWORD PTR SS:[EBP-40]
00404381 52 PUSH EDX
00404382 50 PUSH EAX
00404383 EB 63 JMP SHORT 004043E8
00404385 FF15 10114000 CALL DWORD PTR DS:[401110] ; 错误提示的信息框
0040438B B9 0A000000 MOV ECX,0A
00404390 B8 04000280 MOV EAX,80020004
00404395 894D 90 MOV DWORD PTR SS:[EBP-70],ECX ; ntdll.7C93056D
00404398 894D A0 MOV DWORD PTR SS:[EBP-60],ECX ; ntdll.7C93056D
0040439B 894D B0 MOV DWORD PTR SS:[EBP-50],ECX ; ntdll.7C93056D
0040439E 8D55 80 LEA EDX,DWORD PTR SS:[EBP-80]
004043A1 8D4D C0 LEA ECX,DWORD PTR SS:[EBP-40]
004043A4 8945 98 MOV DWORD PTR SS:[EBP-68],EAX
004043A7 8945 A8 MOV DWORD PTR SS:[EBP-58],EAX
004043AA 8945 B8 MOV DWORD PTR SS:[EBP-48],EAX
004043AD C745 88 6037400>MOV DWORD PTR SS:[EBP-78],403760 ; UNICODE "sorry"
004043B4 C745 80 0800000>MOV DWORD PTR SS:[EBP-80],8
004043BB FF15 34114000 CALL DWORD PTR DS:[401134] ; MSVBVM60.__vbaVarDup
004043C1 8D4D 90 LEA ECX,DWORD PTR SS:[EBP-70]
通过动态分析下就知道算法应该为:SN=F(name,key[‘LOVEBOOM’])
判断部分为:
If inkey=sn then
Msgbox “pass”
Else
Msgbox “sorry”
Endif
OK,是不是比较简单,没错了,现在你也可以和别人说,你穿透Execryptor的保护体系,你也可以不脱壳直接动态分析Execryptor了。
BTW:这篇文章对某些外挂用Execryptor加密的朋友产生的影响表示歉意。当然对想破解Execryptor加密的外挂而又不会脱壳的朋友来说,也许算是一件好消息:-p。
LoVe Wen
Greets:
Fly.Jingulong,yock,tDasm.David.hexer,hmimys,ahao.UFO(brother).alan(sister).all of my friends and you!
By loveboom[DFCG][FCG][US]
http://blog.csdn.net/bmd2chen
Email:loveboom#163.com
Date:12/22/2005 3:31:00 AM