吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14032|回复: 37
收起左侧

[原创] 来个PolyBox的壳样(脱文已发)

[复制链接]
ximo 发表于 2008-7-21 12:05
先放个壳样上来,[s:40][s:40]
脱文已经发在了1楼,有兴趣的看看,(已经更改一个小小的错误)
学习后,请继续举一反三学会应用!

我再放一个类似的壳上来,大家再去练习一下吧!

注:和1楼放的练习壳不一样:
我在这放的练习都是双进程的(其实也不该叫双进程,算是个子母进程吧)
1楼放的样本是试验PETools的
[s:39][s:39]

PolyBox_1.0.rar

198 KB, 下载次数: 49, 下载积分: 吾爱币 -1 CB

UnPackMe_unkOwn_Crypter_1.0.rar

323 KB, 下载次数: 17, 下载积分: 吾爱币 -1 CB

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| ximo 发表于 2008-7-21 12:05
占楼,帖脱文 [s:41][s:41]

可以用2种方法来进行处理,其中方法一是参考国外的教程,我只是加以整理和加了自己的理解!版权问题还是说明的好!呵呵

方法一:
1、OD载入后
00400154 >8725 60EB4000 xchg dword ptr ds:[40EB60],esp //停在这里
0040015A61popad
0040015B94xchg eax,esp
0040015C55push ebp
0040015DA4movs byte ptr es:[edi],byte ptr ds:[esi]
0040015EB6 80 mov dh,80
00400160FF13call dword ptr ds:[ebx]
00400162^ 73 F9 jnb short PolyBox_.0040015D
0040016433C9xor ecx,ecx
00400166FF13call dword ptr ds:[ebx]
0040016873 16 jnb short PolyBox_.00400180
0040016A33C0xor eax,eax
0040016CFF13call dword ptr ds:[ebx]
0040016E73 1F jnb short PolyBox_.0040018F

看入口,很象FSG的壳,于是,我们首先尝试一下用FSG的方法来进行脱壳!

由于脱FSG不是重点,因此,我用最简单的,最快速的方法加以脱壳。

OD载入后,F82次,看堆栈窗口:
0040EB64 004001E8PolyBox_.004001E8
0040EB68 004001DCPolyBox_.004001DC
0040EB6C 004001DEPolyBox_.004001DE
0040EB70 00402F18PolyBox_.00402F18 //在这里
0040EB74 > 7C883F9Ckernel32.LoadLibraryA
0040EB78 > 7C883FECkernel32.GetProcAddress
0040EB7C 00000000

然后在第四行,右键,在反汇编窗口跟随
00402F180000add byte ptr ds:[eax],al //来到这里
00402F1A0000add byte ptr ds:[eax],al
00402F1C0000add byte ptr ds:[eax],al
00402F1E0000add byte ptr ds:[eax],al
00402F200000add byte ptr ds:[eax],al
00402F220000add byte ptr ds:[eax],al
00402F240000add byte ptr ds:[eax],al
00402F260000add byte ptr ds:[eax],al
00402F280000add byte ptr ds:[eax],al

然后,下硬件执行断点,F9运行

00402F1855push ebp ; ntdll.7C920000
00402F198BECmov ebp,esp
00402F1B83C4 F0 add esp,-10
00402F1EB8 C02E4000 mov eax,PolyBox_.00402EC0
00402F23E8 D0EDFFFF call PolyBox_.00401CF8
00402F28E8 83FDFFFF call PolyBox_.00402CB0
00402F2DE8 56E6FFFF call PolyBox_.00401588
00402F328BC0mov eax,eax
00402F340000add byte ptr ds:[eax],al

到这后,很多人会以为是OEP了

OK,我们来脱壳。脱壳修复后发现,程序无法运行。PEiD也误报为Borland Delphi 5.0 KOL

到此,很多人可能会以为是IAT的问题,于是,手动查找IAT后,发现程序依然没法运行,很明显,这是个伪装成FSG的壳,但其实是PolyBox的壳。

下面,正式进入脱壳过程。

首先来寻找OEP

重新用OD载入加壳程序,忽略所有的异常,然后F9运行,发现,程序正常运行起来,但是,OD的左上角提示:程序终止!

这个时候,我们就可以脱壳了,使用工具是PETools。

不过,我们发现有2个进程(汗,原来这个壳会产生一个临时进程,下面还得处理这个,麻烦!)

