频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

扭曲变换加密 防止软件破解最好方法

来源:pcdog 作者: 出处:巧巧读书 2007-12-16 进入讨论组

三、扭曲变换器

有了思想,就开始动手编码。原以为OBJ文件格式是有文档的,工程进度应该很快。没想到其中还是有很多内容需要考虑。每每说这是最后一个问题,解决了就没事了,却总是后延。

前前后后居然写了差不多半年时间。

主要遇到的技术问题:

* 汇编器ML会把所有的代码放到一个段中,这是不可以的。CL则通常是一个函数一个段。

* 汇编器ML不能生成 COMDAT 段。尽管文档中讲它支持COMMON,但加了这个关键字无效果。

* 汇编器ML不支持 WEAKEXTERN

* 汇编器ML只支持 defaultlib 这一个 drectve 关键字,其它 export, include 等关键字不支持.总之,CL编译的OBJ其中有很多属性是ML无法生成的。微软的masm真的该升级了。

还有一些问题:

* 分不清代码与数据。数据段中肯定是数据,但代码段中却有可能不是代码,是数据。这时如果你试图反汇编它,就会出错。

* ?????不管怎样,这些问题都一一解决了(别问我怎么做的)。

采用的代码扭曲方法:

* 用 JMP 把代码打乱。这已经不是什么新鲜的招数了,但它依然有效。

* 用 JMP 把多个函数缠绕在一起。这样可以让分析者找不到函数从什么地方开始,到什么地方结束。

* 把 call 改掉。破解者对 call 是极敏感的,这举可以让他找不到一个 call。

比如,我可以把 call sub1改为:

mov eax, offset sub1 + 3 
push offset @1 sub eax, 3 
jmp eax    
      @1:

* 把 ret 改掉。破解者对 ret 是极敏感的,这举可以让他找不到一个 ret。比如,我可以把ret写作:

push ecx 
mov ecx, [esp+4] 
add esp,8 
jmp ecx
* 改条件跳。条件跳也是极敏感的指令,比如我们可以把:
   cmp reg1, reg2
   jge L_DST         
L_NEXT:写作:        
   push eax        
   mov eax, reg1        
   sub eax, reg2        
   shr eax, 1fh       
   neg eax        
   and eax, L2 - L1        
   add eax, L1        
   jmp eax    L1:        
   pop eax        
   jmp L_DST    
L2:       
   pop eax    
      L_NEXT:

再看这个,你能看懂是什么意思吗:

push offset @@L - offset L_3 + 23h
jmp L_1
L_2:        
   jz L_3        
   ret 4
L_3:               
   add dword ptr [esp+4], offset L_3 - 23h        
   add esp,4         
   retL_1:
call L_2        
      ...

 http://www.qqread.com/encrypt/p277132.html 更多文章 更多内容请看加密与解密技术常用软件加密宝典杀毒软件专栏专题,或进入讨论组讨论。

收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章