前言:
在看雪论坛里看到有悬赏100大洋破解“小日本” TMPGEnc MPEG Editor软件(当然我不是为了100大洋,只想尽自己能力试着分析下)要求破解在看雪是不被允许的请这类朋友尊重一下自己论坛的ID啦 ^_^!!,特下来试着调试一下,看看我自己这个菜鸟到底能把这个软件跟踪那一部份(想试下自己的功力呵呵。。其实我很菜!!请不要拍砖)
安装运行马上要输入注册码,否则不给用!。。只好郁闷退出了!用PEID查显示Nothing found [Overlay] * ???没有找到$&^#%$@。。选择深度扫描显示为ASPack 2.x (without poly) -> Alexey Solodovnikov [Overlay] 哦。。!知道一些普了
OD载入:
00A6C000 > 60 PUSHAD ; //壳的入口
00A6C001 E8 00000000 CALL TMPGEncM.00A6C006
00A6C006 5E POP ESI
00A6C007 83C6 09 ADD ESI,9
00A6C00A E9 20170000 JMP TMPGEncM.00A6D72F
来到00A6C001再看ESP=0012FFA4,好了用ESP定律下HR 0012FFA4 运行F9
00A6D906 68 0120A600 PUSH TMPGEncM.00A62001 ; //断在这里
00A6D90B C3 RETN
00A6D90C 55 PUSH EBP
返回到 00A62001
00A62001 90 NOP ; //返回到这里
00A62002 60 PUSHAD ; //难道这个是第2个壳的入口
00A62003 E8 03000000 CALL TMPGEncM.00A6200B ; //F7跟进
====================================================================================
00A6200B 5D POP EBP ; TMPGEncM.00A62008
00A6200C 45 INC EBP
00A6200D 55 PUSH EBP
00A6200E C3 RETN
返回到 00A62009
00A62009 /EB 04 JMP SHORT TMPGEncM.00A6200F
00A6200B |5D POP EBP
00A6200C |45 INC EBP
00A6200D |55 PUSH EBP
00A6200E |C3 RETN
00A6200F \E8 01000000 CALL TMPGEncM.00A62015 ; //跟进!!
跟进00A62015
00A62015 5D POP EBP ; //来这里
00A62016 BB ECFFFFFF MOV EBX,-14
00A6201B 03DD ADD EBX,EBP
00A6201D 81EB 00206600 SUB EBX,TMPGEncM.00662000
00A62023 83BD 22040000 00 CMP DWORD PTR SS:[EBP+422],0
00A6202A 899D 22040000 MOV DWORD PTR SS:[EBP+422],EBX
00A62030 0F85 65030000 JNZ TMPGEncM.00A6239B
00A62036 8D85 2E040000 LEA EAX,DWORD PTR SS:[EBP+42E]
00A6203C 50 PUSH EAX
00A6203D FF95 4C0F0000 CALL DWORD PTR SS:[EBP+F4C]
00A62043 8985 26040000 MOV DWORD PTR SS:[EBP+426],EAX
00A62049 8BF8 MOV EDI,EAX
00A6204B 8D5D 5E LEA EBX,DWORD PTR SS:[EBP+5E]
00A6204E 53 PUSH EBX
00A6204F 50 PUSH EAX
00A62050 FF95 480F0000 CALL DWORD PTR SS:[EBP+F48]
00A62056 8985 4C050000 MOV DWORD PTR SS:[EBP+54C],EAX
00A6205C 8D5D 6B LEA EBX,DWORD PTR SS:[EBP+6B]
00A6205F 53 PUSH EBX
00A62060 57 PUSH EDI
00A62061 FF95 480F0000 CALL DWORD PTR SS:[EBP+F48]
00A62067 8985 50050000 MOV DWORD PTR SS:[EBP+550],EAX
00A6206D 8D45 77 LEA EAX,DWORD PTR SS:[EBP+77]
00A62070 FFE0 JMP EAX ; //F8过跳走一定要跳
跳来到这里00A6208B
00A6208B 8B9D 30050000 MOV EBX,DWORD PTR SS:[EBP+530]
00A62091 0BDB OR EBX,EBX
00A62093 74 0A JE SHORT TMPGEncM.00A6209F
00A62095 8B03 MOV EAX,DWORD PTR DS:[EBX]
00A62097 8785 34050000 XCHG DWORD PTR SS:[EBP+534],EAX
00A6209D 8903 MOV DWORD PTR DS:[EBX],EAX
00A6209F 8DB5 68050000 LEA ESI,DWORD PTR SS:[EBP+568]
00A620A5 833E 00 CMP DWORD PTR DS:[ESI],0
00A620A8 0F84 21010000 JE TMPGEncM.00A621CF
00A620AE 6A 04 PUSH 4
00A620B0 68 00100000 PUSH 1000
00A620B5 68 00180000 PUSH 1800
00A620BA 6A 00 PUSH 0
00A620BC FF95 4C050000 CALL DWORD PTR SS:[EBP+54C]
00A620C2 8985 56010000 MOV DWORD PTR SS:[EBP+156],EAX
00A620C8 8B46 04 MOV EAX,DWORD PTR DS:[ESI+4]
00A620CB 05 0E010000 ADD EAX,10E
00A620D0 6A 04 PUSH 4
00A620D2 68 00100000 PUSH 1000
00A620D7 50 PUSH EAX
00A620D8 6A 00 PUSH 0
00A620DA FF95 4C050000 CALL DWORD PTR SS:[EBP+54C]
00A620E0 8985 52010000 MOV DWORD PTR SS:[EBP+152],EAX
00A620E6 56 PUSH ESI
00A620E7 8B1E MOV EBX,DWORD PTR DS:[ESI]
00A620E9 039D 22040000 ADD EBX,DWORD PTR SS:[EBP+422]
00A620EF FFB5 56010000 PUSH DWORD PTR SS:[EBP+156]
00A620F5 FF76 04 PUSH DWORD PTR DS:[ESI+4]
00A620F8 50 PUSH EAX
00A620F9 53 PUSH EBX
00A620FA E8 6D050000 CALL TMPGEncM.00A6266C
00A620FF B3 00 MOV BL,0
00A62101 80FB 00 CMP BL,0
00A62104 75 5E JNZ SHORT TMPGEncM.00A62164
00A62106 FE85 EC000000 INC BYTE PTR SS:[EBP+EC]
00A6210C 8B3E MOV EDI,DWORD PTR DS:[ESI]
00A6210E 03BD 22040000 ADD EDI,DWORD PTR SS:[EBP+422]
00A62114 FF37 PUSH DWORD PTR DS:[EDI]
00A62116 C607 C3 MOV BYTE PTR DS:[EDI],0C3
00A62119 FFD7 CALL EDI
00A6211B 8F07 POP DWORD PTR DS:[EDI]
00A6211D 50 PUSH EAX
00A6211E 51 PUSH ECX
00A6211F 56 PUSH ESI
00A62120 53 PUSH EBX
00A62121 8BC8 MOV ECX,EAX
00A62123 83E9 06 SUB ECX,6
00A62126 8BB5 52010000 MOV ESI,DWORD PTR SS:[EBP+152]
00A6212C 33DB XOR EBX,EBX
00A6212E 0BC9 OR ECX,ECX
00A62130 74 2E JE SHORT TMPGEncM.00A62160
00A62132 78 2C JS SHORT TMPGEncM.00A62160
00A62134 AC LODS BYTE PTR DS:[ESI]
00A62135 3C E8 CMP AL,0E8
00A62137 74 0A JE SHORT TMPGEncM.00A62143
00A62139 EB 00 JMP SHORT TMPGEncM.00A6213B
00A6213B 3C E9 CMP AL,0E9
00A6213D 74 04 JE SHORT TMPGEncM.00A62143
00A6213F 43 INC EBX
00A62140 49 DEC ECX
00A62141 ^ EB EB JMP SHORT TMPGEncM.00A6212E ; //F4过
00A62143 8B06 MOV EAX,DWORD PTR DS:[ESI]
00A62145 /EB 0A JMP SHORT TMPGEncM.00A62151
00A62147 |803E 00 CMP BYTE PTR DS:[ESI],0
00A6214A ^|75 F3 JNZ SHORT TMPGEncM.00A6213F
00A6214C |24 00 AND AL,0
00A6214E |C1C0 18 ROL EAX,18
00A62151 \2BC3 SUB EAX,EBX
00A62153 8906 MOV DWORD PTR DS:[ESI],EAX
00A62155 83C3 05 ADD EBX,5
00A62158 83C6 04 ADD ESI,4
00A6215B 83E9 05 SUB ECX,5
00A6215E ^ EB CE JMP SHORT TMPGEncM.00A6212E ; //F4过
00A62160 5B POP EBX
00A62161 5E POP ESI
00A62162 59 POP ECX
00A62163 58 POP EAX
00A62164 EB 08 JMP SHORT TMPGEncM.00A6216E ; //F8过跳走
====================================================================================
00A6216E 8BC8 MOV ECX,EAX
00A62170 8B3E MOV EDI,DWORD PTR DS:[ESI]
00A62172 03BD 22040000 ADD EDI,DWORD PTR SS:[EBP+422]
00A62178 8BB5 52010000 MOV ESI,DWORD PTR SS:[EBP+152]
00A6217E C1F9 02 SAR ECX,2
00A62181 F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
00A62183 8BC8 MOV ECX,EAX
00A62185 83E1 03 AND ECX,3
00A62188 F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
00A6218A 5E POP ESI
00A6218B 68 00800000 PUSH 8000
00A62190 6A 00 PUSH 0
00A62192 FFB5 52010000 PUSH DWORD PTR SS:[EBP+152]
00A62198 FF95 50050000 CALL DWORD PTR SS:[EBP+550]
00A6219E 83C6 08 ADD ESI,8
00A621A1 833E 00 CMP DWORD PTR DS:[ESI],0
00A621A4 ^ 0F85 1EFFFFFF JNZ TMPGEncM.00A620C8 ; //F4过
00A621AA 68 00800000 PUSH 8000
00A621AF 6A 00 PUSH 0
00A621B1 FFB5 56010000 PUSH DWORD PTR SS:[EBP+156]
00A621B7 FF95 50050000 CALL DWORD PTR SS:[EBP+550]
00A621BD 8B9D 30050000 MOV EBX,DWORD PTR SS:[EBP+530]
00A621C3 0BDB OR EBX,EBX
00A621C5 74 08 JE SHORT TMPGEncM.00A621CF
00A621C7 8B03 MOV EAX,DWORD PTR DS:[EBX]
00A621C9 8785 34050000 XCHG DWORD PTR SS:[EBP+534],EAX
00A621CF 8B95 22040000 MOV EDX,DWORD PTR SS:[EBP+422]
00A621D5 8B85 2C050000 MOV EAX,DWORD PTR SS:[EBP+52C]
00A621DB 2BD0 SUB EDX,EAX
00A621DD 74 79 JE SHORT TMPGEncM.00A62258 ;//跳走
====================================================================================
00A62258 8B95 22040000 MOV EDX,DWORD PTR SS:[EBP+422]
00A6225E 8BB5 40050000 MOV ESI,DWORD PTR SS:[EBP+540]
00A62264 0BF6 OR ESI,ESI
00A62266 74 11 JE SHORT TMPGEncM.00A62279 ; //跳走
00A62268 03F2 ADD ESI,EDX
00A6226A AD LODS DWORD PTR DS:[ESI]
00A6226B 0BC0 OR EAX,EAX
00A6226D 74 0A JE SHORT TMPGEncM.00A62279
00A6226F 03C2 ADD EAX,EDX
00A62271 8BF8 MOV EDI,EAX
00A62273 66:AD LODS WORD PTR DS:[ESI]
00A62275 66:AB STOS WORD PTR ES:[EDI]
00A62277 ^ EB F1 JMP SHORT TMPGEncM.00A6226A
00A62279 BE 00F04200 MOV ESI,TMPGEncM.0042F000
00A6227E 8B95 22040000 MOV EDX,DWORD PTR SS:[EBP+422]
00A62284 03F2 ADD ESI,EDX
00A62286 8B46 0C MOV EAX,DWORD PTR DS:[ESI+C]
00A62289 85C0 TEST EAX,EAX
00A6228B 0F84 0A010000 JE TMPGEncM.00A6239B
00A62291 03C2 ADD EAX,EDX
00A62293 8BD8 MOV EBX,EAX
00A62295 50 PUSH EAX
00A62296 FF95 4C0F0000 CALL DWORD PTR SS:[EBP+F4C]
00A6229C 85C0 TEST EAX,EAX
00A6229E 75 07 JNZ SHORT TMPGEncM.00A622A7
00A622A0 53 PUSH EBX
00A622A1 FF95 500F0000 CALL DWORD PTR SS:[EBP+F50]
00A622A7 8985 44050000 MOV DWORD PTR SS:[EBP+544],EAX
00A622AD C785 48050000 0000>MOV DWORD PTR SS:[EBP+548],0
00A622B7 8B95 22040000 MOV EDX,DWORD PTR SS:[EBP+422]
00A622BD 8B06 MOV EAX,DWORD PTR DS:[ESI]
00A622BF 85C0 TEST EAX,EAX
00A622C1 75 03 JNZ SHORT TMPGEncM.00A622C6
00A622C3 8B46 10 MOV EAX,DWORD PTR DS:[ESI+10]
00A622C6 03C2 ADD EAX,EDX
00A622C8 0385 48050000 ADD EAX,DWORD PTR SS:[EBP+548]
00A622CE 8B18 MOV EBX,DWORD PTR DS:[EAX] ; TMPGEncM.0042FB6E
00A622D0 8B7E 10 MOV EDI,DWORD PTR DS:[ESI+10]
00A622D3 03FA ADD EDI,EDX
00A622D5 03BD 48050000 ADD EDI,DWORD PTR SS:[EBP+548]
00A622DB 85DB TEST EBX,EBX
00A622DD 0F84 A2000000 JE TMPGEncM.00A62385
00A622E3 F7C3 00000080 TEST EBX,80000000
00A622E9 75 04 JNZ SHORT TMPGEncM.00A622EF
00A622EB 03DA ADD EBX,EDX
00A622ED 43 INC EBX
00A622EE 43 INC EBX
00A622EF 53 PUSH EBX
00A622F0 81E3 FFFFFF7F AND EBX,7FFFFFFF
00A622F6 53 PUSH EBX
00A622F7 FFB5 44050000 PUSH DWORD PTR SS:[EBP+544]
00A622FD FF95 480F0000 CALL DWORD PTR SS:[EBP+F48]
00A62303 85C0 TEST EAX,EAX
00A62305 5B POP EBX
00A62306 75 6F JNZ SHORT TMPGEncM.00A62377 ; //跳走
====================================================================================
00A62377 8907 MOV DWORD PTR DS:[EDI],EAX ; ntdll.RtlDeleteCriticalSection
00A62379 8385 48050000 04 ADD DWORD PTR SS:[EBP+548],4
00A62380 ^ E9 32FFFFFF JMP TMPGEncM.00A622B7 ; //F4过
00A62385 8906 MOV DWORD PTR DS:[ESI],EAX
00A62387 8946 0C MOV DWORD PTR DS:[ESI+C],EAX
00A6238A 8946 10 MOV DWORD PTR DS:[ESI+10],EAX
00A6238D 83C6 14 ADD ESI,14
00A62390 8B95 22040000 MOV EDX,DWORD PTR SS:[EBP+422]
00A62396 ^ E9 EBFEFFFF JMP TMPGEncM.00A62286 ; //F4过
00A6239B B8 8CAC3B00 MOV EAX,3BAC8C
00A623A0 50 PUSH EAX
00A623A1 0385 22040000 ADD EAX,DWORD PTR SS:[EBP+422]
00A623A7 59 POP ECX
00A623A8 0BC9 OR ECX,ECX
00A623AA 8985 A8030000 MOV DWORD PTR SS:[EBP+3A8],EAX
00A623B0 61 POPAD ; //好东西心里一阵抓狂!!^_^
00A623B1 /75 08 JNZ SHORT TMPGEncM.00A623BB ; //跳走
00A623B3 B8 01000000 MOV EAX,1
00A623B8 C2 0C00 RETN 0C
00A623BB 68 8CAC7B00 PUSH TMPGEncM.007BAC8C ; //来到这里
00A623C0 C3 RETN ; //奔向小康生活哦!!
返回到 007BAC8C 这超巨大段跳跃肯定是返回到程序入口了!!
007BAC8C 55 PUSH EBP ; 这个就是程序入口OEP
007BAC8D 8BEC MOV EBP,ESP
007BAC8F 83C4 EC ADD ESP,-14
007BAC92 53 PUSH EBX
007BAC93 56 PUSH ESI
007BAC94 57 PUSH EDI
007BAC95 33C0 XOR EAX,EAX
007BAC97 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
好了请出LordPE选到,选到TMPGEncM进程dump full吧。OK!!程序就这样转存了。再请出Import 修复,在OEP栏内输入003BAC8C,点击自动查找IAT、再点击获取输入表,最后修复刚才转存的文件就脱壳就大工告成了!!!
再用PEID查是Borland Delphi 6.0 - 7.0写的大小有6.44MB好大的主程序文件啊!运行看看,哦。有提示哦是这个文件大小不一明显是有自校验文件大小的!!
OD载入 下断BP SetFilePointer F9运行断下了。。
7C810DA6 > 8BFF MOV EDI,EDI ; //断在这里
7C810DA8 55 PUSH EBP
7C810DA9 8BEC MOV EBP,ESP
7C810DAB 83EC 28 SUB ESP,28
7C810DAE 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
7C810DB1 25 03000010 AND EAX,10000003
7C810DB6 83F8 03 CMP EAX,3
7C810DB9 0F84 AABC0200 JE kernel32.7C83CA69
再看看堆栈窗口代码如下:
0012FCE8 004934AB /CALL 到 SetFilePointer 来自 TMPGEncM.004934A6 ; //反汇编跟随
0012FCEC 000000F0 |hFile = 000000F0
0012FCF0 00000000 |OffsetLo = 0
0012FCF4 0012FD08 |pOffsetHi = 0012FD08
0012FCF8 00000001 \Origin = FILE_CURRENT
取消断点BC SetFilePointer 然后反汇编跟随004934A6
004934AB |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX ; //F4来这里,好让我们F8往下走吧!!
004934AE |. 837D F8 FF CMP DWORD PTR SS:[EBP-8],-1
004934B2 |. 75 17 JNZ SHORT TMPGEncM.004934CB
004934B4 |. E8 3B3EF7FF CALL <JMP.&kernel32.GetLastError> ; [GetLastError
004934B9 |. 85C0 TEST EAX,EAX
004934BB |. 74 0E JE SHORT TMPGEncM.004934CB
004934BD |. C745 F8 FFFFFFFF MOV DWORD PTR SS:[EBP-8],-1
004934C4 |. C745 FC FFFFFFFF MOV DWORD PTR SS:[EBP-4],-1
004934CB |> 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
004934CE |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
004934D1 |. 5E POP ESI
004934D2 |. 5B POP EBX
004934D3 |. 59 POP ECX
004934D4 |. 59 POP ECX
004934D5 |. 5D POP EBP
004934D6 \. C2 0800 RETN 8 ; //到这里返回返回到 00492D95
5次Ctrl+F9返回到如下:
0074FDDA . 8A45 FF MOV AL,BYTE PTR SS:[EBP-1]
0074FDDD . 5F POP EDI
0074FDDE . 5E POP ESI
0074FDDF . 5B POP EBX
0074FDE0 . 8BE5 MOV ESP,EBP
0074FDE2 . 5D POP EBP
0074FDE3 . C3 RETN ; //5次Ctrl+F9来到这里,F8返回到 0074FF35
F8返回到 0074FF35
0074FF35 |. 84C0 TEST AL,AL ; //测试AL
0074FF37 |. 75 1A JNZ SHORT TMPGEncM.0074FF53 ; //这就是关键跳转了!!修改为JMP文件大小自校验就推失效了!
0074FF39 |. 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
0074FF3C |. A1 FCE17C00 MOV EAX,DWORD PTR DS:[7CE1FC]
0074FF41 |. E8 626CCBFF CALL TMPGEncM.00406BA8
0074FF46 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0074FF49 |. E8 0E51CEFF CALL TMPGEncM.0043505C
0074FF4E |. E8 5946CBFF CALL TMPGEncM.004045AC
0074FF53 |> 33C0 XOR EAX,EAX
0074FF55 |. 5A POP EDX
0074FF56 |. 59 POP ECX
0074FF57 |. 59 POP ECX
0074FF58 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
0074FF5B |. 68 7DFF7400 PUSH TMPGEncM.0074FF7D
0074FF60 |> 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
0074FF63 |. BA 02000000 MOV EDX,2
0074FF68 |. E8 DF47CBFF CALL TMPGEncM.0040474C
0074FF6D |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
0074FF70 |. E8 EB4ECBFF CALL TMPGEncM.00404E60
0074FF75 \. C3 RETN
再往上看来这里!!
0074FEFC /$ 55 PUSH EBP
0074FEFD |. 8BEC MOV EBP,ESP
0074FEFF |. 6A 00 PUSH 0
0074FF01 |. 6A 00 PUSH 0
0074FF03 |. 6A 00 PUSH 0
0074FF05 |. 33C0 XOR EAX,EAX
0074FF07 |. 55 PUSH EBP
0074FF08 |. 68 76FF7400 PUSH TMPGEncM.0074FF76
0074FF0D |. 64:FF30 PUSH DWORD PTR FS:[EAX]
0074FF10 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
0074FF13 |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
0074FF16 |. A1 F4E47C00 MOV EAX,DWORD PTR DS:[7CE4F4]
0074FF1B |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
0074FF1D |. E8 4247D3FF CALL TMPGEncM.00484664 ; //取主程序的路径
0074FF22 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
0074FF25 |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
0074FF28 |. E8 1751CBFF CALL TMPGEncM.00405044 ; //取主程序的路径
0074FF2D |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0074FF30 |. E8 87FAFFFF CALL TMPGEncM.0074F9BC ; //这个就是文件大自校验的关键CALL了,有兴趣的朋友不妨跟进分析一下!在这里我就不追了我的目的已达到了!
保存后运行,OK了。这到这里!!脱壳和文件大小自校验就搞定了!我在分析文件大小自校验时走了不少冤枉弯路思路一下就乱来套了!!!这个软件有一地方就是会检测很多我们调试用的工具这个就有点好奇了!!唯独不见检测我们常用的调试器OD哦。!!奇怪哦!!
可以看到检测的调试器和注册表监时工具有NTICE、TRW(国人的骄傲小日本也怕了)、FileMon(Crack好助手)、RegMon(Crack好助手)、PIPE、SICE(大名顶顶调试器)。
接下来就是分析注册码流程了!。。我只是粗看了一下没有时间跟了要出去办工作了。。。查看了一些有好几种算法哦有时间再跟一下。。!不知道有那位大侠有时间接着分析呢。。在此先感谢了!!
fcrjzmd
22:03 2006-2-15
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课