【软件名称】: XorIt.protected.exe
【加壳方式】: ACProtect V2.0.X
【编写语言】: VC
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
用PEID查壳显示为:ACProtect V2.0.X -> RiSco * Sign.By.fly *
用OD载入,设置好OD选项为忽略所有异常:
00401000 > 68 00C04300 push XorIt_pr.0043C000 //OD停在此
00401005 68 0B104000 push XorIt_pr.0040100B
0040100A C3 retn
0040100B C3 retn
F8单步到:
0043C000 55 push ebp
0043C001 0F87 03000000 ja XorIt_pr.0043C00A //注意此时的ESP值,下好ESP断点
下好断点后,F9运行,3次后,停在了:
第1次:
00451B1D 8905 11CB4300 mov dword ptr ds:[43CB11],eax
00451B23 FF35 11CB4300 push dword ptr ds:[43CB11]
00451B29 8F05 8DC94300 pop dword ptr ds:[43C98D]
00451B2F FF35 8DC94300 push dword ptr ds:[43C98D]
00451B35 893D 61C84300 mov dword ptr ds:[43C861],edi
00451B3B FF35 61C84300 push dword ptr ds:[43C861]
00451B41 C70424 45CA4300 mov dword ptr ss:[esp],XorIt_pr.004>
00451B48 8F05 21CB4300 pop dword ptr ds:[43CB21]
00451B4E FF35 21CB4300 push dword ptr ds:[43CB21]
00451B54 58 pop eax
00451B55 8928 mov dword ptr ds:[eax],ebp
00451B57 8F05 59C84300 pop dword ptr ds:[43C859]
00451B5D FF35 59C84300 push dword ptr ds:[43C859]
00451B63 8F05 49C94300 pop dword ptr ds:[43C949]
00451B69 90 nop
00451B6A 90 nop
00451B6B 60 pushad //注意这里
00451B6C E8 0B000000 call XorIt_pr.00451B7C //及这里
将程序中断的位置与pushad之间的代码记录下来(以二进制的形式):
89 05 11 CB 43 00 FF 35 11 CB 43 00 8F 05 8D C9 43 00 FF 35 8D C9 43 00 89 3D 61 C8 43 00 FF 35
61 C8 43 00 C7 04 24 45 CA 43 00 8F 05 21 CB 43 00 FF 35 21 CB 43 00 58 89 28 8F 05 59 C8 43 00
FF 35 59 C8 43 00 8F 05 49 C9 43 00 90 90
然后在pushad的下一行代码,此处的为:
00451B6C E8 0B000000 call XorIt_pr.00451B7C //F2下断,F9运行后中断下来
观察ESP的值,清除旧的ESP断点,下新有ESP断点(当然,相同的就不用理会了,哈)
*****************************************************
参照上面的操作:
*****************************************************
第2次:
00451D7D 8B05 49C94300 mov eax,dword ptr ds:[43C949]
00451D83 FF35 45CA4300 push dword ptr ds:[43CA45] ; ntdll.7C930738
00451D89 8925 ADCA4300 mov dword ptr ds:[43CAAD],esp
00451D8F FF35 ADCA4300 push dword ptr ds:[43CAAD]
00451D95 8B2C24 mov ebp,dword ptr ss:[esp]
00451D98 8F05 3DCA4300 pop dword ptr ds:[43CA3D]
00451D9E 50 push eax
00451D9F B8 71C94300 mov eax,XorIt_pr.0043C971
00451DA4 8910 mov dword ptr ds:[eax],edx
00451DA6 58 pop eax
00451DA7 FF35 71C94300 push dword ptr ds:[43C971]
00451DAD 51 push ecx
00451DAE 890424 mov dword ptr ss:[esp],eax
00451DB1 57 push edi
00451DB2 BF F5CA4300 mov edi,XorIt_pr.0043CAF5
00451DB7 8BC7 mov eax,edi
00451DB9 5F pop edi
00451DBA 57 push edi
00451DBB 8BF8 mov edi,eax
00451DBD 8BD7 mov edx,edi
00451DBF 5F pop edi
00451DC0 8F05 D9C94300 pop dword ptr ds:[43C9D9]
00451DC6 8B05 D9C94300 mov eax,dword ptr ds:[43C9D9]
00451DCC 90 nop
00451DCD 60 pushad
00451DCE EB 0C jmp short XorIt_pr.00451DDC
8B 05 49 C9 43 00 FF 35 45 CA 43 00 89 25 AD CA 43 00 FF 35 AD CA 43 00 8B 2C 24 8F 05 3D CA 43
00 50 B8 71 C9 43 00 89 10 58 FF 35 71 C9 43 00 51 89 04 24 57 BF F5 CA 43 00 8B C7 5F 57 8B F8
8B D7 5F 8F 05 D9 C9 43 00 8B 05 D9 C9 43 00 90
第3次:
00451FBE 8902 mov dword ptr ds:[edx],eax
00451FC0 8F05 DDCA4300 pop dword ptr ds:[43CADD]
00451FC6 51 push ecx
00451FC7 B9 DDCA4300 mov ecx,XorIt_pr.0043CADD
00451FCC 8B11 mov edx,dword ptr ds:[ecx]
00451FCE 59 pop ecx
00451FCF FF35 F5CA4300 push dword ptr ds:[43CAF5]
00451FD5 C70424 FFFFFFFF mov dword ptr ss:[esp],-1
00451FDC 8935 31C94300 mov dword ptr ds:[43C931],esi
00451FE2 FF35 31C94300 push dword ptr ds:[43C931]
00451FE8 8F05 6DC84300 pop dword ptr ds:[43C86D]
00451FEE FF35 6DC84300 push dword ptr ds:[43C86D]
00451FF4 8915 15CA4300 mov dword ptr ds:[43CA15],edx
00451FFA FF35 15CA4300 push dword ptr ds:[43CA15]
00452000 68 98224200 push XorIt_pr.00422298
00452005 5A pop edx
00452006 50 push eax
00452007 B8 C5C84300 mov eax,XorIt_pr.0043C8C5
0045200C 8910 mov dword ptr ds:[eax],edx
0045200E 60 pushad
0045200F 7E 0B jle short XorIt_pr.0045201C
89 02 8F 05 DD CA 43 00 51 B9 DD CA 43 00 8B 11 59 FF 35 F5 CA 43 00 C7 04 24 FF FF FF FF 89 35
31 C9 43 00 FF 35 31 C9 43 00 8F 05 6D C8 43 00 FF 35 6D C8 43 00 89 15 15 CA 43 00 FF 35 15 CA
43 00 68 98 22 42 00 5A 50 B8 C5 C8 43 00 89 10
第4次:
00452213 58 pop eax ; XorIt_pr.0043C8C5
00452214 8B1424 mov edx,dword ptr ss:[esp]
00452217 8F05 75CA4300 pop dword ptr ds:[43CA75]
0045221D FF35 C5C84300 push dword ptr ds:[43C8C5] ; XorIt_pr.00422298
00452223 8B3424 mov esi,dword ptr ss:[esp]
00452226 8F05 91C94300 pop dword ptr ds:[43C991]
0045222C 57 push edi
0045222D BF 69C84300 mov edi,XorIt_pr.0043C869
00452232 8937 mov dword ptr ds:[edi],esi
00452234 5F pop edi
00452235 FF35 69C84300 push dword ptr ds:[43C869]
0045223B 8F05 B9C84300 pop dword ptr ds:[43C8B9]
00452241 8B3424 mov esi,dword ptr ss:[esp]
00452244 8F05 21C94300 pop dword ptr ds:[43C921]
0045224A FF35 B9C84300 push dword ptr ds:[43C8B9]
00452250 891D 81C94300 mov dword ptr ds:[43C981],ebx
00452256 FF35 81C94300 push dword ptr ds:[43C981]
0045225C 891424 mov dword ptr ss:[esp],edx
0045225F 890424 mov dword ptr ss:[esp],eax
00452262 90 nop
00452263 60 pushad
00452264 7A 11 jpe short XorIt_pr.00452277
58 8B 14 24 8F 05 75 CA 43 00 FF 35 C5 C8 43 00 8B 34 24 8F 05 91 C9 43 00 57 BF 69 C8 43 00 89
37 5F FF 35 69 C8 43 00 8F 05 B9 C8 43 00 8B 34 24 8F 05 21 C9 43 00 FF 35 B9 C8 43 00 89 1D 81
C9 43 00 FF 35 81 C9 43 00 89 14 24 89 04 24 90
第5次:
0045248C 891C24 mov dword ptr ss:[esp],ebx
0045248F C70424 D4724000 mov dword ptr ss:[esp],XorIt_pr.004>
00452496 64:A1 00000000 mov eax,dword ptr fs:[0]
0045249C 891D 29CA4300 mov dword ptr ds:[43CA29],ebx
004524A2 FF35 29CA4300 push dword ptr ds:[43CA29]
004524A8 893C24 mov dword ptr ss:[esp],edi
004524AB 891424 mov dword ptr ss:[esp],edx
004524AE 890D D1C94300 mov dword ptr ds:[43C9D1],ecx
004524B4 FF35 D1C94300 push dword ptr ds:[43C9D1]
004524BA 890424 mov dword ptr ss:[esp],eax
004524BD 8915 EDC84300 mov dword ptr ds:[43C8ED],edx
004524C3 FF35 EDC84300 push dword ptr ds:[43C8ED]
004524C9 68 B1C94300 push XorIt_pr.0043C9B1
004524CE 5A pop edx
004524CF 52 push edx
004524D0 58 pop eax
004524D1 5A pop edx
004524D2 50 push eax
004524D3 5A pop edx
004524D4 8F05 4DCA4300 pop dword ptr ds:[43CA4D]
004524DA 90 nop
004524DB 90 nop
004524DC 60 pushad
004524DD EB 0A jmp short XorIt_pr.004524E9
89 1C 24 C7 04 24 D4 72 40 00 64 A1 00 00 00 00 89 1D 29 CA 43 00 FF 35 29 CA 43 00 89 3C 24 89
14 24 89 0D D1 C9 43 00 FF 35 D1 C9 43 00 89 04 24 89 15 ED C8 43 00 FF 35 ED C8 43 00 68 B1 C9
43 00 5A 52 58 5A 50 5A 8F 05 4D CA 43 00 90 90
第6次:
004526D7 55 push ebp
004526D8 8F05 E5CA4300 pop dword ptr ds:[43CAE5]
004526DE 60 pushad
004526DF 61 popad
004526E0 8B05 4DCA4300 mov eax,dword ptr ds:[43CA4D]
004526E6 8902 mov dword ptr ds:[edx],eax
004526E8 8F05 D5C94300 pop dword ptr ds:[43C9D5]
004526EE FF35 D5C94300 push dword ptr ds:[43C9D5]
004526F4 5A pop edx
004526F5 FF35 B1C94300 push dword ptr ds:[43C9B1]
004526FB 64:8925 00000000 mov dword ptr fs:[0],esp
00452702 83C4 A4 add esp,-5C
00452705 57 push edi
00452706 BF C1CA4300 mov edi,XorIt_pr.0043CAC1
0045270B 891F mov dword ptr ds:[edi],ebx
0045270D 5F pop edi
0045270E FF35 C1CA4300 push dword ptr ds:[43CAC1]
00452714 8F05 99CA4300 pop dword ptr ds:[43CA99]
0045271A FF35 99CA4300 push dword ptr ds:[43CA99]
00452720 891D 51CA4300 mov dword ptr ds:[43CA51],ebx
00452726 FF35 51CA4300 push dword ptr ds:[43CA51]
0045272C 893424 mov dword ptr ss:[esp],esi
0045272F 90 nop
00452730 60 pushad
00452731 E8 0E000000 call XorIt_pr.00452744
55 8F 05 E5 CA 43 00 60 61 8B 05 4D CA 43 00 89 02 8F 05 D5 C9 43 00 FF 35 D5 C9 43 00 5A FF 35
B1 C9 43 00 64 89 25 00 00 00 00 83 C4 A4 57 BF C1 CA 43 00 89 1F 5F FF 35 C1 CA 43 00 8F 05 99
CA 43 00 FF 35 99 CA 43 00 89 1D 51 CA 43 00 FF 35 51 CA 43 00 89 34 24 90 [c/ode]
第7次: [code]
0045292F 8F05 2DC94300 pop dword ptr ds:[43C92D] ; kernel32.7C816FD7
00452935 FF35 2DC94300 push dword ptr ds:[43C92D]
0045293B 891D 69C94300 mov dword ptr ds:[43C969],ebx
00452941 FF35 69C94300 push dword ptr ds:[43C969]
00452947 893C24 mov dword ptr ss:[esp],edi
0045294A 8F05 35C84300 pop dword ptr ds:[43C835]
00452950 FF35 35C84300 push dword ptr ds:[43C835]
00452956 8965 E8 mov dword ptr ss:[ebp-18],esp
00452959 FF15 60824200 call dword ptr ds:[428260] ; kernel32.GetVersion
0045295F A3 005A4200 mov dword ptr ds:[425A00],eax
00452964 A1 005A4200 mov eax,dword ptr ds:[425A00]
00452969 C1E8 08 shr eax,8
0045296C 25 FF000000 and eax,0FF
00452971 A3 0C5A4200 mov dword ptr ds:[425A0C],eax
00452976 FF35 005A4200 push dword ptr ds:[425A00]
0045297C 8B0C24 mov ecx,dword ptr ss:[esp]
0045297F 60 pushad
00452980 E8 0C000000 call XorIt_pr.00452991
8F 05 2D C9 43 00 FF 35 2D C9 43 00 89 1D 69 C9 43 00 FF 35 69 C9 43 00 89 3C 24 8F 05 35 C8 43
00 FF 35 35 C8 43 00 89 65 E8 FF 15 60 82 42 00 A3 00 5A 42 00 A1 00 5A 42 00 C1 E8 08 25 FF 00
00 00 A3 0C 5A 42 00 FF 35 00 5A 42 00 8B 0C 24
第8次:
00452B7D 8F05 31C84300 pop dword ptr ds:[43C831]
00452B83 81E1 FF000000 and ecx,0FF
00452B89 8905 B9C94300 mov dword ptr ds:[43C9B9],eax
00452B8F FF35 B9C94300 push dword ptr ds:[43C9B9]
00452B95 C705 BDC84300 D1C8>mov dword ptr ds:[43C8BD],XorIt_pr.>
00452B9F 8B05 BDC84300 mov eax,dword ptr ds:[43C8BD]
00452BA5 8908 mov dword ptr ds:[eax],ecx
00452BA7 8F05 3DC84300 pop dword ptr ds:[43C83D]
00452BAD 8B05 3DC84300 mov eax,dword ptr ds:[43C83D]
00452BB3 FF35 D1C84300 push dword ptr ds:[43C8D1]
00452BB9 8F05 085A4200 pop dword ptr ds:[425A08]
00452BBF 52 push edx
00452BC0 BA 95C94300 mov edx,XorIt_pr.0043C995
00452BC5 893A mov dword ptr ds:[edx],edi
00452BC7 5A pop edx
00452BC8 90 nop
00452BC9 90 nop
00452BCA 60 pushad
00452BCB E8 0B000000 call XorIt_pr.00452BDB
8F 05 31 C8 43 00 81 E1 FF 00 00 00 89 05 B9 C9 43 00 FF 35 B9 C9 43 00 C7 05 BD C8 43 00 D1 C8
43 00 8B 05 BD C8 43 00 89 08 8F 05 3D C8 43 00 8B 05 3D C8 43 00 FF 35 D1 C8 43 00 8F 05 08 5A
42 00 52 BA 95 C9 43 00 89 3A 5A 90 90
第9次:
00452DC7 FF35 95C94300 push dword ptr ds:[43C995]
00452DCD 890C24 mov dword ptr ss:[esp],ecx
00452DD0 56 push esi
00452DD1 8F05 9DCA4300 pop dword ptr ds:[43CA9D]
00452DD7 FF35 9DCA4300 push dword ptr ds:[43CA9D]
00452DDD 56 push esi
00452DDE C70424 085A4200 mov dword ptr ss:[esp],XorIt_pr.004>
00452DE5 8F05 81C84300 pop dword ptr ds:[43C881]
00452DEB 8B35 81C84300 mov esi,dword ptr ds:[43C881]
00452DF1 8905 0DCB4300 mov dword ptr ds:[43CB0D],eax
00452DF7 FF35 0DCB4300 push dword ptr ds:[43CB0D]
00452DFD 57 push edi
00452DFE 8BFE mov edi,esi
00452E00 8BC7 mov eax,edi
00452E02 5F pop edi
00452E03 50 push eax
00452E04 59 pop ecx
00452E05 8F05 0DCA4300 pop dword ptr ds:[43CA0D]
00452E0B 8B05 0DCA4300 mov eax,dword ptr ds:[43CA0D]
00452E11 8B3424 mov esi,dword ptr ss:[esp]
00452E14 90 nop
00452E15 90 nop
00452E16 60 pushad
00452E17 7C 0E jl short XorIt_pr.00452E27
FF 35 95 C9 43 00 89 0C 24 56 8F 05 9D CA 43 00 FF 35 9D CA 43 00 56 C7 04 24 08 5A 42 00 8F 05
81 C8 43 00 8B 35 81 C8 43 00 89 05 0D CB 43 00 FF 35 0D CB 43 00 57 8B FE 8B C7 5F 50 59 8F 05
0D CA 43 00 8B 05 0D CA 43 00 8B 34 24 90 90
第10次:
00453032 8F05 E5C94300 pop dword ptr ds:[43C9E5] ; kernel32.7C816FD7
00453038 8B11 mov edx,dword ptr ds:[ecx]
0045303A 8B0C24 mov ecx,dword ptr ss:[esp]
0045303D 8F05 85C84300 pop dword ptr ds:[43C885]
00453043 C1E2 08 shl edx,8
00453046 0315 0C5A4200 add edx,dword ptr ds:[425A0C]
0045304C 56 push esi
0045304D 891424 mov dword ptr ss:[esp],edx
00453050 8F05 21CA4300 pop dword ptr ds:[43CA21]
00453056 FF35 21CA4300 push dword ptr ds:[43CA21]
0045305C 8F05 045A4200 pop dword ptr ds:[425A04]
00453062 A1 005A4200 mov eax,dword ptr ds:[425A00]
00453067 C1E8 10 shr eax,10
0045306A 25 FFFF0000 and eax,0FFFF
0045306F A3 005A4200 mov dword ptr ds:[425A00],eax
00453074 90 nop
00453075 90 nop
00453076 60 pushad
00453077 EB 0B jmp short XorIt_pr.00453084
8F 05 E5 C9 43 00 8B 11 8B 0C 24 8F 05 85 C8 43 00 C1 E2 08 03 15 0C 5A 42 00 56 89 14 24 8F 05
21 CA 43 00 FF 35 21 CA 43 00 8F 05 04 5A 42 00 A1 00 5A 42 00 C1 E8 10 25 FF FF 00 00 A3 00 5A
42 00 90 90
第11次:
弹出了一个试用窗口,如图:

