0x00.基本概念:
1. 软件保护技术是向合法用户提供完整功能,所以软件保护必然要验证用户合法性,通常采用注册么验证的方式来实现。
2. 通常流程:
a) 用户向软件作者提交用户码name,申请注册。
b) 软件计算出合法的注册码serial=f(name)返回给用户
c) 用户在界面输入正确的name和serial
d) 软件通过验证函数来验证其合法性
0x01.堡垒战术:
1. MD5:
缺点就是MD5不可逆,所以相应的a一定是一个常数,当获得了一组合法的U,R的时候,就可以追踪到a,b。
2. RSA:
0x02.游击战术:
1. 将验证函数F分解成为多个不相同的Fi,然后将这些Fi尽量隐藏到程序中去。
2. 真正的注册码可以通过全部的Fi,而解密者只找到一个或几个Fi就不能对完整的算法求逆。
3. 对解密者来说,游击战术会非常被动,因为并不知道程序当中还隐藏着什么检测程序。
4. 游击战术的缺点在于,每一个验证函数都必须访问注册码,而注册码的源头只有一个,解密者通过跟踪程序并监控注册码所在的内存地址,那么一旦验证函数访问注册码,那么函数就会被泄露。不过也有应对方法,就是不停地转移注册码。
5. 转移注册码:
(1). 内存拷贝,属于最常规的方法,容易被追踪到。
(2). 写入注册表或者文件中,然后在另一处代码中再读入到另一个内存地址。会被注册表和文件监视工具识破。
(3). 一次将注册码拷贝到多个地址。
(4). 在反复使用同一个函数搬家后,突然使用另一个前半段代码相同后半段不同的函数进行搬家。