首页
社区
课程
招聘
[原创].NET Reactor分析(适合.net新手实战入门)
2007-8-18 10:03 29971

[原创].NET Reactor分析(适合.net新手实战入门)

2007-8-18 10:03
29971
既然目前很多同学对.net的认识还停留在reflector+ildasm+ilasm通知的阶段,干脆,我再写一篇入门的,让大家都能看明白,动起手来也很简单。
     .NET Reactor是EZIRIZ公司出品的一款.net保护软件,该软件保护.net软件的功能不错,可惜对自己的保护却是很弱。前几个版本的混淆强度挺大,很难定位关键代码,可最新的3.3.0.1版保护就太弱了。MegaX已经发布了它的破解,和他交流过程中发现思路我俩的思路有小差别,在此写出来。本文难度较低,适合初学.net的进行实战入门。
    用CFF Explorer载入reactor的主程序,发现没有元数据,是个win32程序。通常来说这种.net程序是被加壳了。Reactor属于whole assembly保护,最大的弱点是完整程序集在内存中出现,脱壳的方法也很简单,用NET Unpacker直接脱既可。脱壳后可发现15个程序集(如图1),其中一个已经显出了reactor的图标,那便是该程序的真身。(注:现在已经有好几种加密壳无法使用NET Unpacker直接脱了,强度比整体保护大很多。)

图1  用NET Unpacker对整体保护的程序进行脱壳

    用Reflector载入dump出的文件,发现其名称混淆形式如图2所示。真不知道EZIRIZ怎么想的,竟然混淆成这么短,且又好读又好记的名称。前几版的名称比该版本麻烦多了。

图2  很简单的名称混淆

    下面看下流程混淆的形式,与前几个版本一样,使用一个跳转,中间加杂使堆栈溢出的指令,且每个方法的开头都是这三句:
L_0000: br L_0007
L_0005: pop 
L_0006: ldc.i4.0 
L_0007: nop 
 


    反流程混淆的两种方法:一,用ildasm反编译成il,在EditPlus中搜索前三句指令,并替换为空,如图3所示。

图3  在EditPlus搜索流程混淆指令并替换

    第二种方法,使用我很久以前发的流程混淆小工具replace,尤其对.net reactor这个软件,效果及好。
    反流程混淆完成后,便可以用C#代码浏览了。所有的敏感代码都在入口方法中,爆破的方法很简单,添加一句将flag变量设为真的指令就行了,如下(不敢想像,居然没有校验):
