飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 13854|回复: 31

[原创] 手脱Tmd1950 unpackme

[复制链接]
  • TA的每日心情
    开心
    2017-10-10 17:24
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2007-11-19 14:08:05 | 显示全部楼层 |阅读模式
    手脱Tmd1950 unpackme

    脱壳大致流程:

    1、代码段内存写入断点。
    2、搜索代码:3985??????0?0F,改成JMP。
    3、搜索代码:FFD3,上面4个JE改成NOP。
    4、在ZwFreeVirtualMemory末尾下断。
    5、在代码段下断就可以到OEP

    废话不多说,配置好OD和插件,推荐用okdodo大侠的新版插件或者PhantOm plugin V1.20来隐藏。


    0040C014 >  B8 00000000         mov eax,0                          ;载入点
    0040C019    60                  pushad
    0040C01A    0BC0                or eax,eax
    0040C01C    74 68               je short 0040C086
    0040C01E    E8 00000000         call 0040C023
    0040C023    58                  pop eax
    0040C024    05 53000000         add eax,53
    0040C029    8038 E9             cmp byte ptr ds:[eax],0E9
    0040C02C    75 13               jnz short 0040C041
    0040C02E    61                  popad
    0040C02F    EB 45               jmp short 0040C076
    0040C031    DB2D 37C04000       fld tbyte ptr ds:[40C037]
    0040C037    FFFF                ???                            ; Unknown command
    0040C039    FFFF                ???                            ; Unknown command
    0040C03B    FFFF                ???                            ; Unknown command
    0040C03D    FFFF                ???                            ; Unknown command


    Alt+M在代码段下内存写入断点,Shift+F9运行,遇到 rep 代码时F7+F8

    0054351A    F3:A4               rep movs byte ptr es:[edi],byt>    ;这里F7+F8

    继续 shift+f9

    00556B88    8F00                pop dword ptr ds:[eax]             ;来到这里
    00556B8A    51                  push ecx
    00556B8B    B9 00000000         mov ecx,0
    00556B90    01C1                add ecx,eax
    00556B92    8131 60585F23       xor dword ptr ds:[ecx],235F586>
    00556B98    59                  pop ecx
    00556B99    E9 11000000         jmp 00556BAF
    00556B9E    54                  push esp
    00556B9F    76 61               jbe short 00556C02

    搜索代码:3985??????0?0F,把后面的JE改成JMP。(避开加密)

    00554087    3985 752B4607       cmp dword ptr ss:[ebp+7462B75]>    ;找到这里
    0055408D    0F84 80000000       je 00554113

    修改成

    0055408D   /E9 81000000         jmp 00554113
    00554092   |90                  nop

    然后向下搜索代码:FFD3,找到它上面的4个JE改成NOP。(避开加密)


    005548F5   /0F84 E9000000       je 005549E4                        ;NOP

    0055492C   /0F84 B2000000       je 005549E4                        ;NOP

    00554955   /0F84 89000000       je 005549E4                        ;NOP

    00554991   /0F84 4D000000       je 005549E4                        ;NOP

    其中找第一个JE的时候,会有个花指令,可以在005548E9的JMP那里回车一下就可以看到了。

    005548E9   /E9 06000000         jmp 005548F4                       ;这里回车一下跟过去看看

    做完上面以后,就可以Ctrl+G在ZwFreeVirtualMemory末尾下断了


    7C92DA48 >  B8 53000000         mov eax,53
    7C92DA4D    BA 0003FE7F         mov edx,7FFE0300
    7C92DA52    FF12                call dword ptr ds:[edx]
    7C92DA54    C2 1000             retn 10                            ;这里F2


    OK,这时候可以按F9运行了,在ZwFreeVirtualMemory末尾断下后,F8单步返回


    00AD8F2F    8BF8                mov edi,eax                        ;返回在这
    00AD8F31    85FF                test edi,edi
    00AD8F33    0F8C 68C60200       jl 00B055A1
    00AD8F39    33C0                xor eax,eax
    00AD8F3B    40                  inc eax
    00AD8F3C    5F                  pop edi
    00AD8F3D    5E                  pop esi
    00AD8F3E    5D                  pop ebp
    00AD8F3F    C2 1000             retn 10

    在代码段下F2断点,可以查看到一些IAT和OEP信息,F9运行


    00556B88    8F00                pop dword ptr ds:[eax]            ;EAX=00407000 IAT开始
    00556B8A    51                  push ecx
    00556B8B    B9 00000000         mov ecx,0
    00556B90    01C1                add ecx,eax
    00556B92    8131 60585F23       xor dword ptr ds:[ecx],235F586>
    00556B98    59                  pop ecx

    ...

    004B6973    FF32                push dword ptr ds:[edx]        ; kernel32.GetVersion
    004B6975  ^ E9 F092FFFF         jmp 004AFC6A
    004B697A    81EE 344B114A       sub esi,4A114B34
    004B6980    8B3C24              mov edi,dword ptr ss:[esp]


    断在004B6973的时候,把EDX的值记下,在代码段下F2断点就可以到OEP处了


    00403897    33D2                xor edx,edx
    00403899    8AD4                mov dl,ah
    0040389B    8915 EC844000       mov dword ptr ds:[4084EC],edx
    004038A1    8BC8                mov ecx,eax
    004038A3    81E1 FF000000       and ecx,0FF
    004038A9    890D E8844000       mov dword ptr ds:[4084E8],ecx
    004038AF    C1E1 08             shl ecx,8
    004038B2    03CA                add ecx,edx
    004038B4    890D E4844000       mov dword ptr ds:[4084E4],ecx
    004038BA    C1E8 10             shr eax,10
    004038BD    A3 E0844000         mov dword ptr ds:[4084E0],eax
    004038C2    33F6                xor esi,esi
    004038C4    56                  push esi


    看到这些代码可以猜出是个VC++程序,OEP前面被偷了一小段代码,部分代码可以在堆栈区找回

    来到堆栈区域,鼠标往下拉一点...

    0012FF84   0012FFE0  Pointer to next SEH record
    0012FF88   00404C64  SE handler                                     ;补OEP用到的
    0012FF8C   00407100  test.00407100                                  ;补OEP用到的
    0012FF90   FFFFFFFF

    找个VC++ 未加壳的程序,OD载入后把前面一段代码复制过来.




    0040386B    55                          push ebp
    0040386C    8BEC                        mov ebp,esp
    0040386E    6A FF                       push -1
    00403870    68 00714000                 push 00407100               ;这里看堆栈信息
    00403875    68 644C4000                 push 00404C64               ;这里看堆栈信息
    0040387A    64:A1 00000000              mov eax,dword ptr fs:[0]
    00403880    50                          push eax
    00403881    64:8925 00000000            mov dword ptr fs:[0],esp
    00403888    83EC 58                     sub esp,58
    0040388B    53                          push ebx
    0040388C    56                          push esi
    0040388D    57                          push edi
    0040388E    8965 E8                     mov dword ptr ss:[ebp-18],esp
    00403891    FF15 6C704000               call dword ptr ds:[40706C]             ; kernel32.GetVersion

    00403891这个CALL的值就是刚才断在004B6973的时候EDX的值,补上即可

    在0040386B新建EIP,现在打开LOADPE选择TEST.EXE修正镜像后DUMP下来,然后打开 ImportRE

    OEP:0000386B 自动查找IAT

    RVA:00006FFC 大小:000000F4

    获取输入表

    发现有一个函数无效,这时候可以记住这个无效的地址,然后在OD中Ctrl+G 来到:

    026E0000    8BFF                mov edi,edi
    026E0002    E9 0C000000         jmp 026E0013
    026E0007    04 ED               add al,0ED

    这里都是些花指令,直接在JMP那里回车一路跟过去,到后面就会出现要找的函数.

    026E017D    E8 06000000         call 026E0188                        ;到这的时候回车跟进去
    026E0182    06                  push es

    026E01AE    61                  popad
    026E01AF    E8 7802137A         call kernel32.CreateRemoteThread
    026E01B4    60                  pushad

    出来了....

    IAT修复转存DUMP的程序.

    PEDI查壳:Microsoft Visual C++ 6.0

    试运行正常.

    附文中用到的目标文件和插件,再次感谢 ^,^

    Tmd1950 unpackme 新anti
    http://www.unpack.cn/viewthread.php?tid=18423&extra=page%3D2

    OD隐藏插件
    http://www.unpack.cn/viewthread.php?tid=19109&extra=page%3D1

    PhantOm plugin V1.20.by Hellsp@wn & Archer
    http://www.unpack.cn/viewthread.php?tid=19261
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-2-17 18:27
  • 签到天数: 33 天

    [LV.5]常住居民I

    发表于 2007-11-19 15:16:20 | 显示全部楼层
    很难得出手的,呵呵

    /:good
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2023-12-2 20:17
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2007-11-19 19:59:46 | 显示全部楼层
    牛叉学习,搞个动画出来就好了:lol:
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2018-6-6 15:51
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2007-11-19 21:00:26 | 显示全部楼层
    原帖由 enjon 于 2007-11-19 19:59 发表
    牛叉学习,搞个动画出来就好了:lol:


    兄弟你照着文章,录一下发出去就有了:loveliness: 我等你的录像呢
    PYG19周年生日快乐!
  • TA的每日心情
    郁闷
    2019-7-5 06:17
  • 签到天数: 97 天

    [LV.6]常住居民II

    发表于 2007-11-19 21:24:15 | 显示全部楼层
    再次学习了!!!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-10-21 14:56
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2007-11-19 22:23:35 | 显示全部楼层
    /:good /:good /:good
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2023-12-2 20:17
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2007-11-20 09:22:36 | 显示全部楼层
    原帖由 glts 于 2007-11-19 21:00 发表


    兄弟你照着文章,录一下发出去就有了:loveliness: 我等你的录像呢


    呃呃呃,上面的不是又在笑话我了么,我是菜鸟,咋能跟高手比,还是原创说得详细些,像这样的文章应该glts接手作动画啦:lol:
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-11-20 11:07:51 | 显示全部楼层
    精品啊! 认真学习
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 642 天

    [LV.9]以坛为家II

    发表于 2007-11-20 15:45:44 | 显示全部楼层
    在004B6973位置是是什么断点断下的。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-11-20 15:58:05 | 显示全部楼层
    没有办法我都是遇到很角色,ap的方法也学习下,看可以脱不
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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