首页
社区
课程
招聘
[原创]软件保护壳技术专题 - 反静态反汇编技术
发表于: 2008-7-14 15:06 21966

[原创]软件保护壳技术专题 - 反静态反汇编技术

2008-7-14 15:06
21966

反静态反汇编技术的原理其实非常简单,主要弄清除反汇编程序的原理,就可以创作出多个ANTI-反汇编的方法。由于这个技术没有固定的技术形势,如何反怎么样反全靠你自己的想象力了。这里就介绍一下原理方面和几个常见的技术。

反汇编软件的原理:
反汇编软件的原理非常简单,读取可执行文件后从PE头中取出代码节的入口点文件偏移。按照X86体系结构的编码规则进行解码。然后将代码的助记符进行输出。类似IDA这样先进的反汇编软件还加入了函数头分析,跳转分析,局部变量分析等功能。其实,最基本的原理都是大学编译原理课程中所提到的词法分析和语法分析的相关知识。这里插入一个题外话,至少我感觉的是任何先进的软件,其中到最后用到的核心技术都是编译原理相关的技术。都出不了- 分析- 模拟 - 解释,这些东西。

随机加密原理:
随机加密原理最初是在多态病毒中使用的技巧,它的反反汇编语言也非常简单,就是将自身的代码进行加密,这样反汇编器反汇编后出现的是一堆乱码。这样的随机加密可以有两层随机一个是算法的随机,一种是算子的随机,算法的随机在专题下面的多态加解密中进行专门的探讨,算子的随机相对简单,只要取一个随机值就好了。而这样加密形式也有一个固定的形势存在。
如一下形式:
--- 解密头 ---
--- 被加密体 ---
--- 解密算子 ---

这样代码的功能部分被保护,保护不到的是解密头。解密头启动后如果节被设置了可写标志则直接执行,如果没有,可以使用VirusProtect这个函数修改内存的属性进行可写的设置。当然也可以开辟一个堆空间将密体写入并解密运行。如果认为一开始在没有任何重定位的情况下不想暴露太多的获取API的函数和功能,也可以将代码写入栈中,这样可以进行两个分段的解密情况,一加密的为代码体本身,另一个就是保护程序自身的功能代码。例如:解密代码和ANTI-DEBUG代码。在栈中有个很方便的事情就是天生支持可读可写可执行,分配空间方便等特点,释放轻松等特点,大有百试不爽的感觉。
此结构类似如下(可以自行发挥想象构建复杂的结构):
--- 解密头 ---
--- 被加密体 ---
--- 功能被加密体 ---
--- 加密体解密算子 ---
--- 功能体解密算子 ---
解密头首先开辟栈,将功能被加密体写入栈后解密,再次跳入执行。功能体解密真正的功能代码。当然可以在其中加入ANTI-DEBUG代码与设定异常等。

加密这种方法简单实用。如果有想些类似程序的朋友不妨常用,而且它反汇编反的很彻底,一个简单的XOR就能让IDA对主体分析失效。

不规则的函数头:
让我们先看一个标准的函数头
push ebp
mov esp, ebp
sub esp, StackSize
代码...
mov esp, ebp
pop ebp
ret

IDA在识别函数的时候也是通过识别这些指令的opcode码来识别函数的。通常在整过编译器编译过后采用[ebp+偏移]来引用参数,而使用[ebp-偏移]来引用局部变量的。
当然写壳这类的东西用汇编是最适合的,如果用高级语言当然一定也要嵌入汇编,总之因为汇编的灵活,我们就来构建自己特殊的函数形势,让IDA分析不到。其他反汇编程序全部忽略。(至今没发现比IDA还健壮的。)

这里给出一些思路吧。因为这方面也没有什么固定的东西,说白了一切看发挥,例如sub esp, StackSize,就可以使用以下函数替换,当然还有清除堆栈的指令 mov ebp, esp; pop ebp也可以替换

    [COLOR=Red];; ----- 构建栈空间-----[/COLOR]
    MakeStackLive:
    ;; arg is in eax       
        mov ecx, 04h
        idiv ecx
        movzx eax, ax
        xor ecx, ecx
    MakeStackLiveLoop:
        call MakeStackLiveInsertOne
        MakeStackLiveInsertOne:
        inc ecx
        dec eax
        jnz MakeStackLiveLoop
        mov eax, 04h
        imul ecx
        mov eax, dword ptr [esp+eax]
        push eax
        retn 0
        
    [COLOR=Red];; ----- 清除栈空间 -----[/COLOR]
    ClearStackLive:
    ;; arg is in eax
        mov ecx, 04h
        idiv ecx
        mov ebx, dword ptr [esp]
        movzx ecx, ax
        pop eax
        ClearStackLiveLoop:
        pop eax
        loop ClearStackLiveLoop
        push ebx
        retn 0  
lea edi, JmpLabel
[COLOR=Red];; 将jz变为jnz则跳转[/COLOR]
inc byte ptr [edi]
test eax, eax
JmpLable:
jz Label1

代码...

Label1

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (19)
雪    币: 321
活跃值: (275)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
2
占个沙发慢慢看
2008-7-14 17:08
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
每贴都顶。。。。。。。。。。。习惯了
2008-7-14 18:44
0
雪    币: 709
活跃值: (2575)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
4
学习~~~

.
2008-7-14 19:38
0
雪    币: 123
活跃值: (1217)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
studying........
2008-7-14 20:11
0
雪    币: 65
活跃值: (811)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
6
回老家了~~
没有想到现在回来顶,还能在第一页~
收藏学习了哦 ·~~
2008-7-21 09:53
0
雪    币: 350
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
认真学习.
2008-7-21 11:10
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
8
这年头想坐板凳都难啊
2008-7-21 11:16
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
起晚了 没赶上早
2008-7-22 11:12
0
雪    币: 122
活跃值: (98)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
太强了,慢慢学
2008-7-29 21:10
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
11
support.
2008-7-29 21:42
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
反静态反汇编技术应该出本书,让我门好好看一下
2008-9-14 13:54
0
雪    币: 251
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
13
说得很有道理
2008-9-15 09:24
0
雪    币: 230
活跃值: (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
不错,收藏学习!
2008-9-15 10:17
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
好文章我下下来看一下
2009-1-20 11:01
0
雪    币: 124
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
好文章,学习.....
2009-2-9 10:48
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
好文章学一下
2009-2-27 14:44
0
雪    币: 433
活跃值: (1895)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
18
这专题牛啊,得好好看看,得一篇一篇地把它看完,呵呵……
2009-11-2 16:42
0
雪    币: 270
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
19
有些没看懂,讲的大略了
2010-2-22 17:58
0
雪    币: 220
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
学习中...................
2010-2-22 20:15
0
游客
登录 | 注册 方可回帖
返回