首页
社区
课程
招聘
[原创]Phoenix RDK的妙用
发表于: 2007-1-7 14:14 12197

[原创]Phoenix RDK的妙用

2007-1-7 14:14
12197

Phoenix RDK的妙用

        什么是RDK。RDK是Research Development Kit的缩写,可以理解成未正式发布的SDK。Phoenix 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有自动优化功能,运用这个功能,参照phx的sample源代码,写了个最简单的工具replace.exe。(源码请参考phx rdk中的addnoptool的sample源码)。
        运行后输入: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写出了混淆器等。有兴趣研究的一起来学习吧。(附件见2、3、7楼)


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (12)
雪    币: 234
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
使用方法:replace input.exe output.exe
上传的附件:
2007-1-7 14:24
0
雪    币: 234
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
附件2,解压后放到一个目录.
上传的附件:
2007-1-7 15:10
0
雪    币: 288
活跃值: (112)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
4
顶,呵呵...
2007-1-7 16:52
0
雪    币: 1316
活跃值: (512)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
5
学习一下

---------------------------
Microsoft Internet Explorer
---------------------------
你输入的信息太短,至少为5个字.
---------------------------
确定   
---------------------------
2007-1-7 21:47
0
雪    币: 1316
活跃值: (512)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
6
汗了,怎么附件里只有dll,bat没有exe文件?
2007-1-7 21:57
0
雪    币: 1316
活跃值: (512)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
7
replace.exe
上传的附件:
2007-1-7 22:11
0
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
8
顶就一个字
2007-1-7 22:56
0
雪    币: 172
活跃值: (212)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习学习
2007-1-9 08:53
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
10
支持!
2007-1-9 10:20
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
11
附件是DRT小组的产品?
2007-1-9 16:48
0
雪    币: 198
活跃值: (1575)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
能否放个rdk包上来,微软的下载实在太困难了。
2007-1-9 17:04
0
雪    币: 5275
活跃值: (451)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
13
我现在是拨号,上传基本不现实

这个rdk还不完善,有时生成的exe会出错,已经向微软咨询了。
2007-1-9 19:25
0
游客
登录 | 注册 方可回帖
返回
//