飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 6590|回复: 14

Themida|WinLicense V1.8.x-V1.9.x

[复制链接]

该用户从未签到

发表于 2007-11-28 14:33:45 | 显示全部楼层 |阅读模式
汗了,我自己没发过这个帖子的,都不知道是谁盗我号

[ 本帖最后由 a56374985 于 2007-11-29 16:51 编辑 ]
PYG19周年生日快乐!

该用户从未签到

发表于 2007-11-28 18:26:02 | 显示全部楼层
你可以参考一下别人的手工脱法:
https://www.chinapyg.com/viewthr ... &extra=page%3D1

手脱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

[ 本帖最后由 ttt0001 于 2007-11-28 18:27 编辑 ]
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-11-29 08:52:01 | 显示全部楼层
/:014 谢谢了,我先测试一下看看!
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-11-29 10:38:49 | 显示全部楼层
不行在代码段下内存写入断点,shift+F9就飞了断不住!
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-5-14 11:54
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2007-11-29 20:28:21 | 显示全部楼层
    楼上的教程还真是精华啊/:good
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-12-11 15:10:18 | 显示全部楼层
    看到头昏…………
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-12-16 16:28:25 | 显示全部楼层
    好贴啊!找了几久了!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-12-31 05:30:02 | 显示全部楼层
    Alt+M在代码段下内存写入断点,Shift+F9运行,遇到 rep 代码时F7+F8

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

    这个rep代码就是找不到,无法进行下去
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-2-16 16:18:01 | 显示全部楼层
    1.9.1还没有学会,1.9.5就来了
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-2-16 17:20:59 | 显示全部楼层
    我怎么就不行,走到这一步的时候,程序跳出窗口提示错误,怎么回事?
    ----------------------------------------------------------------------------------------------------------
    在代码段下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
    -----------------------------------------------------------------------------------------------------------

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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