编译与代码安全之认识(一)

         好久没有更新博客了,今天周末索性喝杯茶,静下心来把最近一段时间自己所理解和思考的关于软件代码保护的东西写下来。帮助所需之人,多有不对,望批评指正。正确的运用编译知识可以在我们代码保护中达到事半功倍的效果。


        一提到编译,大家很多人觉得不就是词法分析、语法分析然后产生一个针对特定机器的文件。感觉这是一个很成熟,有规则,本身就是很有章法的东西,好像不需要我们本身去理会它的一种东西,如果是做应用层的开发是没有问题,如果去做安全,比如软件代码保护,我们去做代码保护,经常的思维是要针对基于解释性语言和编译性语言所编译产生的结果去做保护,这就产生了基于运行过程中的加壳,加密,或者是解析结构做混淆,和基于二进制的虚拟机保护,另一个层面是针对一些反汇编器或者反编译器本身去做对坑,比如破坏dex2jar或者针对IDA递归反汇编算法的特征去做一些破坏。但是随着一个LOT、LOV时代的到来,很多的系统是做了本身的DIY,因为针对性更强,目标性更加明确,所以这个时候如果还是以编译完的可执行文件作为保护对象,可能要随时进行更新,强度上和兼容性上所付出的代价会更高。


       因此这个时候,另一种思路就是本文想说的,如果我们去借助一些比较成熟的编译器框架去做一些处理,可能能达到事半功倍的效果。编译不应该仅仅的理解为针对的对象一定是源文件,而应该去把一种源头格式转为编译器本身能够理解的中间语言,一旦转为中间语言,这个时候我们就可以做很多事情,如果想做保护的,那就是反优化,加一些自定义的混淆保护规则,如果想做逆向分析的,那就利用优化规则去优化这些中间语言,或者是针对虚拟机保护过后的文件。可能这个时候大家会想到可执行文件怎么去得到中间语言,如果说通过一些反编译得到一些逻辑正确的伪码,(当然这个假设有待考证研究)可以借助于一些编译器框架自己去写一个对于伪码的特征去做编译优化,优化的过程就是去混淆的一个过程。我想随着对编译的更为深层次的认识,能做的事情还很多,暂时YY这么多。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值