打造完美的Poison Ivy 2.10
文章作者:快乐的人
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
题记----一些话
附:全文已发到黑防
这篇文章到底算什么呢?一般的安全类论坛(比如说邪八)好像不怎么讨论破解相关的问题,而专业的破解论坛(一蓑烟雨、看雪)又一直拒绝对木马、病毒的脱壳破解分析、那么我这个破解木马的文章应该算那类呢?
再过几天就是国庆和中秋了,先在这里祝大家有个开心的国庆节和中秋节
图片上传不便,附件中有图文版本的全文
打造完美的Poison Ivy 2.10
Poison Ivy是一款很不错的木马,黑防曾经对他有过介绍,这里就不再多说了,想了解的朋友可以查阅晚期黑防,个人对Poison Ivy的评价是短小精悍,生成的服务端为加壳7K,加壳5K远远比国内一些常用木马小,然而功能一点不少,是一个实用价值很高的木马
最近Poison Ivy推出了最新的2.10版本,增加了功能,加强了稳定性,但是,开始了连接数限制,作者也开始销售商业免杀版本了,一个好的软件走向商业之路未免不是一件好事,但是想以限制免费版本功能来推进商业版本的销售未免有些不厚道啊,我们今天就来解决他,制作以个自己的无限制版本(PS:除了免杀要自己做做之外,完全可以和商业版本媲美了哦)
下面正式开始分析,主程序PI2.1.0.exe 查壳得知ASProtect 2.1x SKE -> Alexey Solodovnikov
详细版本是Version: ASProtect 1.35 build 04.25 or 06.26 Release [Extract],这个壳可是大名鼎鼎,称为加密壳的老大是毫不过分,但是我们不必害怕,因为VolX大侠已经写了一个脚本能够帮助我们完成一大半任务,我们开始吧
一、运行脚本,dump
来到入口,选择不继续分析
注意要先隐藏调试器,如图
:运行VolX大侠脚本Aspr2.XX_IATfixer_v1.02s。
当出现 “import table is fixed....................”的讯息框, 点确定键后,再到 OD 点击 plugin-ODGscript-resume, 就可到 OEP。
然后resume
00ED0501 55 push ebp ; 00051DBA8
00ED0502 E9 380E0000 jmp 00ED133F
00ED0507 33C0 xor eax,eax
00ED0509 E9 820F0000 jmp 00ED1490
00ED050E EB 01 jmp short 00ED0511
00ED0510 6903 44241803 imul eax,dword ptr ds:[ebx],3182444
00ED0516 44 inc esp
00ED0517 24 38 and al,38
00ED0501断在这里,记住后面的注释00051DBA8,减去基址004000000,我们得到0011dba8
使用LORDPE完整转存,保存成dumpd.exe,启动\ImportREC v1.6F Fix,填入OEP 0011dba8,
回到ollydbg ALT +L打开记录窗口
iatstartaddr: 00525208-400000=125208 //RVA
iatsize: 000008A0 //Size
在ImportREC中填入OEP=11dba8,RVA=125208,Size=8A0--->获取输入表,显示2个无效指针。
显示未解决的指针2个,右键--->插件跟踪--->ASPRotect 1.2--->修复这2个无效指针。
修复转储文件,得到dumped_.exe。
二、补区段。
Alt+M,打开内存窗口。
在00AB0000~01120000下所有Priv类型F2断点,为啥在该范围下断?我们先用寻找OEP的脚本运行后,在内存窗口记录下这个程序后面的最高区段,在这里作为参考。
F9多次,直到运行到出现程序界面,Alt+M,打开内存窗口。
发现使用的区段为:
00AB0000-00AC0000
00ED0000-00ED3000
00EE0000-00F10000
00F10000-00F14000
010C0000-010C1000
010E0000-010E1000
010F0000-010F1000
01100000-01101000
01110000-01111000
01120000-01121000
共11个区段,LordPE--->区域转存--->上面的10个区段。
将上面的区段全部加入dumped_.exe,并且逐一修正VM Address
注意每个区段都要减去00400000
完成后如图所示
三、壳自检Route CHECK
syscom大侠说:
当你脱壳之后,B=会发生错误 ERROR 111,所以我们只要,抓出正确的 CALL Route Address,就可以通过CHECK SUM ,也就是
在 [ESP+58]的 STACK 位址。
所以我们使用 MOV EAX,[ESP+58] ,来还原B值+5 后修正B值 Address。
Route CHECK,算是壳的自我检查,它是由 A,B 两数值,作互减运算:
A=GetCurrentThreadID
B=CALL Route Address
运算后 ...
B=B-A
我们开始修改,在新补的区段全部F2下断,三次F9,停在这里时开始修改
00F04BC0 55 push ebp
00F04BC1 8BEC mov ebp,esp
00F04BC3 83C4 F8 add esp,-8
00F04BC6 53 push ebx
00F04BC7 56 push esi
00F04BC8 57 push edi
00F04BC9 8B5D 08 mov ebx,dword ptr ss:[ebp+8]
00F04BCC EB 01 jmp short dumpd1_.00F04BCF
00F04BCF 8B45 18 mov eax,dword ptr ss:[ebp+18]
00F04BD2 83E8 08 sub eax,8
00F04BD5 8B00 mov eax,dword ptr ds:[eax]
00F04BD7 50 push eax
00F04BD8 8A8B 8E000000 mov cl,byte ptr ds:[ebx+8E]
00F04BDE 8B55 14 mov edx,dword ptr ss:[ebp+14]
00F04BE1 8BC3 mov eax,ebx
00F04BE3 E8 B4FFFFFF call dumpd1_.00F04B9C
00F04BE8 8B45 18 mov eax,dword ptr ss:[ebp+18]
00F04BEB 50 push eax
00F04BEC B1 04 mov cl,4
00F04BEE 8B55 14 mov edx,dword ptr ss:[ebp+14]
00F04BF1 8BC3 mov eax,ebx
00F04BF3 E8 A4FFFFFF call dumpd1_.00F04B9C
00F04BF8 EB 01 jmp short dumpd1_.00F04BFB
修改以下语句
mov eax,dword ptr ds:[eax+34] 修改成 nop
call eax 修改成 nop
sub dword ptr ss:[ebp+C],eax 修改成 mov eax,dword ptr ss:[esp+58]
mov eax,dword ptr ss:[ebp+C] 修改成 sub eax,5
二进制:90 90 8B 44 24 58 83 E8 05 90 90
修改后代码:
00F04BFB 8B73 30 mov esi,dword ptr ds:[ebx+30] ; dumpd1_.00ED237A
00F04BFE 8B7B 14 mov edi,dword ptr ds:[ebx+14]
00F04C01 A1 DC67F000 mov eax,dword ptr ds:[F067DC]
00F04C06 90 nop
00F04C07 90 nop
00F04C08 8B4424 58 mov eax,dword ptr ss:[esp+58]
00F04C0C 83E8 05 sub eax,5
00F04C0F 90 nop
00F04C10 90 nop
00F04C11 2B43 18 sub eax,dword ptr ds:[ebx+18]
00F04C14 2B43 68 sub eax,dword ptr ds:[ebx+68]
00F04C17 8945 FC mov dword ptr ss:[ebp-4],eax
00F04C1A 8D43 24 lea eax,dword ptr ds:[ebx+24]
00F04C1D 8945 F8 mov dword ptr ss:[ebp-8],eax
00F04C20 85FF test edi,edi
现在运行一下看看,我们脱壳顺利完成了
四:破除99用户限制
据tonyuo老兄说99用户限制,我们来解决
使用w32dasm搜索cmp ebx,63
我们来到
0040BC72 833D 48375200 1>cmp dword ptr ds:[523748],12
0040BC79 75 3A jnz short dumpd1_.0040BCB5
0040BC7B 83FB 63 cmp ebx,63 就是这里了
0040BC7E 7F 24 jg short dumpd1_.0040BCA4
0040BC80 E8 57F1FFFF call dumpd1_.0040ADDC
0040BC85 0FB7C8 movzx ecx,ax
瞧:与63(十六进制的99)比较,jg大于就跳走了
我们把这里NOP掉
OK,限制解除
五;暗桩修复
本来我以为每什么问题了,发给朋友门测试,8way老兄是有问题,测试存在此问题,没想到作者还留下了暗桩,脱壳版本在点击上线肉鸡进行控制时会发生内存读取异常
解决办法:启动Poison Ivy,生成个服务端,在虚拟机中运行,上线后,使用ollydbg附加
然后点击上线肉鸡,ollydbg自动捕获异常,回溯堆栈,找出跳转
最终把偏移2770处的75改成EB,再次测试,完全通过
很多人认为crack很难,其实并不是这样,只要有了正确的思路,就能够最快的做你想做的事情,经过破解了的Poison Ivy2。10已经由8way老兄汉化了,汉化完成的版本已经放到光盘里了,有兴趣的朋友可以去看看,顺便写个汉化版本出处
http://www.msmm.cn/read.php?tid=1238 最后感谢一下8way和tunyup两位老兄的帮助
快乐的人
2006-9-27 9:58:35 AM
姓名:Chinadu
近期评论