-
-
[原创]笨笨菜菜脱壳练手二之PECompact 2.5 Retail
-
发表于: 2006-10-6 00:22 4267
-
[菜菜打杂]笨笨菜菜脱壳练手二之PECompact 2.5 Retail
【破解作者】 EasyStudy
【作者邮箱】 PhantomNet@163.com
【使用工具】 ODICE,LordPE,ImprotREC16F
【破解平台】 Win9x/NT/2000/XP
【软件名称】 PECompact 2.5 Retail加壳的winXP记事本程序
【加壳方式】 PECompact 2.5 Retail加壳
【破解声明】 我是只菜菜鸟,技术不高给新手和想学脱壳的给个示范,希望共同学习!
声明:我是在大大们的基础资料上学习的,谢谢大大们!
PECompact 2.5 Retail -> Jeremy Collake
PEID探测到是上面的壳,好我们现在来破了它
//OD进入来到这里很陌生...
01001000 > B8 44AA0101 MOV EAX,NOTEPAD.0101AA44
01001005 50 PUSH EAX
01001006 64:FF35 0000000>PUSH DWORD PTR FS:[0]
0100100D 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
01001014 33C0 XOR EAX,EAX
01001016 8908 MOV DWORD PTR DS:[EAX],ECX
01001018 50 PUSH EAX
01001019 45 INC EBP
0100101A 43 INC EBX
0100101B 6F OUTS DX,DWORD PTR ES:[EDI] ; I/O 命令
0100101C 6D INS DWORD PTR ES:[EDI],DX ; I/O 命令
0100101D 70 61 JO SHORT NOTEPAD.01001080
0100101F 637432 00 ARPL WORD PTR DS:[EDX+ESI],SI
01001023 5A POP EDX
01001024 CF IRETD
01001025 5B POP EBX
//下断点BP VirtualFree,中断后,取消断点,Ctrl+F9两次:
00400867 C2 0C00 RETN 0C
0040086A 0000 ADD BYTE PTR DS:[EAX],AL
0040086C 50 PUSH EAX
0040086D 0001 ADD BYTE PTR DS:[ECX],AL
0040086F 0000 ADD BYTE PTR DS:[EAX],AL
00400871 0000 ADD BYTE PTR DS:[EAX],AL
00400873 0100 ADD DWORD PTR DS:[EAX],EAX
00400875 0000 ADD BYTE PTR DS:[EAX],AL
00400877 019D 730000C8 ADD DWORD PTR SS:[EBP+C8000073],EBX
0040087D 0000 ADD BYTE PTR DS:[EAX],AL
0040087F 0074A9 01 ADD BYTE PTR DS:[ECX+EBP*4+1],DH
00400883 0000 ADD BYTE PTR DS:[EAX],AL
00400885 0000 ADD BYTE PTR DS:[EAX],AL
00400887 0010 ADD BYTE PTR DS:[EAX],DL
00400889 9E SAHF
0040088A 0100 ADD DWORD PTR DS:[EAX],EAX
//根据资料我们查找push 8000:
//1处:
00400854 68 00800000 PUSH 8000
00400859 6A 00 PUSH 0
0040085B FF75 FC PUSH DWORD PTR SS:[EBP-4]
0040085E FF57 0C CALL DWORD PTR DS:[EDI+C]
00400861 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00400864 5F POP EDI
00400865 5E POP ESI
00400866 C9 LEAVE
00400867 C2 0C00 RETN 0C
//2处:
00400ABC 68 00800000 PUSH 8000
00400AC1 6A 00 PUSH 0
00400AC3 FFB5 191E0010 PUSH DWORD PTR SS:[EBP+10001E19]
00400AC9 FF95 2D1E0010 CALL DWORD PTR SS:[EBP+10001E2D]
00400ACF 8B46 0C MOV EAX,DWORD PTR DS:[ESI+C]
00400AD2 03C7 ADD EAX,EDI
00400AD4 5D POP EBP
00400AD5 5E POP ESI
00400AD6 5F POP EDI
00400AD7 5B POP EBX
00400AD8 C3 RETN //F2断下 SHIFT+F9来到这里
看到代码好象不和大大门的一样嘿嘿^_^
0101AAE4 8985 FA120010 MOV DWORD PTR SS:[EBP+100012FA],EAX ; NOTEPAD.0100739D
0101AAEA 8BF0 MOV ESI,EAX
0101AAEC 8B4B 14 MOV ECX,DWORD PTR DS:[EBX+14]
0101AAEF 5A POP EDX
0101AAF0 EB 0C JMP SHORT NOTEPAD.0101AAFE
0101AAF2 03CA ADD ECX,EDX
0101AAF4 68 00800000 PUSH 8000
0101AAF9 6A 00 PUSH 0
0101AAFB 57 PUSH EDI
0101AAFC FF11 CALL DWORD PTR DS:[ECX]
0101AAFE 8BC6 MOV EAX,ESI
0101AB00 5A POP EDX
0101AB01 5E POP ESI
0101AB02 5F POP EDI
0101AB03 59 POP ECX
0101AB04 5B POP EBX
0101AB05 5D POP EBP
0101AB06 FFE0 JMP EAX 这里跳OEP..我不看大大门的资料我都知道.
这个壳我可是F8和F7跟出来的...没下断点..就下了个内存断点..没资料的情况下硬把它跟出来了
现在想起来很不容易了.F2断下
F9到这里..再F7...跟..
0100739D 6A 70 PUSH 70 //这里我们来到了OEP
0100739F 68 98180001 PUSH NOTEPAD.01001898
010073A4 E8 BF010000 CALL NOTEPAD.01007568
010073A9 33DB XOR EBX,EBX
010073AB 53 PUSH EBX
010073AC 8B3D CC100001 MOV EDI,DWORD PTR DS:[10010CC] ;
kernel32.GetModuleHandleA
010073B2 FFD7 CALL EDI
010073B4 66:8138 4D5A CMP WORD PTR DS:[EAX],5A4D
010073B9 75 1F JNZ SHORT NOTEPAD.010073DA
010073BB 8B48 3C MOV ECX,DWORD PTR DS:[EAX+3C]
010073BE 03C8 ADD ECX,EAX
010073C0 8139 50450000 CMP DWORD PTR DS:[ECX],4550
010073C6 75 12 JNZ SHORT NOTEPAD.010073DA
010073C8 0FB741 18 MOVZX EAX,WORD PTR DS:[ECX+18]
010073CC 3D 0B010000 CMP EAX,10B
010073D1 74 1F JE SHORT NOTEPAD.010073F2
010073D3 3D 0B020000 CMP EAX,20B
010073D8 74 05 JE SHORT NOTEPAD.010073DF
010073DA 895D E4 MOV DWORD PTR SS:[EBP-1C],EBX
010073DD EB 27 JMP SHORT NOTEPAD.01007406
010073DF 83B9 84000000 0>CMP DWORD PTR DS:[ECX+84],0E
好了最后DUMP程序发现了LOADPE脱壳不全,脱完的壳很多东西都运行有多多少少的错误
用OD脱比较全面..
DUMP出来是112KB,我们再修复...
在修复 的时候有一个指针是被打了?号的,没管它修复程序正常只是大了了现在是116KB了
我看看能不能减肥...
我删掉一个多余的区段为107KB比以前小了点,,,但是按大大们的方法修的话肯定可以变小..累啊
如果有心学减肥就多找找了...我还是觉得大就大点吧..嘿嘿....^_^
也许朋友们说怎么都拿记事本玩..来点实际的嘛..我可是很实际的了
WIN98换WINXP记事本了,原因是找不到WIN98的记事本#_#
好既然大家觉得都拿记事是因为记事本简单,现在我来为大家搞出一个新鲜的程序
E:\004游戏\网络游戏\梦幻西游\my.exe
PECompact 2.x -> Jeremy Collake
经检查是上面的壳...
同样的办法...下断...
//OD载入在这里
0040DD9A > B8 F4F84300 MOV EAX,my.0043F8F4
0040DD9F 50 PUSH EAX
0040DDA0 64:FF35 0000000>PUSH DWORD PTR FS:[0]
0040DDA7 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
0040DDAE 33C0 XOR EAX,EAX
0040DDB0 8908 MOV DWORD PTR DS:[EAX],ECX
0040DDB2 50 PUSH EAX
0040DDB3 45 INC EBP
0040DDB4 43 INC EBX
//开头代码就是了
//下断点BP VirtualFree,中断后,取消断点,Ctrl+F9两次:
我们到这里..实在是郁闷了..不用找代码了..直接就到了
003903EC 8B7E 08 MOV EDI,DWORD PTR DS:[ESI+8]
003903EF 03C7 ADD EAX,EDI
003903F1 68 00800000 PUSH 8000
003903F6 6A 00 PUSH 0
003903F8 FFB5 421B0010 PUSH DWORD PTR SS:[EBP+10001B42]
003903FE FF10 CALL DWORD PTR DS:[EAX]
00390400 8B46 0C MOV EAX,DWORD PTR DS:[ESI+C]
00390403 03C7 ADD EAX,EDI
00390405 5D POP EBP
00390406 5E POP ESI
00390407 5F POP EDI
00390408 5B POP EBX
00390409 C3 RETN
哈哈....我们的办法对这个程序没用.....
有错误为:发现调试程序运行,请关掉后重新启动机器
真的还加校验了,也就是暗桩...
重新载入....
下断点bp kernel32.LoadLibraryA SHIFT+F9中断一次后到下面:
7C801D77 > 8BFF MOV EDI,EDI
7C801D79 55 PUSH EBP
7C801D7A 8BEC MOV EBP,ESP
7C801D7C 837D 08 00 CMP DWORD PTR SS:[EBP+8],0
7C801D80 53 PUSH EBX
7C801D81 56 PUSH ESI
7C801D82 74 14 JE SHORT kernel32.7C801D98
7C801D84 68 F0E2807C PUSH kernel32.7C80E2F0 ; ASCII "twain_32.dll"
7C801D89 FF75 08 PUSH DWORD PTR SS:[EBP+8]
7C801D8C FF15 9C13807C CALL DWORD PTR DS:[<&ntdll._strcmpi>] ; ntdll._stricmp
//主要是看堆载:
0012FF6C 0039042D /CALL 到 LoadLibraryA 来自 00390427
0012FF70 00390B29 \FileName = "kernel32"
//CTRL+F9 再F7到这里
0039042D 8945 FC MOV DWORD PTR SS:[EBP-4],EAX ; kernel32.7C800000
00390430 8B56 04 MOV EDX,DWORD PTR DS:[ESI+4]
00390433 8B7E 08 MOV EDI,DWORD PTR DS:[ESI+8]
00390436 03D3 ADD EDX,EBX
00390438 03FB ADD EDI,EBX
0039043A 33C0 XOR EAX,EAX
0039043C 0302 ADD EAX,DWORD PTR DS:[EDX]
0039043E 74 16 JE SHORT 00390456
00390440 52 PUSH EDX
00390441 8B02 MOV EAX,DWORD PTR DS:[EDX]
00390443 03C3 ADD EAX,EBX
00390445 50 PUSH EAX
00390446 FF75 FC PUSH DWORD PTR SS:[EBP-4]
00390449 FF93 4E1B0010 CALL DWORD PTR DS:[EBX+10001B4E]
//好我们现在看:
//我们看到了吧...查找特征代码PUSH 8000 郁闷了..我们..找到了就1处.
003903F1 68 00800000 PUSH 8000
003903F6 6A 00 PUSH 0
003903F8 FFB5 421B0010 PUSH DWORD PTR SS:[EBP+10001B42]
003903FE FF10 CALL DWORD PTR DS:[EAX]
00390400 8B46 0C MOV EAX,DWORD PTR DS:[ESI+C]
00390403 03C7 ADD EAX,EDI
00390405 5D POP EBP
00390406 5E POP ESI
00390407 5F POP EDI
00390408 5B POP EBX
00390409 C3 RETN
//我们把断点放上面点
003903C9 8BDE MOV EBX,ESI //放这里,不然又说发现调试程序了...
003903CB 837B 48 01 CMP DWORD PTR DS:[EBX+48],1
003903CF 75 16 JNZ SHORT 003903E7
003903D1 8B43 0C MOV EAX,DWORD PTR DS:[EBX+C]
//我们F7到这里,我也不明白为什么,这样就不提示错误了
//很有意思我们到了OEP附近了
0043F9A1 8985 23120010 MOV DWORD PTR SS:[EBP+10001223],EAX ; my.<模块入口点>
0043F9A7 8BF0 MOV ESI,EAX
0043F9A9 59 POP ECX
0043F9AA 5A POP EDX
0043F9AB 03CA ADD ECX,EDX
0043F9AD 68 00800000 PUSH 8000
0043F9B2 6A 00 PUSH 0
0043F9B4 57 PUSH EDI
0043F9B5 FF11 CALL DWORD PTR DS:[ECX]
0043F9B7 8BC6 MOV EAX,ESI
0043F9B9 5A POP EDX
0043F9BA 5E POP ESI
0043F9BB 5F POP EDI
0043F9BC 59 POP ECX
0043F9BD 5B POP EBX
0043F9BE 5D POP EBP
0043F9BF FFE0 JMP EAX //EAX就是OEP地址
//F7到这里算是到了OEP了
0040DD9A > 6A 60 PUSH 60
0040DD9C 68 80F24100 PUSH my.0041F280
0040DDA1 E8 922A0000 CALL my.00410838
0040DDA6 BF 94000000 MOV EDI,94
0040DDAB 8BC7 MOV EAX,EDI
0040DDAD E8 4EF4FFFF CALL my.0040D200
0040DDB2 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
0040DDB5 8BF4 MOV ESI,ESP
0040DDB7 893E MOV DWORD PTR DS:[ESI],EDI
0040DDB9 56 PUSH ESI
0040DDBA FF15 F4A04100 CALL DWORD PTR DS:[41A0F4] ;
kernel32.GetVersionExA
0040DDC0 8B4E 10 MOV ECX,DWORD PTR DS:[ESI+10]
0040DDC3 890D 3C524200 MOV DWORD PTR DS:[42523C],ECX
0040DDC9 8B46 04 MOV EAX,DWORD PTR DS:[ESI+4]
0040DDCC A3 48524200 MOV DWORD PTR DS:[425248],EAX
0040DDD1 8B56 08 MOV EDX,DWORD PTR DS:[ESI+8]
0040DDD4 8915 4C524200 MOV DWORD PTR DS:[42524C],EDX
0040DDDA 8B76 0C MOV ESI,DWORD PTR DS:[ESI+C]
0040DDDD 81E6 FF7F0000 AND ESI,7FFF
0040DDE3 8935 40524200 MOV DWORD PTR DS:[425240],ESI
0040DDE9 83F9 02 CMP ECX,2
0040DDEC 74 0C JE SHORT my.0040DDFA
0040DDEE 81CE 00800000 OR ESI,8000
0040DDF4 8935 40524200 MOV DWORD PTR DS:[425240],ESI
0040DDFA C1E0 08 SHL EAX,8
0040DDFD 03C2 ADD EAX,EDX
0040DDFF A3 44524200 MOV DWORD PTR DS:[425244],EAX
0040DE04 33F6 XOR ESI,ESI
0040DE06 56 PUSH ESI
0040DE07 8B3D C0A04100 MOV EDI,DWORD PTR DS:[41A0C0] ;
kernel32.GetModuleHandleA
//下面我们DUMP程序
脱壳后是259KB....
有一个函数是打问号的..但是不管也没关系..一切都很正常
为了游戏的稳定性..我的技术又不搞就不减肥了
反正是不到300KB..哈哈..也没关系的了
检查为下面的内容:
Microsoft Visual C++ 7.0
【破解作者】 EasyStudy
【作者邮箱】 PhantomNet@163.com
【使用工具】 ODICE,LordPE,ImprotREC16F
【破解平台】 Win9x/NT/2000/XP
【软件名称】 PECompact 2.5 Retail加壳的winXP记事本程序
【加壳方式】 PECompact 2.5 Retail加壳
【破解声明】 我是只菜菜鸟,技术不高给新手和想学脱壳的给个示范,希望共同学习!
声明:我是在大大们的基础资料上学习的,谢谢大大们!
PECompact 2.5 Retail -> Jeremy Collake
PEID探测到是上面的壳,好我们现在来破了它
//OD进入来到这里很陌生...
01001000 > B8 44AA0101 MOV EAX,NOTEPAD.0101AA44
01001005 50 PUSH EAX
01001006 64:FF35 0000000>PUSH DWORD PTR FS:[0]
0100100D 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
01001014 33C0 XOR EAX,EAX
01001016 8908 MOV DWORD PTR DS:[EAX],ECX
01001018 50 PUSH EAX
01001019 45 INC EBP
0100101A 43 INC EBX
0100101B 6F OUTS DX,DWORD PTR ES:[EDI] ; I/O 命令
0100101C 6D INS DWORD PTR ES:[EDI],DX ; I/O 命令
0100101D 70 61 JO SHORT NOTEPAD.01001080
0100101F 637432 00 ARPL WORD PTR DS:[EDX+ESI],SI
01001023 5A POP EDX
01001024 CF IRETD
01001025 5B POP EBX
//下断点BP VirtualFree,中断后,取消断点,Ctrl+F9两次:
00400867 C2 0C00 RETN 0C
0040086A 0000 ADD BYTE PTR DS:[EAX],AL
0040086C 50 PUSH EAX
0040086D 0001 ADD BYTE PTR DS:[ECX],AL
0040086F 0000 ADD BYTE PTR DS:[EAX],AL
00400871 0000 ADD BYTE PTR DS:[EAX],AL
00400873 0100 ADD DWORD PTR DS:[EAX],EAX
00400875 0000 ADD BYTE PTR DS:[EAX],AL
00400877 019D 730000C8 ADD DWORD PTR SS:[EBP+C8000073],EBX
0040087D 0000 ADD BYTE PTR DS:[EAX],AL
0040087F 0074A9 01 ADD BYTE PTR DS:[ECX+EBP*4+1],DH
00400883 0000 ADD BYTE PTR DS:[EAX],AL
00400885 0000 ADD BYTE PTR DS:[EAX],AL
00400887 0010 ADD BYTE PTR DS:[EAX],DL
00400889 9E SAHF
0040088A 0100 ADD DWORD PTR DS:[EAX],EAX
//根据资料我们查找push 8000:
//1处:
00400854 68 00800000 PUSH 8000
00400859 6A 00 PUSH 0
0040085B FF75 FC PUSH DWORD PTR SS:[EBP-4]
0040085E FF57 0C CALL DWORD PTR DS:[EDI+C]
00400861 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00400864 5F POP EDI
00400865 5E POP ESI
00400866 C9 LEAVE
00400867 C2 0C00 RETN 0C
//2处:
00400ABC 68 00800000 PUSH 8000
00400AC1 6A 00 PUSH 0
00400AC3 FFB5 191E0010 PUSH DWORD PTR SS:[EBP+10001E19]
00400AC9 FF95 2D1E0010 CALL DWORD PTR SS:[EBP+10001E2D]
00400ACF 8B46 0C MOV EAX,DWORD PTR DS:[ESI+C]
00400AD2 03C7 ADD EAX,EDI
00400AD4 5D POP EBP
00400AD5 5E POP ESI
00400AD6 5F POP EDI
00400AD7 5B POP EBX
00400AD8 C3 RETN //F2断下 SHIFT+F9来到这里
看到代码好象不和大大门的一样嘿嘿^_^
0101AAE4 8985 FA120010 MOV DWORD PTR SS:[EBP+100012FA],EAX ; NOTEPAD.0100739D
0101AAEA 8BF0 MOV ESI,EAX
0101AAEC 8B4B 14 MOV ECX,DWORD PTR DS:[EBX+14]
0101AAEF 5A POP EDX
0101AAF0 EB 0C JMP SHORT NOTEPAD.0101AAFE
0101AAF2 03CA ADD ECX,EDX
0101AAF4 68 00800000 PUSH 8000
0101AAF9 6A 00 PUSH 0
0101AAFB 57 PUSH EDI
0101AAFC FF11 CALL DWORD PTR DS:[ECX]
0101AAFE 8BC6 MOV EAX,ESI
0101AB00 5A POP EDX
0101AB01 5E POP ESI
0101AB02 5F POP EDI
0101AB03 59 POP ECX
0101AB04 5B POP EBX
0101AB05 5D POP EBP
0101AB06 FFE0 JMP EAX 这里跳OEP..我不看大大门的资料我都知道.
这个壳我可是F8和F7跟出来的...没下断点..就下了个内存断点..没资料的情况下硬把它跟出来了
现在想起来很不容易了.F2断下
F9到这里..再F7...跟..
0100739D 6A 70 PUSH 70 //这里我们来到了OEP
0100739F 68 98180001 PUSH NOTEPAD.01001898
010073A4 E8 BF010000 CALL NOTEPAD.01007568
010073A9 33DB XOR EBX,EBX
010073AB 53 PUSH EBX
010073AC 8B3D CC100001 MOV EDI,DWORD PTR DS:[10010CC] ;
kernel32.GetModuleHandleA
010073B2 FFD7 CALL EDI
010073B4 66:8138 4D5A CMP WORD PTR DS:[EAX],5A4D
010073B9 75 1F JNZ SHORT NOTEPAD.010073DA
010073BB 8B48 3C MOV ECX,DWORD PTR DS:[EAX+3C]
010073BE 03C8 ADD ECX,EAX
010073C0 8139 50450000 CMP DWORD PTR DS:[ECX],4550
010073C6 75 12 JNZ SHORT NOTEPAD.010073DA
010073C8 0FB741 18 MOVZX EAX,WORD PTR DS:[ECX+18]
010073CC 3D 0B010000 CMP EAX,10B
010073D1 74 1F JE SHORT NOTEPAD.010073F2
010073D3 3D 0B020000 CMP EAX,20B
010073D8 74 05 JE SHORT NOTEPAD.010073DF
010073DA 895D E4 MOV DWORD PTR SS:[EBP-1C],EBX
010073DD EB 27 JMP SHORT NOTEPAD.01007406
010073DF 83B9 84000000 0>CMP DWORD PTR DS:[ECX+84],0E
好了最后DUMP程序发现了LOADPE脱壳不全,脱完的壳很多东西都运行有多多少少的错误
用OD脱比较全面..
DUMP出来是112KB,我们再修复...
在修复 的时候有一个指针是被打了?号的,没管它修复程序正常只是大了了现在是116KB了
我看看能不能减肥...
我删掉一个多余的区段为107KB比以前小了点,,,但是按大大们的方法修的话肯定可以变小..累啊
如果有心学减肥就多找找了...我还是觉得大就大点吧..嘿嘿....^_^
也许朋友们说怎么都拿记事本玩..来点实际的嘛..我可是很实际的了
WIN98换WINXP记事本了,原因是找不到WIN98的记事本#_#
好既然大家觉得都拿记事是因为记事本简单,现在我来为大家搞出一个新鲜的程序
E:\004游戏\网络游戏\梦幻西游\my.exe
PECompact 2.x -> Jeremy Collake
经检查是上面的壳...
同样的办法...下断...
//OD载入在这里
0040DD9A > B8 F4F84300 MOV EAX,my.0043F8F4
0040DD9F 50 PUSH EAX
0040DDA0 64:FF35 0000000>PUSH DWORD PTR FS:[0]
0040DDA7 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
0040DDAE 33C0 XOR EAX,EAX
0040DDB0 8908 MOV DWORD PTR DS:[EAX],ECX
0040DDB2 50 PUSH EAX
0040DDB3 45 INC EBP
0040DDB4 43 INC EBX
//开头代码就是了
//下断点BP VirtualFree,中断后,取消断点,Ctrl+F9两次:
我们到这里..实在是郁闷了..不用找代码了..直接就到了
003903EC 8B7E 08 MOV EDI,DWORD PTR DS:[ESI+8]
003903EF 03C7 ADD EAX,EDI
003903F1 68 00800000 PUSH 8000
003903F6 6A 00 PUSH 0
003903F8 FFB5 421B0010 PUSH DWORD PTR SS:[EBP+10001B42]
003903FE FF10 CALL DWORD PTR DS:[EAX]
00390400 8B46 0C MOV EAX,DWORD PTR DS:[ESI+C]
00390403 03C7 ADD EAX,EDI
00390405 5D POP EBP
00390406 5E POP ESI
00390407 5F POP EDI
00390408 5B POP EBX
00390409 C3 RETN
哈哈....我们的办法对这个程序没用.....
有错误为:发现调试程序运行,请关掉后重新启动机器
真的还加校验了,也就是暗桩...
重新载入....
下断点bp kernel32.LoadLibraryA SHIFT+F9中断一次后到下面:
7C801D77 > 8BFF MOV EDI,EDI
7C801D79 55 PUSH EBP
7C801D7A 8BEC MOV EBP,ESP
7C801D7C 837D 08 00 CMP DWORD PTR SS:[EBP+8],0
7C801D80 53 PUSH EBX
7C801D81 56 PUSH ESI
7C801D82 74 14 JE SHORT kernel32.7C801D98
7C801D84 68 F0E2807C PUSH kernel32.7C80E2F0 ; ASCII "twain_32.dll"
7C801D89 FF75 08 PUSH DWORD PTR SS:[EBP+8]
7C801D8C FF15 9C13807C CALL DWORD PTR DS:[<&ntdll._strcmpi>] ; ntdll._stricmp
//主要是看堆载:
0012FF6C 0039042D /CALL 到 LoadLibraryA 来自 00390427
0012FF70 00390B29 \FileName = "kernel32"
//CTRL+F9 再F7到这里
0039042D 8945 FC MOV DWORD PTR SS:[EBP-4],EAX ; kernel32.7C800000
00390430 8B56 04 MOV EDX,DWORD PTR DS:[ESI+4]
00390433 8B7E 08 MOV EDI,DWORD PTR DS:[ESI+8]
00390436 03D3 ADD EDX,EBX
00390438 03FB ADD EDI,EBX
0039043A 33C0 XOR EAX,EAX
0039043C 0302 ADD EAX,DWORD PTR DS:[EDX]
0039043E 74 16 JE SHORT 00390456
00390440 52 PUSH EDX
00390441 8B02 MOV EAX,DWORD PTR DS:[EDX]
00390443 03C3 ADD EAX,EBX
00390445 50 PUSH EAX
00390446 FF75 FC PUSH DWORD PTR SS:[EBP-4]
00390449 FF93 4E1B0010 CALL DWORD PTR DS:[EBX+10001B4E]
//好我们现在看:
//我们看到了吧...查找特征代码PUSH 8000 郁闷了..我们..找到了就1处.
003903F1 68 00800000 PUSH 8000
003903F6 6A 00 PUSH 0
003903F8 FFB5 421B0010 PUSH DWORD PTR SS:[EBP+10001B42]
003903FE FF10 CALL DWORD PTR DS:[EAX]
00390400 8B46 0C MOV EAX,DWORD PTR DS:[ESI+C]
00390403 03C7 ADD EAX,EDI
00390405 5D POP EBP
00390406 5E POP ESI
00390407 5F POP EDI
00390408 5B POP EBX
00390409 C3 RETN
//我们把断点放上面点
003903C9 8BDE MOV EBX,ESI //放这里,不然又说发现调试程序了...
003903CB 837B 48 01 CMP DWORD PTR DS:[EBX+48],1
003903CF 75 16 JNZ SHORT 003903E7
003903D1 8B43 0C MOV EAX,DWORD PTR DS:[EBX+C]
//我们F7到这里,我也不明白为什么,这样就不提示错误了
//很有意思我们到了OEP附近了
0043F9A1 8985 23120010 MOV DWORD PTR SS:[EBP+10001223],EAX ; my.<模块入口点>
0043F9A7 8BF0 MOV ESI,EAX
0043F9A9 59 POP ECX
0043F9AA 5A POP EDX
0043F9AB 03CA ADD ECX,EDX
0043F9AD 68 00800000 PUSH 8000
0043F9B2 6A 00 PUSH 0
0043F9B4 57 PUSH EDI
0043F9B5 FF11 CALL DWORD PTR DS:[ECX]
0043F9B7 8BC6 MOV EAX,ESI
0043F9B9 5A POP EDX
0043F9BA 5E POP ESI
0043F9BB 5F POP EDI
0043F9BC 59 POP ECX
0043F9BD 5B POP EBX
0043F9BE 5D POP EBP
0043F9BF FFE0 JMP EAX //EAX就是OEP地址
//F7到这里算是到了OEP了
0040DD9A > 6A 60 PUSH 60
0040DD9C 68 80F24100 PUSH my.0041F280
0040DDA1 E8 922A0000 CALL my.00410838
0040DDA6 BF 94000000 MOV EDI,94
0040DDAB 8BC7 MOV EAX,EDI
0040DDAD E8 4EF4FFFF CALL my.0040D200
0040DDB2 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
0040DDB5 8BF4 MOV ESI,ESP
0040DDB7 893E MOV DWORD PTR DS:[ESI],EDI
0040DDB9 56 PUSH ESI
0040DDBA FF15 F4A04100 CALL DWORD PTR DS:[41A0F4] ;
kernel32.GetVersionExA
0040DDC0 8B4E 10 MOV ECX,DWORD PTR DS:[ESI+10]
0040DDC3 890D 3C524200 MOV DWORD PTR DS:[42523C],ECX
0040DDC9 8B46 04 MOV EAX,DWORD PTR DS:[ESI+4]
0040DDCC A3 48524200 MOV DWORD PTR DS:[425248],EAX
0040DDD1 8B56 08 MOV EDX,DWORD PTR DS:[ESI+8]
0040DDD4 8915 4C524200 MOV DWORD PTR DS:[42524C],EDX
0040DDDA 8B76 0C MOV ESI,DWORD PTR DS:[ESI+C]
0040DDDD 81E6 FF7F0000 AND ESI,7FFF
0040DDE3 8935 40524200 MOV DWORD PTR DS:[425240],ESI
0040DDE9 83F9 02 CMP ECX,2
0040DDEC 74 0C JE SHORT my.0040DDFA
0040DDEE 81CE 00800000 OR ESI,8000
0040DDF4 8935 40524200 MOV DWORD PTR DS:[425240],ESI
0040DDFA C1E0 08 SHL EAX,8
0040DDFD 03C2 ADD EAX,EDX
0040DDFF A3 44524200 MOV DWORD PTR DS:[425244],EAX
0040DE04 33F6 XOR ESI,ESI
0040DE06 56 PUSH ESI
0040DE07 8B3D C0A04100 MOV EDI,DWORD PTR DS:[41A0C0] ;
kernel32.GetModuleHandleA
//下面我们DUMP程序
脱壳后是259KB....
有一个函数是打问号的..但是不管也没关系..一切都很正常
为了游戏的稳定性..我的技术又不搞就不减肥了
反正是不到300KB..哈哈..也没关系的了
检查为下面的内容:
Microsoft Visual C++ 7.0
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
赞赏
看原图
赞赏
雪币:
留言: