软件加固简单介绍
知道如何加固的才能更好的破解
加固
思路或者方法
- 常量保护
- 软件中的字符串常量,提前经过转化存储,避免明文存放。将字符串通过简单加密后存储就可以了。分析一个加密过程是一个比较耗时的。如果加密成byte,将更难分析
- 数据加密传输
- 完全避免明文传输数据,加密强度高,算法够安全,密文和明文不可逆加密【比如RSA算法】
- 核心数据分开存储
- 避免数据和软件放在一起。比如QQ,数据都是QQ服务器存放着的。
- 各种暗装
- 暗装是网络验证系统必不可少的一环,在恰当的时机进行验证。如果数据被篡改就终止运行
- 加强程序强度
- 防止被调试
- 加壳
- 加壳就相当于穿上战甲。战甲越牛,越不容易被破解
- 增加破解成本
- 时间,金钱…
- 利用法律
- 自己破自己
- 将破解的软件发布出来,然后软件照常使用,当满足某个条件的时候【数据量超过xx条】锁死数据库,只能购买正版解锁
- 自己破自己
- 发布假的破解版…
- 避免直接寻址
- 由于Bin文件被反汇编之后成为汇编代码,如果只直接寻址(例如寻址到UID密文0X11111111地址上的数据)那么被寻址的地址是直接在汇编代码上可以看到的,直接通过查找功能就可以锁定读取密文的位置,所以一定要用间接寻址,例如我们要寻址0x11111111,可以制定一个32位数据指针,先让其等于0x11110000,再加上0x00001111,最后等于0x11111111再进行寻址,这样的方法不法分子只能在仿真时严格跟踪R0-R3寄存器,才能发现在哪读取了密文,增加其破解时间成本和难度。
- 大量使用内联暗装
- 延迟处决
脱掉软件的压缩壳
UPX:给程序加壳,也叫压缩程序。
这里讲解一个UPX的壳,首先将程序压缩。所谓的压缩包括两方面,一方面在程序的开头或者其他合适的地方插入一段代码,另一方面是将程序的其他地方做压缩
方法1
popad,popad是将弹栈恢复所有寄存器
popad之后下面的一个大跳就是程序的OEP
上面这个popad下面这个jmp 设置一个断点 F8单步
在这里 ollyDump 这个插件脱壳
方法2
用的esp定律,之前说过了,这里就不说了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Safety-Blog!