首页
社区
课程
招聘
[原创]新人报到+发布一个反混淆的小工具给大家做见面礼!
2007-1-1 03:21 45739

[原创]新人报到+发布一个反混淆的小工具给大家做见面礼!

2007-1-1 03:21
45739
大家好,仰慕看雪论坛大名已久,终于有机会亲身加入进来。我是Fat32,由于论坛不许使用这样的用户名,所以暂用widesoft。我的水平在编程、破解等领域都属于入门阶段,今后还请各位多多关照!
最近搞定了一个C#编写的整站程序,学到了很多新知识,在这里把整个过程分享给大家,并献上一款自制的小工具,作为见面礼。

前几天一个做私服的朋友让我研究一下某个私服整站系统,这个系统用来实现游戏的部分功能及部分管理游戏的功能。 如果不注册,则会在客户访问此网站时弹出广告,而且后台部分功能不可使用。 注册码是一个奇怪的字符串,类似“4FPwkOcQ399MfEvlymnozDQTvOxT2YzC8+lbSwxLJGqrwTDxidG73scKJhVwl2FlYI+9KyUoqDI=”。在后台的一个专门页面输入。购买正版注册码时要提供网站使用的域名。而且注册码有有效期。比如可以只注册三个月。 看起来网站系统不能按普通程序的套路来破解。
首先让我想到的是查看网页源代码,结果一无所获。发现页面后缀都是.aspx。所以到网上找来了有关资料。了解此网站为.net架构,C#语言编写,主要代码都编译到一个DLL中,几经周折在网站BIN目录下找到这个主DLL,看来这个DLL就是破解的目标。
首先用PEID查壳,显示“Microsoft Visual C# / Basic .NET”。看起来没有壳,心中暗喜(结果从此掉进.net深渊) 。随后用W32DASM载入分析,一无所获。又用OD加载分析,仍然一无所获。跑到朋友服务器上用OD跟踪调用DLL的进程w3p.exe,至到头晕眼花仍无结果。一气之下恶补了两天.net知识。明白了.net的基本运作模式,明白了什么是MSIL(.net里的汇编)。
对.net知识了解了一些以后,找来Reflector、C#、XenoFox 等.net逆向工具进行研究。最后终于借助Reflector+File插件把 那网站的DLL反编译成了代码。本以为很难搞的.net,居然用个工具就能反编译出极接近原代码的代码。但经仔细分析后发现,原文件中几乎所有的类名、方法名都是类似‘49691e44a7a6b9b4’这样又长又不符合命名规范的字符串。 用VS7建立了新的项目文件并编译了一下,果然,出现5000多个错误。进一步查看原文件,发现字符串全是\u3e4b这种形式表示的。查资料得知是JAVA形式的Unicode表示方法。找来格式转换器,转换后的文本都是乱码。 真是让人郁闷。
仔细研究代码发现,所有\u字符串都是和一个整数一起当作参数传递给了一个类的方法。找到这个方法的原代码,却只有一行“//Decomplile err”。反编译错误。又找来其他几款类似工具都是同样结果。这时想到了 IL,找来反编译工具ildasm, 把网站DLL反编译成IL文件。找出加密字符串用的方法的IL代码。对照IL指令表(文末附),分析了一下加密算法:

public static string cc381ffa3ede662f(string e4115acdf4fbfccc, int 211566702b710682)
{
    locals:
        V0: char[]
        V1: int

    ldarg.0    //加载参数0 到堆栈
    br.s       label_2

label_3:
    ldloc.0        // V0 入栈
    ldloc.1        // V1 入栈
    ldloc.0        // V0 入栈
    ldloc.1        // V1 入栈
    ldelem.u2  //将位于指定V1 处的 unsigned int16 类型的元素作为 int32 加载到计算堆栈的顶部。
    ldarg.1        //参数 1 入栈
    sub
    conv.u2        //将位于计算堆栈顶部的值转换为 unsigned int16,然后将其扩展为 int32。
    stelem.i2  //用计算堆栈上的 int16 值替换给定索引处的数组元素。
    ldarg.1    //加载参数1到堆栈
    ldc.i4     1789   //整形入栈
    add                //add two values, returning a new value
    starg.s    1  //   -------------------------------------------------   参数1 +1789
    ldloc.1    //V1入栈
    ldc.i4.1        //将整数值 1 作为 int32 推送到计算堆栈上
    add
    stloc.1        //出栈到V1 -----------------------------------------------  V1++
label_4:
    ldloc.1        // V1 入栈
    ldloc.0        // V0 入栈
    ldlen         //将从零开始的、一维数组的元素的数目推送到计算堆栈上。
    conv.i4        //堆栈顶部的值转成 int32       
    blt.s       label_3   ---------------------- //循环判断,V1是否达到ARRAY元素数量,则将控制转移到label_3     
    ldloc.0        //参数0 入栈
    newobj     String..ctor(char[])        //create a new object
    ret

label_2:
    callvirt   char[] String.ToCharArray()    //调用
    stloc.0        //出栈到  V0
    ldc.i4.0        //推 0 入栈
    stloc.1        //出栈 到 V1     //把参数传给 本地变量 ,int变量为0
    br.s       label_4
}

