首页
社区
课程
招聘
指令保护系列 (一):各种指令保护技术和破解技术介绍
发表于: 2020-9-4 20:43 8917

指令保护系列 (一):各种指令保护技术和破解技术介绍

2020-9-4 20:43
8917

最近刚高考(成人高考)完,寻思着写几篇文章看看能不能转正。正好这几天成绩下来了,有那么一点时间,就写了这篇关于指令保护和破解这个领域的文章,希望能给新手带来一定的参考作用和指引。各位大神们,不喜勿喷哈,多谢!

线性反汇编是最容易实现,也是最容易出错的一种反汇编技术,该技术优先将字节码按照线性排列翻译成指令。然而二进制文件中,既有代码,也有数据。代码编写者完全可以利用这个漏洞,植入能够组成多字节指令机器码的数据字节到代码中去。让一些无关的数据被错误地“翻译”成call指令、jmp指令等等垃圾指令,干扰反汇编器的分析。

典型例子:PEiD、PE Explorer等各种老式反汇编工具

这类反汇编器在遇到带有保护的程序时,非常容易出错,甚至直接完全无法识别代码。如下图:
PE Explorer

这是一种更先进的反汇编技术,它并不是盲目地按照线性排列去反汇编整个缓冲区,也不假设仅有指令而无数据。相反,它会随着代码逻辑,边走边“翻译”,建立一个需要反汇编的地址队列,逐个进行反汇编。

典型例子:IDA Pro

IDA Pro可以提供生成类似于C语言的伪代码的功能,给反编译工作带来了很大的便利:
IDA Pro演示

在第1种和第2种技术上,仍然出现一些问题,例如代码采用加密代码或者大量混淆的形式来抵御,那么在一定程度上都阻碍这些破解者。但是基于动态调试跟踪的反汇编,则可以实现对程序的完全分析,因为即便加密了代码,在真正运行时都需要解密。

典型例子:IDA Pro、OllyDbg

所谓对抗反汇编技术,就是在程序中使用特殊构造的代码或数据,让反汇编工具产生不正确的指令,干扰破解者的正常分析。在程序代码中使用该技术,可以在一定程度上增加程序破解者的破解难度,但不可能指望代码100%不被破解。
(本文仅讨论对抗反汇编技术,不讨论反调试、反篡改之类的技术)

花指令,就是像“花”一样的指令,仅供观赏,而没有实际用处,仅仅是用来混淆破解者的指令。例如,可以插入大量没有实际用处的运算代码、判断代码,使得反编译者的破解难度加大。
可以选择使用市面上的插花软件,但一般更偏向于手动加花指令。例如,加入一堆没用的判断或者加减乘除这类的操作。

所谓代码混淆,就是把代码打混,用专业术语来说就是“控制流平坦”,当然也加上“虚假控制流”。原理也很简单,把代码拆分成N块,将顺序打乱后通过jmp连接在一起,高级一点的会用switch(N)来分发执行。再配合“插入虚拟控制流”和“同等指令替换”等技术,可以达到不错的效果
典型例子:OLLVM(开源项目)

使用OLLVM混淆前,使用IDA Pro反编译之后:
混淆前

使用OLLVM马力全开之后:
混淆后
这要是不去除混淆的话,简直没法看了。

这里的指令虚拟化,大多指的是VMP技术,而不是虚拟机那种虚拟化。就是将基于原CPU汇编指令系统的可执行代码转换为字节码指令系统的代码,以达到保护原有指令不被轻易逆向和修改的目的。这种指令也可以叫伪指令,跟Java的Opcode有点类似。简单来说,就是将真正的指令转换成随机定义的指令,构造一个自己的指令虚拟机,在运行时通过模拟执行的方式运行。是目前破解难度最高的一种指令保护方式,并且提供这种功能的都是商业级的保护工具。
典型例子:VMProtect、Code Virtualizer

一般手工打造的花指令基本上不能通过常规方法去除,只能靠手动去除。但是反过来说,手工打造的花指令基本上不可能大规模使用,而自动插入的花指令基本上和原指令没有太多的关联性,很容易去除。

去除混淆目前最有效的方法就是,通过研究目标的混淆规则和特征,通过编写反混淆脚本来破解。(就是网上说的“通过符号执行去除OLLVM混淆”)

参考:
https://bbs.pediy.com/thread-217727.htm
https://github.com/GeT1t/deollvm

将VMP伪代码直接还原成汇编代码难度非常大,除了需要人工分析大量的匹配规则,还必须解决寄存器轮转问题。除了要保护其逻辑正确,还需要注意其中可能包含的暗桩。


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

最后于 2020-11-17 15:52 被恋空编辑 ,原因: 更改一个更好的标题
收藏
免费 7
支持
分享
最新回复 (8)
雪    币: 2760
活跃值: (5288)
能力值: ( LV9,RANK:225 )
在线值:
发帖
回帖
粉丝
2
vmp的话,vtil直接骑vmp脸上了
2020-9-4 22:31
0
雪    币: 6704
活跃值: (4682)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
天水姜伯约 [em_13]vmp的话,vtil直接骑vmp脸上了
有没有使用的例子或者介绍文章
2020-9-5 08:54
0
雪    币: 137
活跃值: (1420)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
pxhb 有没有使用的例子或者介绍文章
https://github.com/can1357/NoVmp
2020-9-5 14:34
0
雪    币: 83
活跃值: (1092)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
666
2020-9-5 17:40
0
雪    币: 29182
活跃值: (63621)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
6
感谢分享,后生可畏,加油!
2020-9-7 09:54
0
雪    币: 864
活跃值: (5124)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
楼主牛逼
2020-9-8 11:33
0
雪    币: 259
活跃值: (3485)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
8
牛哇 高考完就会这么多了
2020-9-8 15:11
0
雪    币: 123
活跃值: (1675)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9

强!

最后于 2020-9-9 14:42 被bbsshop编辑 ,原因:
2020-9-9 14:42
0
游客
登录 | 注册 方可回帖
返回
//