本人是刚入门的小菜,这是我的第一篇脱文,9易其稿,如有不足之处希望各位朋友之处,O(∩_∩)O~
目标程序:见附件
解压附件完后。
首先用peid查壳:什么也没有
用FI查得:NSPack v1.? <aplib> LXP nsp?
直接od载入
00460159 > 9C pushfd//程序入口
0046015A 60 pushad//f8单步
0046015B E8 00000000 call Baccarat.00460160//esp凸显,用esp定律
00460160 5D pop ebp
00460161 B8 B1854000 mov eax,Baccarat.004085B1
00460166 2D AA854000 sub eax,Baccarat.004085AA
0046016B 2BE8 sub ebp,eax
0046016D 8DB5 D3FEFFFF lea esi,dword ptr ss:[ebp-12D]
00460173 8B06 mov eax,dword ptr ds:[esi]
00460175 83F8 00 cmp eax,0
00460178 74 11 je short Baccarat.0046018B
0046017A 8DB5 DFFEFFFF lea esi,dword ptr ss:[ebp-121]
00460180 8B06 mov eax,dword ptr ds:[esi]
00460182 83F8 01 cmp eax,1
00460185 0F84 F1010000 je Baccarat.0046037C
0046018B C706 01000000 mov dword ptr ds:[esi],1
00460191 8BD5 mov edx,ebp
00460193 8B85 AFFEFFFF mov eax,dword ptr ss:[ebp-151]
00460199 2BD0 sub edx,eax
0046019B 8995 AFFEFFFF mov dword ptr ss:[ebp-151],edx
004601A1 0195 C7FEFFFF add dword ptr ss:[ebp-139],edx
hr 0012ffa0回车,F9运行
0046037D 9D popfd//来到这里了,F8
0046037E - E9 AE34FAFF jmp Baccarat.00403831//(这里是跨段跳转)F8单步,到达oep
00460383 8BB5 ABFEFFFF mov esi,dword ptr ss:[ebp-155]
00460389 0BF6 or esi,esi
0046038B 0F84 97000000 je Baccarat.00460428
00460391 8B95 AFFEFFFF mov edx,dword ptr ss:[ebp-151]
00460397 03F2 add esi,edx
00460399 833E 00 cmp dword ptr ds:[esi],0
0046039C 75 0E jnz short Baccarat.004603AC
0046039E 837E 04 00 cmp dword ptr ds:[esi+4],0
004603A2 75 08 jnz short Baccarat.004603AC
004603A4 837E 08 00 cmp dword ptr ds:[esi+8],0
004603A8 75 02 jnz short Baccarat.004603AC
004603AA EB 7A jmp short Baccarat.00460426
004603AC 8B5E 08 mov ebx,dword ptr ds:[esi+8]
004603AF 03DA add ebx,edx
004603B1 53 push ebx
004603B2 52 push edx
004603B3 56 push esi
004603B4 8DBD 4FFFFFFF lea edi,dword ptr ss:[ebp-B1]
004603BA 037E 04 add edi,dword ptr ds:[esi+4]
004603BD 83C6 0C add esi,0C
此时来到oep,O(∩_∩)O哈哈~,记下“3831”待会修复用到
00403831 55 push ebp//右击od,“用ollydbgDump脱壳程序”,保存dump.exe
00403832 8BEC mov ebp,esp
00403834 6A FF push -1
00403836 68 F0624000 push Baccarat.004062F0
0040383B 68 A44C4000 push Baccarat.00404CA4
00403840 64:A1 00000000 mov eax,dword ptr fs:[0]
00403846 50 push eax
00403847 64:8925 0000000>mov dword ptr fs:[0],esp
0040384E 83EC 58 sub esp,58
00403851 53 push ebx
00403852 56 push esi
00403853 57 push edi
00403854 8965 E8 mov dword ptr ss:[ebp-18],esp
00403857 FF15 48604000 call dword ptr ds:[406048] ; kernel32.GetVersion
0040385D 33D2 xor edx,edx
0040385F 8AD4 mov dl,ah
00403861 8915 6C8A4000 mov dword ptr ds:[408A6C],edx
00403867 8BC8 mov ecx,eax
00403869 81E1 FF000000 and ecx,0FF
0040386F 890D 688A4000 mov dword ptr ds:[408A68],ecx
第二步:修复
打开ImportRec,oep填上“3831”,自动查找IAT,获取输入表,修复转储文件“dump.exe”,打开修复好的“dump_.exe”
显示“Invalid data in the file!”修复失败
使用另一种修复思路:
1.用peid打开加壳文件“BaccaratGroup.exe”,点击“EP区段”,最后一行显示“nsp4 00081000 00000162 00028400 00000000 E0000060” 00028400+00000000=28400
2.用winhex打开加壳程序,找到了“28400”这个地址,右击此行其实位置,“Beginning of Block”,再到最后的地方,右击“End of Block”,Ctrl+C。
3.用winhex打开刚才修复好的“dump_.exe”,找到最后位置,Ctrl+V,然后保存。
再次打开“dump_.exe”O(∩_∩)O哈哈~,终于运行了。这是一个vc写的程序,看oep特征就看得出来。
小结:脱壳esp定律用起来很简单,关键是修复,介绍的是另一种修复方法。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!