知道如何加固的才能更好的破解

加固

思路或者方法

  • 常量保护
    • 软件中的字符串常量,提前经过转化存储,避免明文存放。将字符串通过简单加密后存储就可以了。分析一个加密过程是一个比较耗时的。如果加密成byte,将更难分析
  • 数据加密传输
    • 完全避免明文传输数据,加密强度高,算法够安全,密文和明文不可逆加密【比如RSA算法】
  • 核心数据分开存储
    • 避免数据和软件放在一起。比如QQ,数据都是QQ服务器存放着的。
  • 各种暗装
    • 暗装是网络验证系统必不可少的一环,在恰当的时机进行验证。如果数据被篡改就终止运行
  • 加强程序强度
    • 防止被调试
  • 加壳
    • 加壳就相当于穿上战甲。战甲越牛,越不容易被破解
  • 增加破解成本
    • 时间,金钱…
  • 利用法律
  • 自己破自己
    • 将破解的软件发布出来,然后软件照常使用,当满足某个条件的时候【数据量超过xx条】锁死数据库,只能购买正版解锁
  • 自己破自己
    • 发布假的破解版…
  • 避免直接寻址
    • 由于Bin文件被反汇编之后成为汇编代码,如果只直接寻址(例如寻址到UID密文0X11111111地址上的数据)那么被寻址的地址是直接在汇编代码上可以看到的,直接通过查找功能就可以锁定读取密文的位置,所以一定要用间接寻址,例如我们要寻址0x11111111,可以制定一个32位数据指针,先让其等于0x11110000,再加上0x00001111,最后等于0x11111111再进行寻址,这样的方法不法分子只能在仿真时严格跟踪R0-R3寄存器,才能发现在哪读取了密文,增加其破解时间成本和难度。
  • 大量使用内联暗装
  • 延迟处决

脱掉软件的压缩壳

UPX:给程序加壳,也叫压缩程序。

这里讲解一个UPX的壳,首先将程序压缩。所谓的压缩包括两方面,一方面在程序的开头或者其他合适的地方插入一段代码,另一方面是将程序的其他地方做压缩

方法1

popad,popad是将弹栈恢复所有寄存器

popad之后下面的一个大跳就是程序的OEP

image-20230614203229754

上面这个popad下面这个jmp 设置一个断点 F8单步

image-20230924221739586

在这里 ollyDump 这个插件脱壳

方法2

用的esp定律,之前说过了,这里就不说了。