- UID
- 2198
注册时间2005-6-29
阅读权限255
最后登录1970-1-1
副坛主
  
该用户从未签到
|
这里我们讨论的是算法设计如何有效的避免被破解,大家可结合平时自己的调试经验或加密设计的思路来共同讨论下这个话题. 1楼做整理大家讨论的结果.
无需加过强壳,哪怕是四则运算的算法.我们讨论如何使用最简单的东西达到最强的反破解.
方法1:By:Nisy
通过这些天的四处碰壁来说总结一下这些反破解的方法.
1.脱壳后的文件自效检 ---- 自效检失败后直接导致关机, 前几天看到Fly大哥在回帖中说到现在的反调试有些都可以简单到是否在VM中运行.当然这种壳或是自效检的编写还是需要一定技术才可以达到的.
2.KEY的分步验证:
i \软件的验证方式分步进行,我们建设KEY假定为20位,我们验证的时候判断小于20位则显示注册失败.
注册窗口部分的验证: 这里只判断前10位 调用CALL01来验证这10位,通过则显示"请重启软件判断是否注册".不通过则显示注册失败.
显示"请重启软件判断是否注册"后进行两个操作:
1).向注册表写入我们输入的注册信息
2).软件关闭时候,将注册信息的后10位加密(不要保存原值,做一个简单变换即可)保存到软件已有的一个文件中(如DAT文件中)
ii\软件启动时的严整: 判断软件是否写入注册信息,写入则显示注册成功.未显示弹出需要注册的窗口.
同时调出DAT文件中已加密的数据(也是10位),对该数据的前3位做一个验证,返回一个数值放到内存的某个字节中;判断4-6位,返回一个数值,放另一个字节中;判断7-9位,返回一个数值,放到第三个字节中.
当使用软件的某一功能时(点击使用或使用中,可做一个时间函数进行使用中的是否注册判断),对内存中的这三个字节进行一个判断,要分步判断,如有一处出错即无法实现软件的完整功能. 如果过了这一道关卡, 那就是对第10位的验证,来决定你使用该功能后对一些处理是否进行保存,验证失败则不保存.
第二种方法就是通过和破解者的耐力较量来到达不完全破解的目的.
方法2:By:yunfeng
除了使用加密学以外,现在是层层设防,加强壳,加自校验,加关机,加网络验证,加伪装壳。超级转换秀系列软件、木马清除大师、木马清道夫等软件就是它们之中的代表。
我们学习破解一个很重要的内容就是通过学习对方的加密手法,来提升自己软件的加密强度.当然防破解上我们最有效果的还是VM加密关键代码并使用一个强壳做保护.我们这里主要讨论的是对算法的验证上如果来和破解者做周旋.本话题欢迎大家来参与讨论. |
|