[STAThread]
public static void uN(string[] A_0)
{
    int num;
    RSACryptoServiceProvider.UseMachineKeyStore = true;
    bool flag = Gz();
    flag = true;//添加的指令
    111 = flag;
    if (!flag)
    {
        110 = M0();
        flag = false;
    }
    HTt.HCw = flag;
    1LY.1LB(flag);

    有兴趣的同学可以跟出它对注册文件的判断。早期版本我跟过,后来它改进了。有两种扩展名,.v3lic和.license,应该也不难。
    就到这,这个软件就这么简单,没什么好多说的。对.net有兴趣的同学可以进行实战的入门训练了。

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

上传的附件:
  • 1.JPG (59.31kb,2226次下载)
  • 2.JPG (24.19kb,2199次下载)
  • 3.JPG (102.17kb,2207次下载)
收藏
点赞7
打赏
分享
最新回复 (21)
雪    币: 2576
活跃值: (437)
能力值: ( LV2,RANK:85 )
在线值:
发帖
回帖
粉丝
wyfe 2007-8-18 10:58
2
0
.net这块好像很有意思
雪    币: 716
活跃值: (162)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
elance 6 2007-8-18 11:16
3
0
.net是趋势啊
雪    币: 296
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XiaosanAiq 2007-8-18 19:24
4
0
转战.net。。。学习。。
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
yingyue 2007-8-19 00:12
5
0
如果 OD 2.0 带有调试 .net 的功能就好了
雪    币: 144
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
卡秋莎 2007-8-19 12:07
6
0
在黑防看看到你的大作了,原来是组长啊 哈哈 学习了
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
快雪时晴 4 2007-8-19 13:51
7
0
Tank的.net文章篇篇精彩,在看雪众生中奇葩一朵
雪    币: 245
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
glucose 1 2007-8-19 22:16
8
0
这个dump成il语言后带了一堆资源文件,如果要编译回去,那些资源文件也要加,超麻烦,有没有简单的方法?
雪    币: 5276
活跃值: (406)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
tankaiha 29 2007-8-20 09:15
9
0
编译回去只需要加一个资源,/resource=xxxx.res,其余的自动打包
雪    币: 245
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
glucose 1 2007-8-20 09:35
10
0
3ks
另外,这个也可以用那个upacker of .Net Reactor 脱壳.
雪    币: 208
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
redacker 2007-8-22 16:35
11
0
对那个流程混淆replace感兴趣,说下原理?
雪    币: 5276
活跃值: (406)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
tankaiha 29 2007-8-23 14:25
12
0
N久前提过,运用编译器的自动优化,正在考虑添加针对其它流程混淆形式的反混淆
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
美丽人生 2007-8-23 17:59
13
0
C:\Program Files\Eziriz\.NET Reactor\ILCODE\Main.il(7062) : error : syntax erro
at token ''$$method0x60003bc-1'' in:   .field static assembly /* UNKNOWN TYPE
0x15)*/ '$$method0x60003bc-1'

***** FAILURE *****
ilasm 编译的时候 错了。
雪    币: 5276
活跃值: (406)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
tankaiha 29 2007-8-23 19:56
14
0
楼上的先脱壳了没?
btw:最新的3.3.1.1保护强度有所增加,不过所遇到的保护手段以前在坛里都提过,有兴趣的试试
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
美丽人生 2007-8-24 10:11
15
0
1.按你提供的方法,脱壳15个文件
2007-08-23  16:50            20,480 Unpacked_1.dll
2007-08-23  16:50             6,656 Unpacked_10.dll
2007-08-23  16:50             6,656 Unpacked_11.dll
2007-08-23  16:50             6,656 Unpacked_12.dll
2007-08-23  16:50            16,384 Unpacked_13.dll
2007-08-23  16:50             4,096 Unpacked_14.dll
2007-08-23  16:50             4,096 Unpacked_15.dll
2007-08-23  16:50             6,656 Unpacked_2.dll
2007-08-23  16:50             6,656 Unpacked_3.dll
2007-08-23  16:50             6,656 Unpacked_4.dll
2007-08-23  16:50            16,384 Unpacked_5.dll
2007-08-23  16:50             4,096 Unpacked_6.dll
2007-08-23  16:50             4,096 Unpacked_7.dll
2007-08-23  16:50         3,419,136 Unpacked_8.exe
2007-08-23  16:50            20,480 Unpacked_9.dll

2.然后用ildasm2.0 修改版载入Unpacket_8.exe


Dump 出的il文件头
// Microsoft (R) .NET Framework IL Disassembler. Version 2.0.50727.42
// Copyright (c) Microsoft Corporation. All rights reserved.

// Metadata version: v2.0.50727


3.没有修改IL文件,直接用Ilasm编译回去
C:\Program Files\Microsoft Visual Studio 8\VC>ilasm "C:\Program Files\Eziriz\.NE
T Reactor\ILCODE\Eziriz.il" /resource="C:\Program Files\Eziriz\.NET Reactor\ILCO
DE\Eziriz.res"

中间代码省略
Method Implementations (total): 73
Resolving local member refs: 0 -> 0 defs, 0 refs, 0 unresolved
Writing PE file
Operation completed successfully


运行一下编译的Eziriz.exe,报错:
描述:
  Stopped working

问题签名:
  问题事件名称:	APPCRASH
  Application Name:	Eziriz.exe
  Application Version:	3.3.0.1
  Application Timestamp:	46ce399c
  Fault Module Name:	KERNEL32.dll
  Fault Module Version:	6.0.6000.16386
  Fault Module Timestamp:	4549bd80
  Exception Code:	e0434f4d
  Exception Offset:	0001b09e
  OS 版本:	6.0.6000.2.0.0.256.1
  区域设置 ID:	2052

阅读隐私声明:
  http://go.microsoft.com/fwlink/?linkid=50163&clcid=0x0804


4.重新生成一次IL,册除所有的
 IL_0000:  br         IL_0007

    IL_0005:  pop
    IL_0006:  ldc.i4.0
    IL_0007:  nop
 
5.ilasm回去,此时用fox载入已可以看到多数方法,但还有cctor是看不到。


6.COPY到程序目录运行出错
描述:
  Stopped working

问题签名:
  问题事件名称:	APPCRASH
  Application Name:	Eziriz.exe
  Application Version:	3.3.0.1
  Application Timestamp:	46ce3c1f
  Fault Module Name:	KERNEL32.dll
  Fault Module Version:	6.0.6000.16386
  Fault Module Timestamp:	4549bd80
  Exception Code:	e0434f4d
  Exception Offset:	0001b09e
  OS 版本:	6.0.6000.2.0.0.256.1
  区域设置 ID:	2052

阅读隐私声明:
  http://go.microsoft.com/fwlink/?linkid=50163&clcid=0x0804
 
雪    币: 334
活跃值: (17)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
likunkun 1 2007-8-24 13:21
16
0
有技术含量,学习了
雪    币: 5276
活跃值: (406)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
tankaiha 29 2007-8-27 21:03
17
0
美丽人生说的是哪个版本?
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nancyy 2007-8-28 13:39
18
0
Eziriz 加了"Necrobit" 选项之后还能够破解吗? 用 REziriz 脱壳后的程序出现异常,用reflector载入出现没有办法识辨method header,   有谁能够破解加了"Neocrobit" 之后的程序吗?
雪    币: 261
活跃值: (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tracky 2007-8-29 17:35
19
0
Neocrobit 好像是替换了方法头的前四个字节吧?
新版本的脱机已修复这个问题了
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
美丽人生 2007-9-9 15:47
20
0
美丽人生的问题解决了
那会儿太笨了,拿1.1 的编译回去了。谢谢!!
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
taitai欧 2008-1-16 14:54
21
0
现在.NET的也越来越多了,认真学习中
雪    币: 201
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zn88331122 2008-3-16 11:32
22
0
谢谢楼主太厉害了
游客
登录 | 注册 方可回帖
返回