不过大家很容易发现,上面那个是原来的进程,下面那个是新产生的进程。于是,我们对下面那个进程进程dump!用PETools完整转存出来吧!

大家别兴奋的太早,这时候,dump出来的程序依然无法运行的!没关系,我们要的只是OEP,程序无法运行也无所谓!呵呵!

用OD载入dump出来的程序。

004271B0 > $55push ebp//真正的OEP!
004271B1 .8BECmov ebp,esp
004271B3 .6A FF push -1
004271B5 .68 600E4500 push Dumped.00450E60
004271BA .68 C8924200 push Dumped.004292C8 ;SE 句柄安装
004271BF .64:A1 0000000>mov eax,dword ptr fs:[0]
004271C5 .50push eax
004271C6 .64:8925 00000>mov dword ptr fs:[0],esp
004271CD .83C4 A8 add esp,-58
004271D0 .53push ebx
004271D1 .56push esi
004271D2 .57push edi
004271D3 .8965 E8 mov dword ptr ss:[ebp-18],esp
004271D6 .FF15 DC0A4600 call dword ptr ds:[<&KERNEL32.GetVersion>;kernel32.GetVersion


哈,真正的OEP找到了!也很明显可以判断出来,是个VC++程序。
其实,经常在tuts4you网站进行脱壳练习的朋友应该早知道,他们脱壳练习的原程序,一般都是C++的。

好,记下真正的OEP地址吧:004271B0
并记下OEP的头2字节为:55 8B

OK, dump出来的程序已经没有什么利用价值了,删除吧!

重新载入加壳的程序

下断点:bp ResumeThread,F9

7C83284F >8BFFmov edi,edi //停在这里。然后单步往下走
7C83285155push ebp
7C8328528BECmov ebp,esp
7C8328548D45 08 lea eax,dword ptr ss:[ebp+8]
7C83285750push eax
7C832858FF75 08 push dword ptr ss:[ebp+8]
7C83285BFF15 3814807C call dword ptr ds:[<&ntdll.NtResumeThrea>; ntdll.ZwResumeThread
//走到这里的时候,就得处理了!
7C83286185C0test eax,eax
7C8328630F8C 311F0100 jl kernel32.7C84479A
7C8328698B45 08 mov eax,dword ptr ss:[ebp+8]
7C83286C5Dpop ebp
7C83286DC2 0400 retn 4
7C832870F645 21 04test byte ptr ss:[ebp+21],4

走到上面标记的地方,打开我们的新工具pupe(这工具其实我也用的不多,只在处理以前处理ARM壳的时候用到过,想不到今天又用到了他,荣幸哈~)

打开pupe后,选择上面的那个进程,然后右键,选择Parchear
把NO de bytes 处选择为2,Introducir la direcction处填入OEP的地址:004271B0
接着点Buscar
接着在Cambiar por:处填所要替换的OEP字节:EB FE
然后点Parchear
处理完后,如图所示
1.JPG
接着就关闭pupe吧!

接着F9运行,OD显示终止进程.
然后,在OD里,选择附加进程,把新的那个进程附加进去(注意,颜色突出的那个是现在正在进行的进程,我们选的不是这个哦!)

注意:附加后会提示一个错误,那是正常的,点确定就行

附加后,ALT+F9返回
修改头2个字节为55 8B

OK,下面再来用PETools脱壳吧。

瞧,现在只有1个进程了吧。完整转存出来就OK了。
程序能正常运行了吧!哈


方法二:

OD载入后,忽略所有异常,
下断点:bp WriteProcessMemory,F9运行
中断后,ALT+F9返回
0040201B .85C0test eax,eax//返回到这里
0040201D .75 0A jnz short PolyBox_.00402029
0040201F .E8 3CF4FFFF call PolyBox_.00401460
00402024 .E9 FF000000 jmp PolyBox_.00402128
00402029 >8B45 E4 mov eax,dword ptr ss:[ebp-1C]
0040202C .E8 7FFEFFFF call PolyBox_.00401EB0
00402031 .8BF0mov esi,eax
00402033 .8B45 E4 mov eax,dword ptr ss:[ebp-1C]
00402036 .0FB740 06 movzx eax,word ptr ds:[eax+6]
0040203A .48dec eax
0040203B .85C0test eax,eax
0040203D .72 59 jb short PolyBox_.00402098
0040203F .40inc eax
00402040 .8945 D8 mov dword ptr ss:[ebp-28],eax

下面,我们就一直F8走吧:
004020AC .8B45 C8 mov eax,dword ptr ss:[ebp-38]; |
004020AF .50push eax ; |hProcess
004020B0 .E8 ABFDFFFF call PolyBox_.00401E60 ; \WriteProcessMemory
004020B5 .85C0test eax,eax
004020B7 .74 28 je short PolyBox_.004020E1
004020B9 .8B45 E4 mov eax,dword ptr ss:[ebp-1C]
004020BC .8B40 28 mov eax,dword ptr ds:[eax+28]
004020BF .0345 EC add eax,dword ptr ss:[ebp-14]
004020C2 .8985 68FFFFFF mov dword ptr ss:[ebp-98],eax;//注意一下这里,这里的eax的值就是OEP的值,记录下来吧!
004020C8 .8D85 B8FEFFFF lea eax,dword ptr ss:[ebp-148]
004020CE .50push eax ; /pContext
004020CF .8B45 CC mov eax,dword ptr ss:[ebp-34]; |
004020D2 .50push eax ; |hThread
004020D3 .E8 58FDFFFF call PolyBox_.00401E30 ; \SetThreadContext
004020D8 .83F8 01 cmp eax,1
004020DB .1BC0sbb eax,eax
004020DD .40inc eax
004020DE .8845 F2 mov byte ptr ss:[ebp-E],al
004020E1 >33C0xor eax,eax
004020E3 .5Apop edx
004020E4 .59pop ecx
004020E5 .59pop ecx
004020E6 .64:8910 mov dword ptr fs:[eax],edx
004020E9 .68 28214000 push PolyBox_.00402128
004020EE >807D F2 00cmp byte ptr ss:[ebp-E],0
004020F2 .75 0D jnz short PolyBox_.00402101
004020F4 .6A 00 push 0 ; /ExitCode = 0
004020F6 .8B45 C8 mov eax,dword ptr ss:[ebp-38]; |
004020F9 .50push eax ; |hProcess
004020FA .E8 39FDFFFF call PolyBox_.00401E38 ; \TerminateProcess
004020FF .EB 0D jmp short PolyBox_.0040210E
00402101 >8B45 CC mov eax,dword ptr ss:[ebp-34]
00402104 .50push eax ; /hThread
00402105 .E8 16FDFFFF call PolyBox_.00401E20 ; \ResumeThread//注意下这个函数,直接在这F4吧!
0040210A .C645 F3 00mov byte ptr ss:[ebp-D],0
0040210E >8B45 C8 mov eax,dword ptr ss:[ebp-38]
00402111 .50push eax ; /hObject
00402112 .E8 A1FCFFFF call PolyBox_.00401DB8 ; \CloseHandle
00402117 .8B45 CC mov eax,dword ptr ss:[ebp-34]

OK,下面的处理就和方法一一样啦!




总结一下:PETools真是一个好工具哈~有些壳用它来处理就非常方便了!

我附件里在放几个要PETools处理的壳样本,大家练习下吧!

Have Fun!

作者徐超,转载著名出处!谢谢!

附件中包括完整的脱文,脱壳后的文件,所需要的工具,以及让大家练习的壳的样本!
由于家有壳,所以有的杀毒软件会报毒,请大家放心下载吧!

PolyBox.part1.rar

1.43 MB, 下载次数: 28, 下载积分: 吾爱币 -1 CB

PolyBox.part2.rar

929 KB, 下载次数: 25, 下载积分: 吾爱币 -1 CB

石头学破解 发表于 2008-7-21 12:12
天蓝色 发表于 2008-7-21 12:16
Hmily 发表于 2008-7-21 12:18
女王写的壳袄?外面怎么那么像FSG?俺不会脱,等待超人大牛的教程~
石头学破解 发表于 2008-7-21 12:19
FSG我还是会手脱的,楼主这个就没脱过。
石头学破解 发表于 2008-7-21 13:14
FSG 2.0 -> bart/xt我的显这个 FSG的变形吗?
00402F1855PUSH EBP ; ntdll.7C920000 // oep?
Borland Delphi 5.0 KOL 查下出来这个
wgz001 发表于 2008-7-21 13:31
等待大牛的教程

学习下了

[s:40]
石头学破解 发表于 2008-7-21 13:33
不搞了,还是等楼主的教程吧。
mojingtai 发表于 2008-7-21 13:44
听课,学习学习 [s:39]
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-18 01:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表