好友
阅读权限40
听众
最后登录1970-1-1
|
小生我怕怕
发表于 2009-6-21 14:05
就难度来说一般,但是绝对适合练手~
小Z发出分析啦,我就公开啦~
00405000 > 52 push edx //OD载入
00405001 35 00000000 xor eax,0 //ait+m打开内存镜象
00405006 5A pop edx
00405007 55 push ebp
00405008 BD 48829B64 mov ebp,649B8248
0040500D 5D pop ebp
━━━━━━━━━━━━━━━━━━━━━━━━━━
Memory map, 条目 23 //00401000处F2下断,shift+f9运行程序
地址=00401000
大小=00001000 (4096.)
属主=USSR_0_3 00400000
区段=
包含=代码,数据
类型=Imag 01001002
访问=R
初始访问=RWE
━━━━━━━━━━━━━━━━━━━━━━━━━━
00405CEC 3006 xor byte ptr ds:[esi],al //停在了这里,这里向下是死循环,不信的可以自己单步跟
00405CEE 8A06 mov al,byte ptr ds:[esi]
00405CF0 46 inc esi
00405CF1 81FE FF104000 cmp esi,USSR_0_3.004010FF
00405CF7 ^ 7C F3 jl short USSR_0_3.00405CEC
00405CF9 68 FF242400 push 2424FF
00405CFE E8 00000000 call USSR_0_3.00405D03
00405D03 830424 0B add dword ptr ss:[esp],0B
00405D07 89E3 mov ebx,esp
00405D09 83C3 04 add ebx,4
00405D0C FFE3 jmp ebx //从这里进去开始进入死循环
00405D0E 5B pop ebx //在这里F2下段。shift+f9运行
00405D0F 5B pop ebx //停下后继续F8单步
00405D10 68 00104000 push USSR_0_3.00401000 //这里是把OEP压入,其实不知道OEP也会选择这里
00405D15 64:FF35 0000000>push dword ptr fs:[0]
00405D1C 64:8925 0000000>mov dword ptr fs:[0],esp
00405D23 CD 03 int 3 //把这个int3给NOP掉
00405D25 8B4424 0C mov eax,dword ptr ss:[esp+C] //走到这里我们注意堆栈窗口的SE句柄,毫无疑问右键反汇编窗口中跟随
00405D29 C740 18 0000000>mov dword ptr ds:[eax+18],0 //或者直接Ctrl+g输入00401000,然后F2下段,shift+f9运行程序
00405D30 33C0 xor eax,eax
00405D32 C3 retn
━━━━━━━━━━━━━━━━━━━━━━━━━━
0012FBF4 0012FC9C 指向下一个 SEH 记录的指针
0012FBF8 00401000 SE处理程序 //这里就是SE句柄
0012FBFC 0012FFB8
0012FC00 /0012FCB0
━━━━━━━━━━━━━━━━━━━━━━━━━━
00401000 6A 00 push 0 //毫无疑问这里就是OEP啦
00401002 E8 C50A0000 call <jmp.&KERNEL32.GetModuleHandleA> //这里dump时我们不能用loadpe,我们直接打开我们的importRCE
00401007 A3 0C354000 mov dword ptr ds:[40350C],eax //填上我们的oep:00401000,自动查找IAT,然后获取输入表
0040100C E8 B50A0000 call <jmp.&KERNEL32.GetCommandLineA> //此时我们右键高级命令,选择代码块,完整转存,在修复一下我们转存的文件
00401011 A3 10354000 mov dword ptr ds:[403510],eax //脱壳结束
00401016 6A 0A push 0A |
|