自己找了软件,按教程操作,一直到了OEP处了,后面看不懂了,麻烦给讲解一下
脱ASProtect v1.23 RC1 *加壳
标 题:脱ASProtect v1.23 RC1 *加壳
作 者:hbqjxhw
时 间:2006-07-05,00:55
链 接:http://bbs.pediy.com/showthread.php?t=28452
【破文作者】 HBQJXHW
【加密方式】 ASProtectv1.23RC1 *加壳
【破解工具】 OD、PEiD0.94、Anti-RDTSC
【破解平台】 WinXP SP2
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
【破解过程】
一外挂软件的脱壳过程:
用PEiD查看显示ASProtectv1.23RC1 *
首先运行Anti-RDTSC
OK现在用OD载入加壳程序,选不继续分析。除了INT3中断与非法访问内存不勾,其它全部打勾。
00401000 > 68 01D08A00 PUSH wg.008AD001---》停在此处。
00401005 E8 01000000 CALL wg.0040100B
0040100A C3 RETN
0040100B C3 RETN
0040100C 5F POP EDI
0040100D 1D DA9D4ADA SBB EAX,DA4A9DDA
================================
F9运行之后
013CD4CF 0000 ADD BYTE PTR DS:[EAX],AL---》停在此处。
013CD4D1 E8 33C05A59 CALL 5A979509
013CD4D6 59 POP ECX
013CD4D7 64:8910 MOV DWORD PTR FS:[EAX],EDX
013CD4DA EB 0F JMP SHORT 013CD4EB
================================
单击右键--》查找--》所有参考文本字符串
找到有两个“85”在一起的地方,双击来到。
013CC9F4 /EB 0A JMP SHORT 013CCA00
013CC9F6 |68 3CCC3C01 PUSH 13CCC3C ; ASCII "85"
013CC9FB |E8 508DFDFF CALL 013A5750
013CCA00 \A1 DCF93C01 MOV EAX,DWORD PTR DS:[13CF9DC]
013CCA05 8B00 MOV EAX,DWORD PTR DS:[EAX]
013CCA07 E8 640CFFFF CALL 013BD670---------》在此处下硬件执行断点。
013CCA0C 84C0 TEST AL,AL
013CCA0E 75 0A JNZ SHORT 013CCA1A
013CCA10 68 3CCC3C01 PUSH 13CCC3C ; ASCII "85"
=================================
几下SHIFT+F9之后停在013CCA07 E8 640CFFFF CALL 013BD670
F7进入,向下找到
013BD702 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
013BD706 014424 08 ADD DWORD PTR SS:[ESP+8],EAX
013BD70A E9 80000000 JMP 013BD78F---------》直接F4来到这里。
013BD70F 3A5E 37 CMP BL,BYTE PTR DS:[ESI+37]
013BD712 75 17 JNZ SHORT 013BD72B
此时看堆栈
0012FF18 0012FF01
0012FF1C 00400000 wg.00400000
0012FF20 00401000 wg.<模块入口点>---》在命令行输入D 00401000
0012FF24 0012FF74
=================================
继续向下找
013BD77F E8 8CFCFFFF CALL 013BD410---------》直接F4来到这里之后,F7进入。
013BD784 0FB707 MOVZX EAX,WORD PTR DS:[EDI]
013BD787 83C0 02 ADD EAX,2
013BD78A 03F8 ADD EDI,EAX
013BD78C 8A1F MOV BL,BYTE PTR DS:[EDI]
013BD78E 47 INC EDI
013BD78F 3A5E 34 CMP BL,BYTE PTR DS:[ESI+34]
013BD792 ^ 0F85 77FFFFFF JNZ 013BD70F
013BD798 8BDF MOV EBX,EDI
013BD79A 8B03 MOV EAX,DWORD PTR DS:[EBX]
013BD79C 85C0 TEST EAX,EAX
013BD79E ^ 0F85 0AFFFFFF JNZ 013BD6AE
013BD7A4 8A0424 MOV AL,BYTE PTR SS:[ESP]
013BD7A7 83C4 0C ADD ESP,0C
013BD7AA 5D POP EBP
013BD7AB 5F POP EDI
013BD7AC 5E POP ESI
013BD7AD 5B POP EBX
013BD7AE C3 RETN-------》在此处下F2断点。
进入到这里
013BD410 55 PUSH EBP
013BD411 8BEC MOV EBP,ESP
013BD413 81C4 F8FEFFFF ADD ESP,-108
013BD419 53 PUSH EBX
013BD41A 56 PUSH ESI
013BD41B 57 PUSH EDI
013BD41C 8B55 14 MOV EDX,DWORD PTR SS:[EBP+14]
013BD41F 8B5D 08 MOV EBX,DWORD PTR SS:[EBP+8]
013BD422 8DBD FAFEFFFF LEA EDI,DWORD PTR SS:[EBP-106]
013BD428 8BC2 MOV EAX,EDX
013BD42A 48 DEC EAX
013BD42B 83E8 02 SUB EAX,2
013BD42E 0FB630 MOVZX ESI,BYTE PTR DS:[EAX]
013BD431 8B45 10 MOV EAX,DWORD PTR SS:[EBP+10]
013BD434 83E8 02 SUB EAX,2
013BD437 0FB600 MOVZX EAX,BYTE PTR DS:[EAX]
013BD43A 3B43 2C CMP EAX,DWORD PTR DS:[EBX+2C]
013BD43D 76 06 JBE SHORT 013BD445
013BD43F 8943 2C MOV DWORD PTR DS:[EBX+2C],EAX
013BD442 EB 01 JMP SHORT 013BD445
013BD444 6933 C08A433B IMUL ESI,DWORD PTR DS:[EBX],3B438AC0
013BD44A 3BF0 CMP ESI,EAX----》这里下F2断点,0X46、0XCA是不加密IAT,好像只有一处等于0x11处加密(这里改ESI的值为0X46就可以跳过加密)。
013BD44C 75 5E JNZ SHORT 013BD4AC
013BD44E EB 01 JMP SHORT 013BD451
最后得到一个完整的IAT,从00401000----00401128
013BD7AE C3 RETN----》断在这里。去掉所有F2断点。
=================================
ALT+M
内存映射, 条目23
地址=00401000
大小=00007000 (28672.)
属主=wg 00400000
区段=
包含=代码
类型=Imag 01001002
访问=R
初始访问=RWE
在此处下F2断点。SHIFT+F9来到
013CB2FB 8945 00 MOV DWORD PTR SS:[EBP],EAX---》停在此处。
013CB2FE 6A 0A PUSH 0A
013CB300 E8 B3A9FDFF CALL 013A5CB8
013CB305 8BC8 MOV ECX,EAX
向上找到
013CB19F 098D 04408B54 OR DWORD PTR SS:[EBP+548B4004],ECX
013CB1A5 8368 8B C6 SUB DWORD PTR DS:[EAX-75],-3A
013CB1A9 FFD2 CALL EDX-------》这里要PACH一下。所以在这里下硬件执行断点。
013CB1AB 807B 20 00 CMP BYTE PTR DS:[EBX+20],0
013CB1AF 0F85 3D010000 JNZ 013CB2F2----》(013CB1AF这个地址要记住,等一下要用到)。
013CB1B5 3C 01 CMP AL,1
013CB1B7 0F85 35010000 JNZ 013CB2F2
-------------------------------------------------------
好了,执行到这里我们重来。(CTRL+F2)
最后被断在这里:013CB1A9 FFD2 CALL EDX---》去掉硬件执行断点。
改为:013CB1A9 FFD2 JMP 02640000
分配一段内存,我这里分配的是02640000写下如下代码:
02640000 FFD2 CALL EDX
02640002 60 PUSHAD
02640003 8B1D 30006402 MOV EBX,DWORD PTR DS:[2640030]
02640009 C1E0 1F SHL EAX,1F
0264000C 03C5 ADD EAX,EBP
0264000E 8903 MOV DWORD PTR DS:[EBX],EAX
02640010 83C3 04 ADD EBX,4
02640013 891D 30006402 MOV DWORD PTR DS:[2640030],EBX
02640019 61 POPAD
0264001A 807B 20 00 CMP BYTE PTR DS:[EBX+20],0
0264001E - E9 8CB1D8FE JMP 013CB1AF----》这里是上面提到要记住的地址。
二进制代码为:
FF D2 60 8B 1D 30 00 64 02 C1 E0 1F 03 C5 89 03 83 C3 04 89 1D 30 00 64 02 61 80 7B 20 00 E9 8C
B1 D8 FE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 64 02 00
〔这段代码会用了,不过不明白具体是做什么用的?能解释一下原理吗?〕
上面代码写好之后,F4到如下代码
013CB2FB 8945 00 MOV DWORD PTR SS:[EBP],EAX
013CB2FE 6A 0A PUSH 0A
013CB300 E8 B3A9FDFF CALL 013A5CB8
013CB305 8BC8 MOV ECX,EAX
013CB307 038B E4000000 ADD ECX,DWORD PTR DS:[EBX+E4]
013CB30D 8BD6 MOV EDX,ESI
013CB30F 8BC3 MOV EAX,EBX
013CB311 E8 AAE6FFFF CALL 013C99C0
013CB316 FF0C24 DEC DWORD PTR SS:[ESP]
013CB319 03B3 E4000000 ADD ESI,DWORD PTR DS:[EBX+E4]
013CB31F 833C24 00 CMP DWORD PTR SS:[ESP],0
013CB323^ 0F87 55FEFFFF JA 013CB17E
013CB329 53 PUSH EBX------》F4就这里了。
013CB32A E8 5D000000 CALL 013CB38C
013CB32F 0183 EC000000 ADD DWORD PTR DS:[EBX+EC],EAX
013CB335 B0 01 MOV AL,1
013CB337 83C4 24 ADD ESP,24
013CB33A 5D POP EBP
013CB33B 5F POP EDI
013CB33C 5E POP ESI
013CB33D 5B POP EBX
013CB33E C3 RETN
此时查看02640100
52 13 40 00 58 13 40 00 5E 13 40 00 64 13 40 00 6A 13 40 00 70 13 40 00 76 13 40 00 7C 13 40 00
82 13 40 00 88 13 40 00 8E 13 40 00 94 13 40 00 9A 13 40 00 A0 13 40 00 A6 13 40 00 AC 13 40 00
B2 13 40 00 B8 13 40 00 BE 13 40 00 C4 13 40 00 CA 13 40 00 D6 13 40 00 DC 13 40 00 E2 13 40 00
E8 13 40 00 EE 13 40 00 F4 13 40 00 FA 13 40 00 00 14 40 00 12 14 40 00 18 14 40 00 1E 14 40 00
24 14 40 00 2A 14 40 00 30 14 40 00 36 14 40 00 3C 14 40 00 42 14 40 00 4E 14 40 00 54 14 40 00
60 14 40 00 66 14 40 00 6C 14 40 00 72 14 40 00 78 14 40 00 7E 14 40 00 8A 14 40 00 90 14 40 00
96 14 40 00 9C 14 40 00 A2 14 40 00 A8 14 40 00 AE 14 40 00 BA 14 40 00 C0 14 40 00 C6 14 40 00
CC 14 40 00 D2 14 40 00 DE 14 40 00 32 3D 40 00 3F 3D 40 00 4E 3D 40 00 5C 3D 40 00 6A 3D 40 00
73 3D 40 00 7D 3D 40 00 F2 3D 40 00 18 3E 40 00 55 3E 40 00 6A 3E 40 00 80 3E 40 00 89 3E 40 00
99 3E 40 00 A6 3E 40 00 CA 3E 40 00 44 3F 40 00 87 3F 40 00 90 3F 40 00 C4 3F 40 00 21 40 40 00
2F 40 40 00 62 40 40 00 6E 40 40 00 92 40 40 00 B7 40 40 00 DB 40 40 00 07 41 40 00 10 41 40 00
2C 41 40 00 73 41 40 00 D0 41 40 00 DE 41 40 00 11 42 40 00 1D 42 40 00 41 42 40 00 66 42 40 00
8A 42 40 00 B6 42 40 00 BF 42 40 00 DB 42 40 00 22 43 40 00 7F 43 40 80 8D 43 40 80 C0 43 40 80
CC 43 40 80 F0 43 40 80 15 44 40 80 39 44 40 80 65 44 40 80 6E 44 40 80 B2 44 40 80 0F 45 40 80
1D 45 40 00 50 45 40 80 5C 45 40 80 80 45 40 00 A5 45 40 80 C9 45 40 80 F5 45 40 80 FE 45 40 80
1A 46 40 00 57 46 40 00 B4 46 40 80 C2 46 40 00 F5 46 40 80 01 47 40 80 25 47 40 80 4A 47 40 80
6E 47 40 80 9A 47 40 80 A3 47 40 80 BF 47 40 80 DE 47 40 80 E7 47 40 80 31 48 40 80 61 48 40 80
87 48 40 80 93 48 40 80 AB 48 40 80 BB 48 40 80 48 49 40 00 5E 49 40 80 7B 49 40 80 84 49 40 00
8A 49 40 80 9D 49 40 00 35 4A 40 00 5E 4A 40 80 80 4A 40 00 89 4A 40 80 A9 4A 40 80 DA 4A 40 80
FA 4A 40 80 27 4B 40 80 3C 4B 40 80 49 4B 40 80 61 4B 40 80 6A 4B 40 80 73 4B 40 80 4C 4C 40 80
55 4C 40 80 B7 4C 40 80 C0 4C 40 80 22 4D 40 00 2B 4D 40 00 8D 4D 40 80 96 4D 40 00 EB 4D 40 00
F4 4D 40 80 0B 4E 40 80 84 4E 40 80 C9 4E 40 80 DF 4E 40 80 F7 4E 40 00 19 4F 40 00 A6 4F 40 00
B4 4F 40 80 2A 50 40 80 39 50 40 00 4F 50 40 80 76 50 40 80 AE 50 40 80 0F 51 40 80 2B 51 40 80
5A 51 40 80 74 51 40 80 7D 51 40 80 86 51 40 80 90 51 40 00 1A 52 40 80 29 52 40 80 3F 52 40 80
66 52 40 80 9E 52 40 80 FF 52 40 80 1B 53 40 80 4A 53 40 80 64 53 40 80 6D 53 40 00 76 53 40 80
80 53 40 00 0A 54 40 80 19 54 40 80 2F 54 40 00 56 54 40 80 8E 54 40 80 EF 54 40 80 0B 55 40 80
3A 55 40 80 54 55 40 80 5D 55 40 80 66 55 40 80 70 55 40 00 E2 55 40 80 01 56 40 00 39 56 40 80
6D 56 40 80 7B 56 40 00 89 56 40 00 C4 56 40 80 D4 56 40 80 DB 56 40 00 E1 56 40 00 F5 56 40 80
05 57 40 80 11 57 40 00 1E 57 40 80 B6 57 40 80 DD 57 40 80 84 58 40 80 C3 58 40 80 E4 58 40 80
41 59 40 80 88 59 40 80 53 5A 40 80 7A 5A 40 80 8A 5A 40 80 AE 5A 40 80 73 5B 40 80 9A 5B 40 80
11 5C 40 80 50 5C 40 00 71 5C 40 80 C8 5C 40 80 09 5D 40 80 D4 5D 40 80 FB 5D 40 80 0B 5E 40 80
2C 5E 40 80 E3 5E 40 80 0A 5F 40 80 81 5F 40 80 C0 5F 40 00 E1 5F 40 80 38 60 40 80 79 60 40 80
44 61 40 80 6B 61 40 80 7B 61 40 80 9C 61 40 80 3A 62 40 80 AD 62 40 80 55 63 40 80 94 63 40 00
DE 63 40 80 1D 64 40 80 3D 64 40 80 4B 64 40 80 54 64 40 80 93 64 40 80 B2 64 40 80 C0 64 40 80
C9 64 40 80 D9 64 40 00 E9 64 40 00 F9 64 40 80 00 65 40 80 44 65 40 00 75 65 40 80 BF 65 40 80
FE 65 40 80 5B 66 40 00 8C 66 40 00 F9 66 40 80 17 67 40 802367 40 80 2F 67 40 80 3C 67 40 80
D5 67 40 80 14 68 40 80 6F 68 40 80 CC 68 40 80 29 69 40 80 5A 69 40 80 EA 69 40 00 08 6A 40 00
82 6A 40 80 F4 6A 40 80 FC 6A 40 80
上面是所有变形的CALL。
撤销所有PACH的代码。
ALT+M
内存映射, 条目23
地址=00401000
大小=00007000 (28672.)
属主=wg 00400000
区段=
包含=代码
类型=Imag 01001002
访问=R
初始访问=RWE
在此处下F2断点。SHIFT+F9来到
013B0F3F C603 E9 MOV BYTE PTR DS:[EBX],0E9---》停在此处。
013B0F42 8D53 01 LEA EDX,DWORD PTR DS:[EBX+1]
013B0F45 8902 MOV DWORD PTR DS:[EDX],EAX
013B0F47 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
013B0F4A 8910 MOV DWORD PTR DS:[EAX],EDX
013B0F4C B8 05000000 MOV EAX,5
013B0F51 5B POP EBX
013B0F52 5D POP EBP
013B0F53 C2 0400 RETN 4---》CTRL+F9到这里
继续ALT+M
内存映射, 条目23
地址=00401000
大小=00007000 (28672.)
属主=wg 00400000
区段=
包含=代码
类型=Imag 01001002
访问=R
初始访问=RWE
在此处下F2断点。SHIFT+F9两下来到
004014F6 - FF25 F0104000 JMP DWORD PTR DS:[4010F0] --》停在这里 ; msvbvm60.ThunRTMain
004014FC - E9 26EFA101 JMP 01E20427-----》根据上面的可以肯定是VB的程序,这里才是真OEP。
00401501 49 DEC ECX
00401502 3A91 27806E00 CMP DL,BYTE PTR DS:[ECX+6E8027]
00401508 50 PUSH EAX
00401509 0000 ADD BYTE PTR DS:[EAX],AL
====================================
(下面我看不懂了,怎么回事,麻烦给注释一下好吗?怎么找下面三个硬件断点?)
根据进入变形的CALL找到三个如下硬件断点,还有一个AL的值。
AL=FD
013CA203 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
013CA206 8B80 E0000000 MOV EAX,DWORD PTR DS:[EAX+E0]
013CA20C 0145 FC ADD DWORD PTR SS:[EBP-4],EAX
013CA20F 8D45 0C LEA EAX,DWORD PTR SS:[EBP+C]----》1.硬件断点
013CA151 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
013CA154 8B80 E0000000 MOV EAX,DWORD PTR DS:[EAX+E0]
013CA15A 0145 FC ADD DWORD PTR SS:[EBP-4],EAX
013CA15D EB 01 JMP SHORT 013CA160---------》2.硬件断点
013CB040 8BD0 MOV EDX,EAX
013CB042 02D3 ADD DL,BL
013CB044 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]----》3.硬件断点
013CB047 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
忽略所有异常,去掉所有断点,然后下三个硬件断点
三个硬件断点下好之后,再02640000写下如下代码:
02640000 A1 C0006402 MOV EAX,DWORD PTR DS:[26400C0]
02640005 8B18 MOV EBX,DWORD PTR DS:[EAX]
02640007 81E3 FFFFFF7F AND EBX,7FFFFFFF
0264000D FFE3 JMP EBX
0264000F 0000 ADD BYTE PTR DS:[EAX],AL
02640011 0000 ADD BYTE PTR DS:[EAX],AL
02640013 0000 ADD BYTE PTR DS:[EAX],AL
02640015 0000 ADD BYTE PTR DS:[EAX],AL
02640017 0000 ADD BYTE PTR DS:[EAX],AL
02640019 0000 ADD BYTE PTR DS:[EAX],AL
0264001B 0000 ADD BYTE PTR DS:[EAX],AL
0264001D 0000 ADD BYTE PTR DS:[EAX],AL
0264001F 0000 ADD BYTE PTR DS:[EAX],AL
02640021 BF C0006402 MOV EDI,26400C0
02640026 8B07 MOV EAX,DWORD PTR DS:[EDI]
02640028 8B18 MOV EBX,DWORD PTR DS:[EAX]
0264002A 81FB FFFFFF7F CMP EBX,7FFFFFFF
02640030 79 49 JNS SHORT 0264007B
02640032 837D D4 FF CMP DWORD PTR SS:[EBP-2C],-1
02640036 74 0F JE SHORT 02640047
02640038 8B47 04 MOV EAX,DWORD PTR DS:[EDI+4]
0264003B 8B1F MOV EBX,DWORD PTR DS:[EDI]
0264003D 8B1B MOV EBX,DWORD PTR DS:[EBX]
0264003F 8918 MOV DWORD PTR DS:[EAX],EBX
02640041 83C0 04 ADD EAX,4
02640044 8947 04 MOV DWORD PTR DS:[EDI+4],EAX
02640047 8B5D FC MOV EBX,DWORD PTR SS:[EBP-4]
0264004A E8 46000000 CALL 02640095
0264004F B0 FD MOV AL,0FD
02640051 66:B9 FF15 MOV CX,15FF
02640055 3A45 EF CMP AL,BYTE PTR SS:[EBP-11]
02640058 74 05 JE SHORT 0264005F
0264005A 66:81C1 0010 ADD CX,1000
0264005F 8B07 MOV EAX,DWORD PTR DS:[EDI]
02640061 8B18 MOV EBX,DWORD PTR DS:[EAX]
02640063 81E3 FFFFFF7F AND EBX,7FFFFFFF
02640069 83C0 04 ADD EAX,4
0264006C 8907 MOV DWORD PTR DS:[EDI],EAX
0264006E 66:890B MOV WORD PTR DS:[EBX],CX
02640071 83C3 02 ADD EBX,2
02640074 8933 MOV DWORD PTR DS:[EBX],ESI
02640076 ^ EB 88 JMP SHORT 02640000
02640078 90 NOP
02640079 90 NOP
0264007A 90 NOP
0264007B 8B5D B4 MOV EBX,DWORD PTR SS:[EBP-4C]
0264007E E8 12000000 CALL 02640095
02640083 B0 FD MOV AL,0FD
02640085 66:B9 FF15 MOV CX,15FF
02640089 3AC2 CMP AL,DL
0264008B ^ 74 D2 JE SHORT 0264005F
0264008D ^ EB CB JMP SHORT 0264005A
0264008F 0000 ADD BYTE PTR DS:[EAX],AL
02640091 0000 ADD BYTE PTR DS:[EAX],AL
02640093 0000 ADD BYTE PTR DS:[EAX],AL
02640095 BE 00104000 MOV ESI,wg.<模块入口点>
0264009A 391E CMP DWORD PTR DS:[ESI],EBX
0264009C 74 0D JE SHORT 026400AB
0264009E 83C6 04 ADD ESI,4
026400A1 81FE 24114000 CMP ESI,401124
026400A7 77 03 JA SHORT 026400AC
026400A9 ^ EB EF JMP SHORT 0264009A
026400AB C3 RETN
026400AC - EB FE JMP SHORT 026400AC
二进制代码为:
A1 C0 00 64 02 8B 18 81 E3 FF FF FF 7F FF E3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 BF C0 00 64 02 8B 07 8B 18 81 FB FF FF FF 7F 79 49 83 7D D4 FF 74 0F 8B 47 04 8B 1F 8B 1B 89
18 83 C0 04 89 47 04 8B 5D FC E8 46 00 00 00 B0 FD 66 B9 FF 15 3A 45 EF 74 05 66 81 C1 00 10 8B
07 8B 18 81 E3 FF FF FF 7F 83 C0 04 89 07 66 89 0B 83 C3 02 89 33 EB 88 90 90 90 8B 5D B4 E8 12
00 00 00 B0 FD 66 B9 FF 15 3A C2 74 D2 EB CB 00 00 00 00 00 00 BE 00 10 40 00 39 1E 74 0D 83 C6
04 81 FE 24 11 40 00 77 03 EB EF C3 EB FE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 01 64 02 00 06 64 02
================================================
00401352 E8 A9ECA301 CALL 01E40000---》在这里新建EIP,F9运行程序来到
013CA203 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
013CA206 8B80 E0000000 MOV EAX,DWORD PTR DS:[EAX+E0]
013CA20C 0145 FC ADD DWORD PTR SS:[EBP-4],EAX
013CA20F 8D45 0C LEA EAX,DWORD PTR SS:[EBP+C]---》停在第一处下的硬件断点。
就运行以下脚本:
写一个OllyScript.dll插件的脚本(这招是和shoooo学来的,简单有效),内容如下:
mov eip,2640021
run
mov eip,2640021
run
mov eip,2640021
run
mov eip,2640021
run
mov eip,2640021
run
mov eip,2640021
run
(地址表里有多少项就多少行,当然少些也没关系,多运行几次)
一直运行到出现“不知道如何继续,因为内存地址00000000处是不可读。请尝试更改EIP.................”
到插件内暂停脚本运行。
这时就可以用LordPe纠正大小后dump了。
然后用ImportREC Fixed.
OEP=004014FC
RVA=00401000
SIZE=128
修复之后,载入脱壳之后的程序
004014FC >- E9 26EFA101 JMP 01E20427
00401501 49 DEC ECX
00401502 3A91 27806E00 CMP DL,BYTE PTR DS:[ECX+6E8027]
00401508 50 PUSH EAX
改为:
004014FC > $ 68 68224000 PUSH dumped_1.00402268 ; ASCII "VB5!6&vb6chs.dll"
00401501 . E8 F0FFFFFF CALL <JMP.&msvbvm60.ThunRTMain>
改了之后保存。
以上参考了kanxue的Asprotect SKE 2.2 的Advanced Import protection保护技术浅析
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课