算法清楚以后,用VC模拟解密过程写了一个简单的解密工具。便开始一行一行解密字符串。怎奈工程巨大,整个DLL中有几千个字符串被加密。一行一行解密会累死人的。这时一个问题出现在脑海--作者加密的时候是怎样做的?便到网上找相关资料。 这次了解了一些.net加密技术,了解了混淆的概念。但与反混淆相关的内容实在太少,只在MSDN上找到一个使用Reflection调用程序集中已有方法的文章。便模仿DLL反编译出的代码,尝试使用C#编程,历时几天时间写出了针对IL文件的字符串反混淆器(文末附)。

程序中的字符串变成了明文,很容易就找到了生成弹窗代码的函数,在IL里把函数体的第一行改为 ret ,使函数失效。
分析代码使得分析注册码算法很容易。 此网站系统的注册码为一个加密的BASE64字符串。 解密后内容 类似 “www.sohu.com        A        2006-12-2 0:00:00        2008-1-1 2:28:24        A” 这样。 一个字符串被4个制表符分成5部分,第一部分是网站域名,两个A是用户级别,日期是注册时间范围。
经过这近半个月的研究,使我迈进了 .net 的大门。C#的 易学易用性、灵活性、和极高的开发效率令我惊叹!据CSDN上一些权威人士讲,不久的将来微软将全面淘汰win32api这种平面的编程接口,取代之的是.net类库这种全面立体化的编程平台。(让windows由虚拟机支持.net变为原生支持.net?)。而且.net的语言无关性(用公共运行库几乎统一了编程语言),平台无关性(windows mobile也出来了,JAVA迟早要倒掉)。使得WINDOWS阵营越来越强大。我们不得不紧跟时代的步伐,积极接受新生事物。在此也建议看雪能开一个专门的 .net逆向/破解版块。让更多的人加入.net的队伍。

附上几款.net下常用的工具(点击下载):
ILASM和ILDASM(基本的.net程序反编译工具)
reflector(使用最多的.net逆向软件,我个人感觉一般)
Xenocode Fox 2007破解版(功能比Reflector强大很多,但是要求.net2.0而且只能生成VS2005的工程文件)
spices(反编译出的代码可以直接显示中文,可惜没有找到破解版,谁有给发一份,先谢了)
Dis# (类似工具里最强大的,其反混淆功能及其耀眼,可惜也没找到破解版)
IL文件字符串反混淆工具 (针对XenoCode的字符串混淆,我的第一个.net程序,请大家少耻笑多指教)
MSIL指令对照表,发帖的是时候忘了,现在补上

我的QQ是 26168857,希望能在这里结识更多的朋友能一起学习、进步,如有团结上进的团体不嫌弃小弟才疏学浅,我愿诚心加入。最后祝大家在新的一年里万事如意、心想事成~! 向所有读到这里的朋友们致敬!!!

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

收藏
点赞7
打赏
分享
最新回复 (87)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ossurrond 2007-1-1 09:02
2
0
好东西,当然要学习一下了。
雪    币: 5276
活跃值: (406)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
tankaiha 29 2007-1-1 10:06
3
0
呵呵,不错的小东东。
雪    币: 299
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
clide2000 7 2007-1-1 10:34
4
0
收藏学习中
雪    币: 267
活跃值: (44)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
hrbx 8 2007-1-1 11:05
5
0
学习,谢谢分享!
雪    币: 260
活跃值: (81)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
萝卜 1 2007-1-1 11:24
6
0
三点钟还在论坛,不管怎么样也要支持一下你
雪    币: 89
活跃值: (151)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sjclch 2007-1-1 11:32
7
0
支持第一,,,猛人呀
雪    币: 1325
活跃值: (492)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
dreaman 11 2007-1-1 11:51
8
0
支持。
雪    币: 234
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
inraining 2 2007-1-1 11:52
9
0
呵呵,Dotnet的文章,支持
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
KuNgBiM 66 2007-1-1 18:57
10
0
谢谢
雪    币: 29412
活跃值: (18675)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 8 2007-1-1 20:20
11
0
2007年的第一篇精华,呵~
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
py8148 2007-1-2 07:57
12
0
好文章,感谢分享
雪    币: 324
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wan 2007-1-2 08:59
13
0
东东呢?没看到下载的
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
快雪时晴 4 2007-1-2 17:08
14
0
dotNET工具合集了,谢谢提供
雪    币: 340
活跃值: (897)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
noword_forever 5 2007-1-3 01:04
15
0
.net是不错,就是太慢。
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ymzzszg 2007-1-3 07:21
16
0
谢谢分享,收藏了
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dryhtr 2007-1-3 09:47
17
0
谢谢分享!
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
binbinbin 28 2007-1-3 10:07
18
0
不错,新年就收到好工具。
工欲善其事,必先利其器。
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qisl 2007-1-3 18:22
19
0
ConsoleApplication3.exe应用程序正常初始化(0xc0000135)失败。
雪    币: 203
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wxbww 2007-1-3 21:16
20
0
一看就知道有水平!
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qisl 2007-1-4 08:35
21
0
ConsoleApplication3.exe必须安装了VS2005后才能用啊!新手不好意思!呵呵
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
WisdomZh 2007-1-4 16:47
22
0
由破解学 dotNet, 佩服!!!
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
成玺 2007-1-13 22:05
23
0
呵呵~~来迟了,抢先!!
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
破浪 2007-1-14 14:01
24
0
好文章,感谢分享
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
phenx 2007-1-15 19:34
25
0
好功夫呀,我等只有佩服得份了
游客
登录 | 注册 方可回帖
返回