Phoenix RDK的妙用

Phoenix RDK的妙用

 

         什么是RDKRDKResearch Development Kit的缩写,可以理解成未正式发布的SDKPhoenix RDK是微软的一个有关编译器的项目,官方网址http://research.microsoft.com/phoenix/。由于文档很少,也没有什么tutorial,一直没有深入进去。不过今天一不小心发现了phx rdk有自动优化的功能,可以运用于部分.net程序流程混淆的自动反混淆。

         下面来看实例。一个.net可执行文件,用reflector打开后,当解码显示为C#时,出错:

 

         将解码换成il,可以看到报错的原因是前4行语句:

.method family hidebysig virtual instance bg69HSMjsC.BAwiRPXqUI3RVh GenerateSearchBase(int32, object) cil managed

{

      .maxstack 7

      .locals init (

            [0] bg69HSMjsC.BAwiRPXqUI3RVh vh1,

            [1] bg69HSMjsC.BAwiRPXqUI3RVh vh2,

            [2] bool flag1)

      L_0000: br L_0007

      L_0005: pop

      L_0006: ldc.i4.0

      L_0007: nop

      L_0008: ldarg.2

      L_0009: ldnull

      L_000a: ceq

      L_000c: ldc.i4.0

         dreaman分析,reflector之类的反编译软件以堆栈作为解码依据,大意是每句指令开始与结束必须椎栈为空,且语句执行过程中不能出现椎栈的underflow。(overflow一般不大可能出现。)所以,L_0005处的pop在椎栈为空时进行出栈操作,尽管这两句不会运行,但reflector仍然报错。

         这种流程混淆是最原始的了,更高级的混淆及相应分析见dreaman的文章。

         Phx rdx有自动优化功能,运用这个功能,参照phxsample源代码,写了个最简单的工具replace.exe。(源码请参考phx rdk中的addnoptoolsample源码)。

         运行后输入:replace input.exe output.exe

再用reflector打开output.exe,反编译同一个方法:

 

         已经成功解码成C#了。切换成il可以看到,前4行语句已经被编译器的优化去除了:

.method family hidebysig virtual instance bg69HSMjsC.BAwiRPXqUI3RVh GenerateSearchBase(int32, object) cil managed

{

      .maxstack 2

      .locals init (

            [0] bg69HSMjsC.BAwiRPXqUI3RVh vh1,

            [1] bg69HSMjsC.BAwiRPXqUI3RVh vh2,

            [2] bool flag1)

      L_0000: nop

      L_0001: ldarg.2

      L_0002: ldnull

      L_0003: ceq   

 

         Phoenix RDK的功能太强大了,已经有人利用phx写出了混淆器等。有兴趣的研究的一起来学习下。(附件传不上来,去这里下载:http://bbs.pediy.com/showthread.php?s=&threadid=37572

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值