飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3227|回复: 3

[原创] PE Spin 1.3 脱壳

[复制链接]

该用户从未签到

发表于 2007-9-26 03:40:58 | 显示全部楼层 |阅读模式
【文章标题】: PE Spin 1.3 脱壳
【文章作者】: 南宫涤尘
【作者邮箱】: zlm324@126.com
【下载地址】: 附件提供下载
【加壳方式】: Upack
【使用工具】: OD
【作者声明】: 高手请略过!
--------------------------------------------------------------------------------
【详细过程】
  这是个加壳程序,但是咖啡报毒,应该是壳的问题,准备脱一下。
  PEiD查壳,发现是:UPack,没见过,手动处理吧。
  OD载入,停在这里:
  00401030 > $- E9 86470200   jmp     004257BB
  00401035   .  42 79 44 77 6>ascii   "ByDwing@",0
  0040103E      00            db      00
  0040103F      00            db      00
  00401040   .  50 45 00      ascii   "PE",0
  00401043      00            db      00
  00401044      4C            db      4C                               ;  CHAR 'L'
  
  先按照手脱的方法,即程序只能往下走,遇到往上的跳转的时候就在它下一行按F4,
  跟下去:
  004257BB    BE 88014000     mov     esi, 00400188                    ; ASCII "8ZB"
  004257C0    AD              lods    dword ptr [esi]
  004257C1    8BF8            mov     edi, eax
  004257C3    95              xchg    eax, ebp
  004257C4    AD              lods    dword ptr [esi]
  004257C5    91              xchg    eax, ecx
  004257C6    F3:A5           rep     movs dword ptr es:[edi], dword p>
  004257C8    AD              lods    dword ptr [esi]
  004257C9    B5 1C           mov     ch, 1C
  004257CB    F3:AB           rep     stos dword ptr es:[edi]
  004257CD    AD              lods    dword ptr [esi]
  004257CE    50              push    eax
  004257CF    97              xchg    eax, edi
  004257D0    51              push    ecx
  004257D1    58              pop     eax
  004257D2    8D5485 5C       lea     edx, dword ptr [ebp+eax*4+5C]
  004257D6    FF16            call    dword ptr [esi]
  004257D8    72 57           jb      short 00425831
  004257DA    2C 03           sub     al, 3
  004257DC    73 02           jnb     short 004257E0
  004257DE    B0 00           mov     al, 0
  004257E0    3C 07           cmp     al, 7
  004257E2    72 02           jb      short 004257E6
  004257E4    2C 03           sub     al, 3
  004257E6    50              push    eax
  ......
  0042593D    5F              pop     edi
  0042593E    E3 1B           jecxz   short 0042595B
  00425940    8A07            mov     al, byte ptr [edi]
  00425942    47              inc     edi
  00425943    04 18           add     al, 18
  00425945    3C 02           cmp     al, 2
  00425947  ^ 73 F7           jnb     short 00425940
  00425949    8B07            mov     eax, dword ptr [edi]
  0042594B    3C 09           cmp     al, 9
  0042594D  ^ 75 F1           jnz     short 00425940
  0042594F    B0 00           mov     al, 0
  00425951    0FC8            bswap   eax
  00425953    0346 1C         add     eax, dword ptr [esi+1C]
  00425956    2BC7            sub     eax, edi
  00425958    AB              stos    dword ptr es:[edi]
  00425959  ^ E2 E5           loopd   short 00425940
  0042595B    8B5E 34         mov     ebx, dword ptr [esi+34]
  0042595E    8B76 38         mov     esi, dword ptr [esi+38]
  00425961    46              inc     esi                              ; PESpin_v.0041AFFF
  
  当运行到这里时:
  00425971    AC              lods    byte ptr [esi]
  00425972    84C0            test    al, al
  00425974  ^ 75 FB           jnz     short 00425971
  00425976    3806            cmp     byte ptr [esi], al
  00425978  ^ 74 E7           je      short 00425961
  0042597A    8BC6            mov     eax, esi
  0042597C    79 05           jns     short 00425983
  0042597E    46              inc     esi
  0042597F    33C0            xor     eax, eax
  00425981    66:AD           lods    word ptr [esi]
  00425983    50              push    eax
  00425984    55              push    ebp
  00425985 >  FF13            call    dword ptr [ebx]           ;kernel32.GetProcAddress
  00425987    AB              stos    dword ptr es:[edi]
  00425988  ^ EB E7           jmp     short 00425971
  
  这时观察寄存器:
  EAX 0041B011 ASCII "ImageList_LoadImage"
  ECX 7C801BF6 kernel32.7C801BF6
  EDX 00160608
  EBX 00425A0C <&KERNEL32.GetProcAddress>
  ESP 0013FFBC
  EBP 77180000 offset COMCTL32.#237
  ESI 0041B011 ASCII "ImageList_LoadImage"
  EDI 0041A000 PESpin_v.0041A000
  EIP 00425985
  
  在循环里观察,发现每次执行到00425985时,EAX中都是不一样的API函数地址,猜想这里是否是还原输入表的地方。
  但是这个循环不能步过,否则程序就运行起来了。
  粗略观察一下,最后出现的API是EnableWindow,那么在00425985下断点:bp 00425985,eax==0041b3ef
  (0041b3ef是EnableWindow的地址),这样是为了不小心让程序运行起来以后重新单步起来麻烦。
  
  当所有API恢复完之后,有一个跳转会实现,单步到这里:
  00425961    46              inc     esi                              ; PESpin_v.0041B3FC
  00425962    AD              lods    dword ptr [esi]
  00425963    85C0            test    eax, eax
  00425965  - 0F84 6A3FFEFF   je      004098D5                        ;跳到OEP
  
  跟着最后一个跳转,来到这里:
  004098D5      68            db      68                               ;  CHAR 'h'
  004098D6      84            db      84
  004098D7      D0            db      D0
  004098D8      40            db      40                               ;  CHAR '@'
  004098D9      00            db      00
  004098DA      6A            db      6A                               ;  CHAR 'j'
  004098DB      00            db      00
  004098DC      6A            db      6A                               ;  CHAR 'j'
  004098DD      00            db      00
  004098DE      E8            db      E8
  004098DF      C1            db      C1
  004098E0      07            db      07
  004098E1      00            db      00
  
  这是什么乱七八糟的?不要急,点右键->“分析”->“从模块中删除分析”
  然后变成这样子:
  004098D5    68 84D04000     push    0040D084                         ; ASCII "PE_SPIN_v1.3"
  004098DA    6A 00           push    0
  004098DC    6A 00           push    0
  004098DE    E8 C1070000     call    0040A0A4                         ; jmp 到 kernel32.CreateMutexA
  004098E3    E8 E6070000     call    0040A0CE                         ; jmp 到 ntdll.RtlGetLastWin32Error
  004098E8    3D B7000000     cmp     eax, 0B7
  004098ED    75 1E           jnz     short 0040990D
  004098EF    68 44010000     push    144
  004098F4    68 D0D04000     push    0040D0D0                         ; ASCII "友情提示"
  004098F9    68 AAD04000     push    0040D0AA
  004098FE    6A 00           push    0
  00409900    E8 95080000     call    0040A19A                         ; jmp 到 USER32.MessageBoxA
  00409905    2C 07           sub     al, 7
  00409907    74 3F           je      short 00409948
  00409909    90              nop
  0040990A    90              nop
  0040990B    90              nop
  0040990C    90              nop
  0040990D    8B4424 0C       mov     eax, dword ptr [esp+C]
  00409911    6A 00           push    0
  00409913    E8 C2070000     call    0040A0DA                         ; jmp 到 kernel32.GetModuleHandleA
  
  看起来像是到了OEP,拿OD的插件脱一下,发现程序能正常运行,脱壳完毕。
  
--------------------------------------------------------------------------------
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年09月24日 23:33:13

PESpin 1.3汉化版.rar

36.51 KB, 下载次数: 2, 下载积分: 飘云币 -2 枚

未脱版

评分

参与人数 1飘云币 +20 收起 理由
tianxj + 20 感谢您发布的原创作品!

查看全部评分

PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    昨天 07:59
  • 签到天数: 1683 天

    [LV.Master]伴坛终老

    发表于 2007-9-30 23:00:29 | 显示全部楼层
    可以用来学习一下~~~~
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-6-4 17:21
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2007-9-30 23:15:57 | 显示全部楼层
    向楼主学习
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-10-6 09:12:34 | 显示全部楼层
    恩,又学到了一招
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表