我们先确定,Alt+M打开内存镜像,在代码段00401000上F2下断,再确定:
004536FA /EB 01 jmp short XorIt_pr.004536FD //确定后,程序中断在此
004536FC |E8 FF253F37 call 37845D00
00453701 45 inc ebp
00453702 0060 E8 add byte ptr ds:[eax-18],ah
F8运行:
004536FD - FF25 3F374500 jmp dword ptr ds:[45373F] ; XorIt_pr.00401FFC
00453703 60 pushad
00453704 E8 00000000 call XorIt_pr.00453709
jmp dword ptr ds:[45373F]时F8就直奔FOP了:
00401FFC 6A 00 push 0
00401FFE E8 ED500000 call XorIt_pr.004070F0
00402003 83C4 04 add esp,4
00402006 85C0 test eax,eax
00402008 75 0A jnz short XorIt_pr.00402014
0040200A 6A 1C push 1C
0040200C E8 FF000000 call XorIt_pr.00402110
00402011 83C4 04 add esp,4
00402014 C745 FC 00000000 mov dword ptr ss:[ebp-4],0
0040201B E8 604D0000 call XorIt_pr.00406D80
00402020 FF15 5C824200 call dword ptr ds:[42825C] ; kernel32.GetCommandLineA
00402026 A3 58734200 mov dword ptr ds:[427358],eax
0040202B E8 304B0000 call XorIt_pr.00406B60
00402030 A3 C8594200 mov dword ptr ds:[4259C8],eax
00402035 E8 16460000 call XorIt_pr.00406650
0040203A E8 C1440000 call XorIt_pr.00406500
0040203F E8 1C400000 call XorIt_pr.00406060
00402044 C745 D0 00000000 mov dword ptr ss:[ebp-30],0
0040204B 8D4D A4 lea ecx,dword ptr ss:[ebp-5C]
0040204E 51 push ecx
0040204F FF15 58824200 call dword ptr ds:[428258] ; kernel32.GetStartupInfoA
00402055 E8 E6430000 call XorIt_pr.00406440
典型的VC结构,可惜Stolen Code的代码太多了,这就是我们需要记录上面的那么代码的原因了!
我们取消下在代码段上的断点,用LoadPE来dump出完整的程序,然后用ImportREC来修复一下指针:
IAT SIZE的大小需要手动计算一下为:180
修复之后,用OD载入修复的程序,Alt+M打开内存镜像,注意在这里:
Memory map, 条目 30
地址=00455000 //要得是这个地址,哈,我们在这个段一个大范围的空白填补代码
大小=00001000 (4096.)
属主=dumped_ 00400000
区段=.mackt
包含=输入表
类型=Imag 01001002
访问=R
初始访问=RWE
Ctrl+G来到00455000:
找到:
004554C0 0000 add byte ptr ds:[eax],al
选中一个大块(足以填充我们先前找到的代码),然后在结尾补上一个跳转到FOEP的跳转:
push 00401FFC
retn
保存一份,再用LoadPE打开,将程序入口地址改为:554C0 ,保存,运行,哈哈,成功!
--------------------------------------------------------------------------------
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢!
2008年06月15日 18:08:47
XorIt.protected.rar