【脱文标题】 Obsidium V1.2 加壳的记事本脱壳
【脱文作者】 yeyu0808
【使用工具】 flyOD,Lordpe,PEID,ImportREC1.42
【破解平台】 WinXp
【软件名称】 notepad 【加壳方式】 Obsidium V1.2
【脱壳目的】 我是一只大菜鸟,只是为了学习技术而脱壳~!
【脱壳内容】 Obs1.2版的壳也出来这么久了,一直没人愿意放出脱壳方法,我在这里献丑了。这次OBS的
升级没有什么太大的变化,加壳的程序跟1.1版的脱壳方法相似,还是第4次除零异常后处理IAT,连代码
都没有太大的变化,找OEP跟1.1版基本上是一模一样,只是在IAT加密的时候,检测内存访问断点,断不
到1.1版直接加密IAT的地方,这就为找特殊函数设了一点障碍,靠你自己去研究了~!
用Obsidium V1.2版加壳的记事本,难度就大降低了,我是菜鸟,太难的搞不定,只能脱个记事本~!
一、寻找OEP、Dump进程
老规矩:用IsDebug 1.4插件去掉Ollydbg的调试器标志。忽略除了“整数被除零”之外的所有其他异常选 项,同时还要用上UnhandledExceptionFilter2.20,F9后出现一个内存异常,不管它,直接Shift+F9。
00407000 > /EB 02 jmp short NOTEPAD.00407004 载入后停在这 003A120F F7F0 div eax 1次 003A42E5 F7F0 div eax 2次 003A4413 F7F0 div eax 3次 003A42E5 F7F0 div eax 4次,处理IAT的地方 003A2C8E F7F0 div eax 5次 003A30B9 F7F0 div eax 6次 003A2C8E F7F0 div eax 7次 003A30B9 F7F0 div eax 8次 0040891C F7F0 div eax 9次 跳OEP的地方
OK,当第5次003A2C8E异常时,Ctrl+G:003A2C8E (第4次异常地址)
到达 003A2C8E 时 Ctrl+F 搜索命令:test word ptr ds:[esi],20
003A49BF 66:F706 2000 test word ptr ds:[esi],20//找到这里
记下这个:003A64F0 地址,IAT的解密还要靠它。
9次时的堆栈: 0012FF4C 0012FFE0 指针到下一个 SEH 记录 0012FF50 00408951 SE 句柄
去00408951下断吧: 00408951 C8 000000 enter 0,0 00408955 EB 03 jmp short NOTEPAD.0040895A
Ctrl+F 在当前位置下搜索命令:mov dword ptr ds:[eax+0B8],edx 在004089DF处: 查找CONTEXT结构,中间会返回到系统中去。
004089DF 8990 B8000000 mov dword ptr ds:[eax+B8],edx ;
NOTEPAD.00408C77 004089E5 EB 02 jmp short NOTEPAD.004089E9
此时edx=00408C77,去00408C77下断,F9断下来:
00408C77 E8 BB000000 call NOTEPAD.00408D37 //加密CALL,跟进去吧
00408D37 F8 clc 00408D38 73 01 jnb short NOTEPAD.00408D3B 00408D3A 59 pop ecx 00408D3B 60 pushad 00408D3C EB 02 jmp short NOTEPAD.00408D40 00408D3E FC cld 00408D3F D6 salc 00408D40 836C24 20 05 sub dword ptr ss:[esp+20],5 00408D45 EB 03 jmp short NOTEPAD.00408D4A 00408D47 CF iretd 00408D48 D4 1B aam 1B 00408D4A 8B4424 20 mov eax,dword ptr ss:[esp+20] 00408D4E C600 CD mov byte ptr ds:[eax],0CD 00408D51 C740 01 023B1DCD mov dword ptr ds:[eax+1],CD1D3B02 00408D58 EB 01 jmp short NOTEPAD.00408D5B 00408D5A 65:B9 C0000000 mov ecx,0C0 00408D60 F9 stc 00408D61 72 03 jb short NOTEPAD.00408D66 00408D63 9E sahf 00408D64 8480 BECD3A19 test byte ptr ds:[eax+193ACDBE],al 00408D6A 66:8000 1E add byte ptr ds:[eax],1E 00408D6E EB 02 jmp short NOTEPAD.00408D72 00408D70 0108 add dword ptr ds:[eax],ecx 00408D72 83C0 04 add eax,4 00408D75 F9 stc 00408D76 72 02 jb short NOTEPAD.00408D7A 00408D78 2E:4B dec ebx 00408D7A C1CE D8 ror esi,0D8 00408D7D EB 02 jmp short NOTEPAD.00408D81 00408D7F 1950 83 sbb dword ptr ds:[eax-7D],edx 00408D82 - E9 040F85E1 jmp E1C59C8B 00408D87 FFFF ??? ; 未知命令 00408D89 FFEB jmp far ebx ; 非法使用寄
存器 00408D8B 04 F0 add al,0F0 00408D8D 9C pushfd 00408D8E 8CD3 mov bx,ss 00408D90 61 popad 00408D91 C3 retn
F7走过上面的部分: 00408C77 /EB 02 jmp short NOTEPAD.00408C7B
再次来到00408C77处时,Ctrl+F 在 当前位置下 搜索命令: jmp edi 在00408D15处,当然是F2再下断了
,F9会断在那里的
00408D15 FFE7 jmp edi
跟进后,一直F7: 003A84FC - E9 D28B5600 jmp 009110D3 这里去伪OEP 003A8501 EB 02 jmp short 003A8505
009110D3 FF15 E4639100 call dword ptr ds:[9163E4] 009110D9 8BF0 mov esi,eax 009110DB 8A00 mov al,byte ptr ds:[eax]
补上Stolen Code,脱其他Obsidium壳程序可以根据程序运行代码、伪OEP处的堆栈和寄存器等情况,还原
OEP处代码。
009110CC 55 push ebp 009110CD 8BEC mov ebp,esp 009110CF 83EC 44 sub esp,44 009110D2 56 push esi 009110D3 FF15 E4639100 call dword ptr ds:[9163E4]
LordPE先完全Dump这个进程,然后“区域脱壳”,地址=00910000,大小=00008000,得到 Region00910000-00918000.dmp文件。用LordPE打开dumped.exe,从磁盘载入Region00910000-
00918000.dmp区段,改其VOffset=00510000。只保留LordPE的“验证PE”选项,对dumped.exe重建PE。OK
,Dump完毕!
1 2 下一页 |