| 动画介绍:首先查壳FSG 1.33 -> dulek/xt
先给大家讲一下调试的异常设置方法吧,首先忽略所有异常,F9试运行一下,遇到异常,好我们现在试下不忽略内存异常(这是一个自己尝试的过程目的就是是要找到好多调试设置!),再试运行,OK,程序运行。。要的就是他
OD载入,我事先日、载入好了。 方法一:单步法(忽略所有异常)
004103E3 f> BE A4014000 mov esi,fsg_1_33.004001A4 //停在这里了,继续F8单步 004103E8 AD lods dword ptr ds:[esi] 004103E9 93 xchg eax,ebx 004103EA AD lods dword ptr ds:[esi] 004103EB 97 xchg eax,edi 004103EC AD lods dword ptr ds:[esi] 004103ED 56 push esi 004103EE 96 xchg eax,esi 004103EF B2 80 mov dl,80 004103F1 A4 movs byte ptr es:[edi],by> 004103F2 B6 80 mov dh,80 004103F4 FF13 call dword ptr ds:[ebx] //F7进入 。。。。。。。。 0041049E 02D2 add dl,dl //到这里啦,继续单步 004104A0 75 05 jnz short fsg_1_33.004104> 004104A2 8A16 mov dl,byte ptr ds:[esi] 004104A4 46 inc esi 004104A5 12D2 adc dl,dl 004104A7 C3 retn //返回 。。。。。。。。 004103F6 ^\73 F9 jnb short fsg_1_33.004103> //到这里了 004103F8 33C9 xor ecx,ecx 004103FA FF13 call dword ptr ds:[ebx] 004103FC 73 16 jnb short fsg_1_33.004104> 004103FE 33C0 xor eax,eax 00410400 FF13 call dword ptr ds:[ebx] 00410402 73 1F jnb short fsg_1_33.004104> 。。。。。。。。。。。。。。。 中间是我就不写了,单步F8或者是遇到往回跳的时候F4下来就可以啦 。。。。。。。。。。。。。。。 下面要注意的!!!!!!!!! 0041046C AD lods dword ptr ds:[esi] 0041046D 97 xchg eax,edi 0041046E 56 push esi 0041046F FF13 call dword ptr ds:[ebx] //一般来说这里应该是F7进入的,但是,一进去了就难出来了,在这里我们仍然是F8过,来到了系统领空! 00410471 95 xchg eax,ebp 00410472 AC lods byte ptr ds:[esi] 00410473 84C0 test al,al 。。。。。。。。。。。。。。。 77F75DB0 8B1C24 mov ebx,dword ptr ss:[esp> //来到这里,提示有异常 77F75DB3 51 push ecx 77F75DB4 53 push ebx 77F75DB5 E8 BC1A0200 call ntdll.77F97876 77F75DBA 0AC0 or al,al 77F75DBC 74 0C je short ntdll.77F75DCA 我们就按下shift+F9 00410471 95 xchg eax,ebp //到这里了,单步 00410472 AC lods byte ptr ds:[esi] 00410473 84C0 test al,al 00410475 ^ 75 FB jnz short fsg_1_33.004104> //要往回跳 00410477 FE0E dec byte ptr ds:[esi] //F4,继续F8 00410479 ^ 74 F0 je short fsg_1_33.0041046> 0041047B 79 05 jns short fsg_1_33.004104> 0041047D 46 inc esi 0041047E AD lods dword ptr ds:[esi] 0041047F 50 push eax 00410480 EB 09 jmp short fsg_1_33.004104> 00410482 FE0E dec byte ptr ds:[esi] 00410484 - 0F84 420CFFFF je fsg_1_33.004010CC //这里我们enter下去,就到了程序的OEP了,F2下断,F9运行到这里,F2取消下断 004010CC 55 db 55 ; CHAR ’U’ //OEP,右键“分析”--“从模块中删除分析”,再dump出来就可以啦 004010CD 8B db 8B 004010CE EC db EC 004010CF 83 db 83 大家在这里可以看到EP区段没有写什么。。。其实是没关系的,,,是加壳的缘故。 做一下减肥优化吧
方法二:内存镜像法(忽略所有异常) ALT+M,打开内存镜像,找到.rsrc,F2下断,F9运行。 再次 ALT+M,打开内存镜像,找到code段。F2下断,shift+F9运行。 00410472 AC lods byte ptr ds:[esi] //停在这里了 00410473 84C0 test al,al 00410475 ^ 75 FB jnz short fsg_1_33.004104> //要往回跳了 00410477 FE0E dec byte ptr ds:[esi] //F4 00410479 ^ 74 F0 je short fsg_1_33.0041046> 0041047B 79 05 jns short fsg_1_33.004104> 0041047D 46 inc esi 0041047E AD lods dword ptr ds:[esi] 0041047F 50 push eax 00410480 EB 09 jmp short fsg_1_33.004104> 00410482 FE0E dec byte ptr ds:[esi] 00410484 - 0F84 420CFFFF je fsg_1_33.004010CC //按下enter(这个一个没有实现的大跳转!) 。。。。。。。。。。。。。。。。。。。。。。 004010CC 55 db 55 ; CHAR ’U’ //F2下断,F9运行,F2取消断点,右键“分析”--“从模块中删除分析” 004010CD 8B db 8B 004010CE EC db EC 004010CF 83 db 83 。。。。。。。。 004010CC 55 push ebp ; ADVAPI32.77DA0000 //在这里dump就可以啦 004010CD 8BEC mov ebp,esp 004010CF 83EC 44 sub esp,44 004010D2 56 push esi 004010D3 FF15 E0634000 call dword ptr ds:[4063E0>; kernel32.GetCommandLineA
方法三:ESP定律(忽略所有异常) 004103E3 f> BE A4014000 mov esi,fsg_1_33.004001A4 004103E8 AD lods dword ptr ds:[esi] 004103E9 93 xchg eax,ebx 004103EA AD lods dword ptr ds:[esi] 004103EB 97 xchg eax,edi 004103EC AD lods dword ptr ds:[esi] 004103ED 56 push esi 004103EE 96 xchg eax,esi ;fsg_1_33.004001B0 //ESP突现0012FFC0 004103EF B2 80 mov dl,80 下命令行,hr 0012FFC0,回车,F9运行。取消硬件断点。 0041045A AD lods dword ptr ds:[esi] //到这里了,继续F8 0041045B 48 dec eax 0041045C 74 0A je short fsg_1_33.0041046> 0041045E 79 02 jns short fsg_1_33.004104> 00410460 AD lods dword ptr ds:[esi] 00410461 50 push eax 00410462 56 push esi 00410463 8BF2 mov esi,edx 00410465 97 xchg eax,edi 00410466 ^ EB 87 jmp short fsg_1_33.004103> 00410468 AD lods dword ptr ds:[esi] //F4 00410469 93 xchg eax,ebx 0041046A 5E pop esi 0041046B 46 inc esi 0041046C AD lods dword ptr ds:[esi] 0041046D 97 xchg eax,edi 0041046E 56 push esi 0041046F FF13 call dword ptr ds:[ebx] //一般来说这里应该是F7进入的,但是,一进去了就难出来了,在这里我们仍然是F8过,来到了系统领空! 。。。。。。。。。。。。 77F69ECD FF40 10 inc dword ptr ds:[eax+10] //到了这里,提示异常,要shift+F9才能够过去 77F69ED0 8B45 FC mov eax,dword ptr ss:[ebp> 77F69ED3 83E0 01 and eax,1 我们shift+F9 00410471 95 xchg eax,ebp //到了这里 00410472 AC lods byte ptr ds:[esi] 00410473 84C0 test al,al 00410475 ^ 75 FB jnz short fsg_1_33.004104> 00410477 FE0E dec byte ptr ds:[esi] 其他的和方法一一样啦,自己慢慢研究下。
方法四:模拟跟踪法(不忽略内存异常)[首先忽略所有异常,F9试运行一下,遇到异常,好我们现在试下不忽略内存异常,(这是一个自己尝试的过程目的就是是要找到好多调试设置!),再试运行,OK,程序运行了。。要的就是他,模拟跟踪法是需要在没有异常的情况下才能够完全运用的] ALT+M,打开内存镜像, 内存镜像,项目 15 地址=0040C000 大小=00005000 (20480.) Owner=fsg_1_33 00400000 区段= 包含=SFX,imports,resources 类型=Imag 01001002 访问=R 初始访问=RWE
下命令行tc eip<0040c000,enter。正在跟踪之中。。。。有时候需要点时间等~ OK,完成了 004010CC 55 db 55 ; CHAR ’U’ //直接就停在了OEP 004010CD 8B db 8B 004010CE EC db EC 004010CF 83 db 83 004010D0 EC db EC 右键“分析”--“从模块中删除分析”,其他和法3一样啦。呵呵~是不是很简单~~
好了~今天的动画就到这里了~~我要实习去了~拜拜~ |