首页
社区
课程
招聘
[原创]Themida.V1.9.1.0简单分析
发表于: 2007-7-25 11:52 6494

[原创]Themida.V1.9.1.0简单分析

2007-7-25 11:52
6494
Themida.V1.9.1.0简单分析

    加壳前后的代码变化(包括用户自己的函数 及 系统API)
    如何加API断点

VC2003 Release编译
void CSeedCountDlg::OnBnClickedButton1()
{
    int     a = rand();
    int     b = MB_OK;

    _asm
    {
        mov eax,a
        mov ebx,b
        XCHG    eax,ebx
        mov a,eax
    }
    MessageBeep(a);

}

原始EXE代码
.text:00401400 sub_401400      proc near
.text:00401400
.text:00401400 uType           = dword ptr -8
.text:00401400 var_4           = dword ptr -4
.text:00401400
.text:00401400                 sub     esp, 8
.text:00401403                 push    ebx
.text:00401404                 call    _rand
.text:00401409                 mov     [esp+0Ch+uType], eax
.text:0040140D                 mov     [esp+0Ch+var_4], 0
.text:00401415                 mov     eax, [esp+0Ch+uType]
.text:00401419                 mov     ebx, [esp+0Ch+var_4]
.text:0040141D                 xchg    eax, ebx
.text:0040141E                 mov     [esp+0Ch+uType], eax
.text:00401422                 mov     eax, [esp+0Ch+uType]
.text:00401426                 push    eax             ; uType
.text:00401427                 call    ds:MessageBeep
.text:0040142D                 pop     ebx
.text:0040142E                 add     esp, 8
.text:00401431                 retn
.text:00401431 sub_401400      endp

IAT
ds:[004273F4]=77D2EAE6 (USER32.MessageBeep)

Themida.V1.9.1.0加壳后
用ollyice加断点 bp MessageBeep, 实际没任何效用

自行分析 系统的MessageBeep的代码
77D2EAE6 >  6A 30            push    30                     ->第二个参数
77D2EAE8    FF7424 08        push    dword ptr [esp+8]
77D2EAEC    E8 F059FEFF      call    77D144E1               ->关键代码
77D2EAF1    C2 0400          retn    4

上面call    77D144E1, 第二个参数 30
自己加条件断点  bp 77D144E1, [esp+8] == 0x30
这样可以断下来, MessageBeep的上层代码是由Themida产生, 所以bp MessageBeep没有作用
断在77D144E1的call stack
    调用堆栈:     主线程
    地址       堆栈       函数过程 / 参数                       调用来自                      结构
    0012F700   02D0040E   ? USER32.77D144E1                     02D00409
    0012F704   00000000     Arg1 = 00000000
    0012F708   00000030     Arg2 = 00000030
    0012F70C   0040142C   ? 02D003C5                            SeedCoun.00401427

看call stack到
Themida产生的MessageBeep代码
02D003C5    6A 30            push    30                     ->第二个参数
02D003C7    50               push    eax
02D003C8    52               push    edx
02D003C9    E9 14000000      jmp     02D003E2
            ...    这里有些花指令
02D003E2    0F31             rdtsc
02D003E4   /E9 0C000000      jmp     02D003F5
            ...    这里有些花指令
02D003F5    5A               pop     edx
02D003F6    58               pop     eax
02D003F7    FF7424 08        push    dword ptr [esp+8]
02D003FB    E9 09000000      jmp     02D00409
            ...    这里有些花指令
02D00409    E8 D3400175      call    USER32.77D144E1        ->关键代码
02D0040E    50               push    eax
02D0040F    52               push    edx
02D00410    50               push    eax
02D00411    52               push    edx
02D00412    60               pushad
02D00413    61               popad
02D00414    0F31             rdtsc
02D00416    60               pushad
02D00417    61               popad
02D00418    5A               pop     edx
02D00419    58               pop     eax
02D0041A    0F31             rdtsc
02D0041C    60               pushad
02D0041D    E9 0D000000      jmp     02D0042F
            ...    这里有些花指令
02D0042F    8BDE             mov     ebx, esi
02D00431    61               popad
02D00432    5A               pop     edx
02D00433    58               pop     eax
02D00434    C2 0400          retn    4

原系统的MessageBeep只有4行汇编, Themida产生的MessageBeep代码 超过了30行

往上call stack可以看到 void CSeedCountDlg::OnBnClickedButton1()的代码

00401400    83EC 08          sub     esp, 8
00401403    53               push    ebx
00401404    E8 5EAE0000      call    0040C267               ->_rand()
00401409    894424 04        mov     dword ptr [esp+4], eax
0040140D    C74424 08 000000>mov     dword ptr [esp+8], 0
00401415    8B4424 04        mov     eax, dword ptr [esp+4]
00401419    8B5C24 08        mov     ebx, dword ptr [esp+8]
0040141D    93               xchg    eax, ebx
0040141E    894424 04        mov     dword ptr [esp+4], eax
00401422    8B4424 04        mov     eax, dword ptr [esp+4]
00401426    50               push    eax
00401427    E8 99EF8F02      call    02D003C5               ->Themida产生的MessageBeep
0040142C    90               nop
0040142D    5B               pop     ebx
0040142E    83C4 08          add     esp, 8
00401431    C3               retn
用户代码变化不大

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
另外一方面也说明效率比例是4:30
2007-7-25 11:55
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
看起来很诱人, 却无法运行到示例代码那里啊, 请教一下如何调试的啊, 如何能在Themida.V1.9.1.0 把OD隐藏起来? 
2007-7-29 17:17
0
雪    币: 224
活跃值: (147)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
4
的确是“简单分析”
2007-7-29 18:51
0
雪    币: 192
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
文不对题啊,API的这种变形从1.1.1.0里就有,1.9.1.0主要是加了一些用烂的ANTI,把输入表处理的部分进行了垃圾代码变形,1.9.2.0加了更多用烂的ANTI,只不过因为垃圾太多了,不好看.总之现在是垃圾越多越强.
2007-7-29 22:07
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
尝试了N次都没能躲避OD检测, 高手指点一下吧
2007-7-30 16:58
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
7
潜标题是:tmd1910你来分析
2007-7-30 17:15
0
雪    币: 170
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
斑竹是一语道破天机啊
2007-7-30 17:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
尝试了N次都没能躲避OD检测, 难啊!
2007-7-30 18:50
0
游客
登录 | 注册 方可回帖
返回
//