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

[原创]Phoenix RDK的妙用

2007-1-7 14:14
12434

Phoenix RDK的妙用

        什么是RDK。RDK是Research Development Kit的缩写,可以理解成未正式发布的SDK。Phoenix RDK是微软的一个有关编译器的项目,官方网址4d5K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4u0W2M7$3g2S2M7X3y4Z5i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3M7r3S2G2k6h3&6A6P5q4)9J5c8W2!0q4x3#2)9^5x3q4)9^5x3W2!0q4y4#2)9&6y4q4!0n7x3g2!0q4y4q4!0n7b7g2)9^5c8g2!0q4y4W2)9&6y4W2)9^5y4#2!0q4y4W2!0m8x3g2!0m8x3#2!0q4y4g2!0n7c8g2)9^5z5q4!0q4y4g2!0n7x3q4)9&6x3g2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4q4!0n7z5g2)9&6c8W2!0q4y4W2!0n7x3W2!0m8x3g2!0q4y4W2)9&6b7#2)9^5z5g2!0q4y4q4!0n7b7W2)9^5x3q4!0q4y4q4!0n7z5g2)9^5z5s2c8#2N6r3!0J5K9h3q4D9i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1@1i4@1t1^5i4K6R3H3i4@1f1%4i4K6W2n7i4@1t1@1i4@1f1$3i4@1t1J5i4@1p5I4i4@1f1$3i4K6W2o6i4K6R3&6i4@1f1$3i4@1t1%4i4@1t1I4i4@1f1#2i4K6R3#2i4@1p5#2i4@1f1^5i4@1u0r3i4K6W2n7i4@1f1#2i4K6S2q4i4@1u0n7i4@1f1K6i4K6R3H3i4K6R3J5i4@1f1@1i4@1t1^5i4K6S2p5i4@1f1^5i4@1u0r3i4K6R3%4i4@1f1@1i4@1u0n7i4K6S2m8i4@1f1#2i4@1p5@1i4@1p5&6i4@1f1@1i4@1t1^5i4K6R3H3i4@1f1@1i4@1t1^5i4K6S2p5i4@1f1#2i4@1t1H3i4K6S2r3i4@1f1#2i4@1u0r3i4K6R3K6i4@1f1#2i4K6S2r3i4K6V1I4i4@1f1%4i4K6S2q4i4@1t1H3i4@1f1@1i4@1u0m8i4K6R3$3M7r3S2^5 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
活跃值: (517)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
5
学习一下

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

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