在国外的一个很好的网站上找到一款可以给任何exe文件加密码的小软件,界面清爽,功能强大,就下载来玩玩,没想到这还是一次坎坷但意味深长的经历呢o(∩_∩)o...
PEID查壳显示是UPX,顿时觉得没挑战性,用peid插件脱,未果;用OD手动载入脱,失败有点意思,把这个过程分享一下,算是给大家扩展下思路吧。
新手练手,牛牛飘过
OD载入代码如下:
代码:
00468D90 > 60 pushad 00468D91 BE 00204400 mov esi, 00442000 00468D96 8DBE 00F0FBFF lea edi, dword ptr [esi+FFFBF000] 00468D9C C787 D0D40400 B>mov dword ptr [edi+4D4D0], 1487B1B8 00468DA6 57 push edi 00468DA7 83CD FF or ebp, FFFFFFFF 00468DAA EB 0E jmp short 00468DBA 00468DAC 90 nop
代码:
00468F36 8D4424 80 lea eax, dword ptr [esp-80] ****停在这里 00468F3A 6A 00 push 0 00468F3C 39C4 cmp esp, eax 00468F3E ^ 75 FA jnz short 00468F3A 00468F40 83EC 80 sub esp, -80 00468F43 ^ E9 2437FEFF jmp 0044C66C 00468F48 60 pushad 00468F49 8F46 00 pop dword ptr [esi] 00468F4C ^ 70 8F jo short 00468EDD 00468F4E 46 inc esi 00468F4F 00D0 add al, dl 00468F51 E4 44 in al, 44
代码:
0044C66C 55 push ebp 0044C66D 8BEC mov ebp, esp 0044C66F 83C4 F4 add esp, -0C 0044C672 B8 DCC44400 mov eax, 0044C4DC 0044C677 E8 5097FBFF call 00405DCC 0044C67C E8 0B80FFFF call 0044468C 0044C681 84C0 test al, al 0044C683 75 09 jnz short 0044C68E 0044C685 E8 7A81FFFF call 00444804 0044C68A 84C0 test al, al 0044C68C 74 19 je short 0044C6A7 0044C68E 6A 40 push 40 0044C690 68 18C74400 push 0044C718 ; ASCII "Debugger detected" 0044C695 68 2CC74400 push 0044C72C ; ASCII "No debuggers,please." 0044C69A E8 619DFBFF call 00406400 ; jmp 到 USER32.GetDesktopWindow 0044C69F 50 push eax 0044C6A0 E8 139FFBFF call 004065B8 ; jmp 到 USER32.MessageBoxA 0044C6A5 EB 6A jmp short 0044C711
用OD加载脱壳修复后的程序先修改一下0044C68C位jmp,因为程序会检测调试器的。
试运行,显示Application Error,究竟怎么回事?尝试OD不忽略内存访问异常,看能不能断下来,未果;那下bp MessageBoxA断点,未果百思不得其解!
灵机一动,OD载入,ctrl+F8让OD自动单步步进,出现错误提示,好
代码:
7C92EAF0 8B1C24 mov ebx, dword ptr [esp] 7C92EAF3 51 push ecx 7C92EAF4 53 push ebx 7C92EAF5 E8 C78C0200 call 7C9577C1 7C92EAFA 0AC0 or al, al 7C92EAFC 74 0C je short 7C92EB0A
代码:
0044C6D7 . E8 7045FFFF call 00440C4C 0044C6DC . E8 F385FFFF call 00444CD4 0044C6E1 . 3D E0930400 cmp eax, 493E0 0044C6E6 . 7E 05 jle short 0044C6ED 0044C6E8 . E8 B386FFFF call 00444DA0 ******停在了这里 0044C6ED > 8B0D 10DE4400 mov ecx, dword ptr [44DE10] 0044C6F3 . A1 34DD4400 mov eax, dword ptr [44DD34]
开心了cmp eax, 493E0看起来多熟悉,自校验,下面的jle改成jmp保存程序,一切正常,收工!
1.常规手动脱壳
2.修改0044C68C处的跳转跳过调试器检测
3.修改0044C6E6跳转跳过自校验,搞定