本人菜鸟。
先用PEID扫描了一下,显示:
ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov
-------------------------------------------------------分隔线-----------------------------------------------
多谢二楼的兄弟提醒,重新设置了一下忽略的异常,可以正确定位到最后一次异常的地方了,不过和教程上面的有一点不同,我说说我的过程:
前面的忽略掉,从硬件断点 (hr 0012FF68) 断下来的地方说起,代码如下:
01DA56B0 /EB 44 jmp short 01DA56F6 <======== 停在这里了,F8一下
01DA56B2 |EB 01 jmp short 01DA56B5
01DA56B4 |9A 51579CFC BF0>call far 00BF:FC9C5751
01DA56BB |0000 add byte ptr [eax], al
01DA56BD |00B9 00000000 add byte ptr [ecx], bh
01DA56C3 |F3:AA rep stos byte ptr es:[edi]
01DA56C5 |9D popfd
01DA56C6 |5F pop edi
01DA56C7 |59 pop ecx
01DA56C8 |C3 retn
01DA56C9 |55 push ebp
01DA56CA |8BEC mov ebp, esp
01DA56CC |53 push ebx
从上面的jmp 来到这里:
01DA56F6 03C3 add eax, ebx ; SO3D.00400000
01DA56F8 BB 00000000 mov ebx, 0
01DA56FD 0BDB or ebx, ebx
01DA56FF 75 07 jnz short 01DA5708
01DA5701 894424 1C mov dword ptr [esp+1C], eax
01DA5705 61 popad
01DA5706 50 push eax
01DA5707 C3 retn <========== 从上面一直 F7 跟到这里,再按F7一下就返回到 0078D55D 了
01DA5708 E8 00000000 call 01DA570D
01DA570D 5D pop ebp
01DA570E 81ED 4DE14B00 sub ebp, 4BE14D ; ASCII CC,"烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫"
01DA5714 8D85 F2E04B00 lea eax, dword ptr [ebp+4BE0F2]
01DA571A 8D8D 94E14B00 lea ecx, dword ptr [ebp+4BE194]
01DA5720 03CB add ecx, ebx
01DA5722 8941 01 mov dword ptr [ecx+1], eax
01DA5725 8D85 36E14B00 lea eax, dword ptr [ebp+4BE136]
01DA572B 8D8D FAE04B00 lea ecx, dword ptr [ebp+4BE0FA]
01DA5731 8901 mov dword ptr [ecx], eax
01DA5733 B8 5E140000 mov eax, 145E
01DA5738 8D8D FFE04B00 lea ecx, dword ptr [ebp+4BE0FF]
01DA573E 8901 mov dword ptr [ecx], eax
01DA5740 8D8D 94E14B00 lea ecx, dword ptr [ebp+4BE194]
01DA5746 8D85 94F34B00 lea eax, dword ptr [ebp+4BF394]
01DA574C 51 push ecx
01DA574D 50 push eax
01DA574E E8 76FFFFFF call 01DA56C9
01DA5753 61 popad
01DA5754 68 00000000 push 0
01DA5759 C3 retn <========== 按教程的演示,这里应该是 prefix repne:,可以用F7跟进才对,可是我这里是retn,不知道怎么办了.
01DA575A 0000 add byte ptr [eax], al
01DA575C 0000 add byte ptr [eax], al
01DA575E 0000 add byte ptr [eax], al
01DA5760 0000 add byte ptr [eax], al
01DA5762 0000 add byte ptr [eax], al <======下面全部是一大堆重复
………………
来到下面:
0078D552 B8 FF000000 mov eax, 0FF
0078D557 E8 19560000 call 00792B75
0078D55C C3 retn
0078D55D E8 366D0100 call 007A4298 <======== 从上面的 01DA5707 返回到这一句,F8会飞掉,还是F7跟入
0078D562 ^ E9 16FEFFFF jmp 0078D37D
0078D567 55 push ebp
0078D568 8BEC mov ebp, esp
0078D56A 51 push ecx
0078D56B 51 push ecx
0078D56C D9EE fldz
0078D56E 8B45 08 mov eax, dword ptr [ebp+8]
0078D571 DD5D F8 fstp qword ptr [ebp-8]
0078D574 8945 F8 mov dword ptr [ebp-8], eax
0078D577 8B45 14 mov eax, dword ptr [ebp+14]
0078D57A 3345 0C xor eax, dword ptr [ebp+C]
0078D57D 25 FFFFFF7F and eax, 7FFFFFFF
0078D582 3345 14 xor eax, dword ptr [ebp+14]
0078D585 8945 FC mov dword ptr [ebp-4], eax
0078D588 DD45 F8 fld qword ptr [ebp-8]
0078D58B C9 leave
0078D58C C3 retn
0078D58D 55 push ebp
0078D58E 8BEC mov ebp, esp
0078D590 51 push ecx
0078D591 51 push ecx
0078D592 D9EE fldz
从上面的 call 007A4298 来到这里:
007A4298 55 push ebp
007A4299 8BEC mov ebp, esp
007A429B 83EC 10 sub esp, 10
007A429E A1 70C18E00 mov eax, dword ptr [8EC170]
007A42A3 8365 F8 00 and dword ptr [ebp-8], 0
007A42A7 8365 FC 00 and dword ptr [ebp-4], 0
007A42AB 53 push ebx
007A42AC 57 push edi
007A42AD BF 4EE640BB mov edi, BB40E64E
007A42B2 3BC7 cmp eax, edi
007A42B4 BB 0000FFFF mov ebx, FFFF0000
007A42B9 74 0D je short 007A42C8
007A42BB 85C3 test ebx, eax
007A42BD 74 09 je short 007A42C8
007A42BF F7D0 not eax
007A42C1 A3 74C18E00 mov dword ptr [8EC174], eax
007A42C6 EB 60 jmp short 007A4328
007A42C8 56 push esi
007A42C9 8D45 F8 lea eax, dword ptr [ebp-8]
007A42CC 50 push eax
007A42CD FF15 849D5C01 call dword ptr [15C9D84]
007A42D3 8B75 FC mov esi, dword ptr [ebp-4]
007A42D6 3375 F8 xor esi, dword ptr [ebp-8]
007A42D9 FF15 E89F5C01 call dword ptr [15C9FE8]
007A42DF 33F0 xor esi, eax
007A42E1 FF15 E49F5C01 call dword ptr [15C9FE4]
007A42E7 33F0 xor esi, eax
007A42E9 FF15 509E5C01 call dword ptr [15C9E50]
007A42EF 33F0 xor esi, eax
007A42F1 8D45 F0 lea eax, dword ptr [ebp-10]
007A42F4 50 push eax
007A42F5 FF15 089F5C01 call dword ptr [15C9F08]
007A42FB 8B45 F4 mov eax, dword ptr [ebp-C]
007A42FE 3345 F0 xor eax, dword ptr [ebp-10]
007A4301 33F0 xor esi, eax
007A4303 3BF7 cmp esi, edi
007A4305 75 07 jnz short 007A430E
007A4307 BE 4FE640BB mov esi, BB40E64F
007A430C EB 0B jmp short 007A4319
007A430E 85F3 test ebx, esi
007A4310 75 07 jnz short 007A4319
007A4312 8BC6 mov eax, esi
007A4314 C1E0 10 shl eax, 10
007A4317 0BF0 or esi, eax
007A4319 8935 70C18E00 mov dword ptr [8EC170], esi
007A431F F7D6 not esi
007A4321 8935 74C18E00 mov dword ptr [8EC174], esi
007A4327 5E pop esi
007A4328 5F pop edi
007A4329 5B pop ebx
007A432A C9 leave
007A432B C3 retn <========== 这里返回上面那个Call的地方
007A432C 55 push ebp
007A432D 8BEC mov ebp, esp
007A432F 51 push ecx
007A4330 56 push esi
007A4331 57 push edi
007A4332 BE FFFF0000 mov esi, 0FFFF
007A4337 56 push esi
现在问题就是后面那个是retn ,而不是prefix repne:,教程(http://bbs.chinapyg.com/viewthread.php?tid=30956)上说要用F7单步跟进去,我这情况不知道如何下手了,找不到Stolen codes 希望高人指教。
-------------------------------------------------分隔线---------------------------------------------------
附上打包好的文件(共两个,一个EXE,一个是运行EXE时要调用的DLL)
http://u.115.com/file/t2f9990b7f
--------------------------------------------------后记------------------------------------------------------
我知道论坛不喜欢求脱壳的求破解的,但我只是求助菜鸟的问题而已,结果只有二楼的一位热心兄弟回复,有点不是滋味……
最后,我把壳脱掉了,文件dump出来有18M……没有Stolen codes,没有什么真假OEP,78D55D就是OEP了。再按“小虾”大大的教程(带壳运行)处理一下,修复IAT,就能运行了。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课