首页
社区
课程
招聘
[原创]打造完美的Poison Ivy 2.10
发表于: 2006-9-29 09:25 6667

[原创]打造完美的Poison Ivy 2.10

zhuwg 活跃值
11
2006-9-29 09:25
6667
题记----一些话
附:全文已发到黑防
这篇文章到底算什么呢?一般的安全类论坛(比如说邪八)好像不怎么讨论破解相关的问题,而专业的破解论坛(一蓑烟雨、看雪)又一直拒绝对木马、病毒的脱壳破解分析、那么我这个破解木马的文章应该算那类呢?

再过几天就是国庆和中秋了,先在这里祝大家有个开心的国庆节和中秋节

图片上传不便,附件中有图文版本的全文
工具我就不敢发上来了,等下被安个 传播木马病毒 得罪名就麻烦了
工具在EST有下,当然文中link也有

                                打造完美的Poison Ivy 2.10
在文章之前,先感谢一切在论坛中研究过ASPr得老兄,谢谢你们得教导
特别感谢VOLX大侠得脚本 machenglin大侠得  菜鸟脱ASPR从这个软件开始学习 系列文章 syscom大侠得补区段教程

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

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 211
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
最初由 zhuwg 发布
二、补区段。

Alt+M,打开内存窗口。
在00AB0000~01120000下所有Priv类型F2断点,为啥在该范围下断?我们先用寻找OEP的脚本运行后,在内存窗口记录下这个程序后面的最高区段,在这里作为参考。
........

能把上面的这段在详细的说说吗,一直搞不明白应该怎么确定区段的范围,那个最高区段是在那里找到的,谢谢
另外,那个Aspr2.XX_IATfixer_v1.02s的脚本在那里有啊,我只有Aspr2.XX_IATfixer_v1.02版本的
2006-9-29 11:18
0
游客
登录 | 注册 方可回帖
返回
//