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

[原创]Phoenix RDK的妙用

2007-1-7 14:14
11631
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楼)

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

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

---------------------------
Microsoft Internet Explorer
---------------------------
你输入的信息太短,至少为5个字.
---------------------------
确定   
---------------------------
雪    币: 1325
活跃值: (492)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
dreaman 11 2007-1-7 21:57
6
0
汗了,怎么附件里只有dll,bat没有exe文件?
雪    币: 1325
活跃值: (492)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
dreaman 11 2007-1-7 22:11
7
0
replace.exe
上传的附件:
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
hawking 12 2007-1-7 22:56
8
0
顶就一个字
雪    币: 172
活跃值: (137)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9494 2007-1-9 08:53
9
0
学习学习
雪    币: 337
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
nbw 24 2007-1-9 10:20
10
0
支持!
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2007-1-9 16:48
11
0
附件是DRT小组的产品?
雪    币: 110
活跃值: (1225)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cd37ycs 2007-1-9 17:04
12
0
能否放个rdk包上来,微软的下载实在太困难了。
雪    币: 5276
活跃值: (406)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
tankaiha 29 2007-1-9 19:25
13
0
我现在是拨号,上传基本不现实

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