| 静态分析 破解Spices.net v5.1--试谈.net程序的破解 |
| 作者:佚名 来源:不详 发布时间:2008-1-26 1:01:12 |
减小字体
增大字体
|
【文章标题】: 静态分析+代码片断+十六进制编辑 破解Spices.net v5.1 --- 试谈.net程序的破解 【文章作者】: dreaman 【作者邮箱】: dreaman_163@163.com 【作者主页】: http://dreaman.haolinju.net 【软件名称】: Spices.net v5.1 【软件大小】: 6788KB 【下载地址】: http://www.9rays.net/download.aspx 【加壳方式】: 无 【保护方式】: 无 【编写语言】: 未知 【使用工具】: reflector,research.net,dis#,SnippetCompiler,ildasm,ultraedit,hexworkshop等 【操作平台】: winxp , .net 2.0 【软件介绍】: .net 程序反编译、.net PE结构观察、assembly校验及混淆的工具。 【作者声明】: 基于不太多的破解经验总结,错误之处在所难免,欢迎讨论。
本文主要谈以静态分析为主的破解,并试图探讨以静态分析为主的破解模式,我们主要针对纯CLR程序,也 就是程序中不含native指令的.net程序,这样的程序通常用C#或C++/CLI的pure clr编译选项生成。 特别的,我们主要从没有加壳的程序说起,如果是加壳的.net程序,则首先需要脱壳,近期DRT小组的rick 在.net MaxtoCode壳方面已经取得突破。从原理上说,.net程序因为要支持reflection与JIT编译,其关键 部分“元数据与IL代码”都是可以取得或重建的,也就是说脱壳几乎总是可能的,应只在难度高低之分。当 然,如果将来有一种壳自己实现完整的JIT功能甚至CLR,上面的说法就无效了,不过这样一来,是否仍是 .net平台则需要怀疑了。
一、基本思路 1、现在大多数.net程序都是加了强名的,这样一来,我们没法直接修改程序了,所以我们的第一步便是解除强 名。本来也有工具可以直接去除文件的强名,不过现在许多.net程序将强名与它的加解密结合起来,直接去除 有时会倒致许多麻烦,spices.net 5019的keygen里提供了一个比较好的办法,就是自己重新生成一个新的强 名,用新的强名的KEY与TOKEN替换原来文件中的强名的KEY与TOKEN,然后再用sn.exe强制为原文件签名。有了强名 替换与重新签名后,我们就可以根据需要修改原文件了,只需要在修改完重新签上新的强名就OK了。
2、一般的.net程序通常会利用混淆软件将名称搞成不可见字符或是一长串不好记的字符,分析起来十分不便, 我们的第二步就是反混淆,这里使用我自己写的一个小工具,因为现在只有dis#的反混淆比较好用,但它不能同时 对一组assembly反混淆,而且它的反混淆是在反编译时进行的,反过后的代码不容易对应到原程序的方法(比如我们 要用ildasm打开原程序,想找到dis#反混淆后的某个方法,会非常困难),我们自己的小工具是直接对原二进制文件 进行修改,这样修改后的文件可以由多个工具使用,确保了多个工具间名称的对应。(这个工具会生成新的section ,将.net元数据搬到新的section中再补上反出来的名称,这样我们通常将反混淆后的文件放在一个新的地方进行分析 ,实际打补丁则直接在未反混淆的文件上进行,分析的方法与原文件方法的对应可以通过方法表的token来对应或者通过 方法体中的特征字符串进行)。
3、文件的强名改变后,文件中与强名相关的加密解密的数据也需要作相应处理,比如原来有一段数据用旧的强名 加密的,则我们需要将原数据解密再用新的强名加密替换原来的数据,这是一项比较烦的工作。首先我们通过分析找到 这样的地方,查找的主要方法是用reflector.exe的analyzer,通过查找对AssemblyName.GetPublicKey与AssemblyName. GetPublicKeyToken的引用来定位使用强名称的代码。
4、经历上面这些过程后,我们终于可以开始我们真正的破解了,相对来说,这部分倒似乎更简单一些,呵呵,对 我们这次的目标Spices.net来说,主要就是去掉它的功能限制,因为是evaluation版本,没有写注册机的必要了。我们 对反混淆的文件进行分析找出这些限制的地方,然后用ildasm反编译原始程序,找到对应的IL代码,然后用二进制查找 与替换功能将原始程序的字节码改成我们修改后的代码。
5、完成所有的修改后,用我们1中准备好的强名称文件重新对所有修改过的文件签名,之后便可以运行看看成果了 :)
二、工具集 破解.net程序对工具的依赖明显比win32程序要严重,这里列出一些(后面有用到,汗!): 1、reflector.exe 这个反编译工具是不可不备了,免费+强大,特别是analyzer功能,简直是神了!!!
2、research.net 查看.net元数据信息的工具,许多时候得用它辅助对应反混淆后与反混淆前的程序。
3、dis# 反编译并且能保存为文件,这一点比较好,破解.net程序差不多总是要从原程序里抽一些代码片断作计算了。
4、SnippetCompiler C#代码片断编译运行工具,从原程序里抽出代码来临时运行一下,总是用vs.net还要建工程就不爽了。
5、ildasm 低级但是强大的工具,到修改原程序之前,参照它的结果应该是必须的,至少总是要看一下IL字节码吧。
6、ultraedit 文本编辑器,在一般文本与十六进制间来回倒腾,或者是要搜索文本内容时,这个还是比较方便一些的。
7、hexworkshop 别的不说了,就感觉最爽的功能是对原文件进行二进制替换时,Select Block=>Paste Special,就这两步,恰到好处。 (winhex也有类似功能,不过感觉还是hexworkshop更顺手一些,呵呵)
三、破解过程 1、去强名,这个直接用原来5019的keygen的方法,包括它生成的强名文件,呵呵。
/SC 0024000004800000940000000602000000240000525341310004000001000100f9525ef4fb72db4053790103572ec74a576bfe4aa024ed19b78356c93193b1e0dbbe9cb01e1f4fa5c5b181a83e83e25b8261717bf4dbcecc3ad453a4a71ac72f3e102403ed2d2ed01fcc71802f2ee4527825aedc31eb91c0abe100d5eacac664486d4f422f5e2d73fb30ed326c49ccb54dc2568900f1c32b27739822876658b8 002400000480000094000000060200000024000052534131000400000100010067790bbf0dee12b24b2bc6feb5e9e5dfbfaeea35efa57bb4f3b6c017329dba78a14e7d03b95a8b790f190f258f2423b577bb9a1d053529e7c93b252d75cb3f9be7710f44c6c48f441aa7348df218fb3390f55e5d50eb7a7cab35a2c9ad5bf8694d887f560e3289c560f3b290c239046332a3178b7886a19b117814cc24bbd6b9 /UC 0024000004800000940000000602000000240000525341310004000001000100f9525ef4fb72db4053790103572ec74a576bfe4aa024ed19b78356c93193b1e0dbbe9cb01e1f4fa5c5b181a83e83e25b8261717bf4dbcecc3ad453a4a71ac72f3e102403ed2d2ed01fcc71802f2ee4527825aedc31eb91c0abe100d5eacac664486d4f422f5e2d73fb30ed326c49ccb54dc2568900f1c32b27739822876658b8 002400000480000094000000060200000024000052534131000400000100010067790bbf0dee12b24b2bc6feb5e9e5dfbfaeea35efa57bb4f3b6c017329dba78a14e7d03b95a8b790f190f258f2423b577bb9a1d053529e7c93b252d75cb3f9be7710f44c6c48f441aa7348df218fb3390f55e5d50eb7a7cab35a2c9ad5bf8694d887f560e3289c560f3b290c239046332a3178b7886a19b117814cc24bbd6b9 /B 0024000004800000940000000602000000240000525341310004000001000100f9525ef4fb72db4053790103572ec74a576bfe4aa024ed19b78356c93193b1e0dbbe9cb01e1f4fa5c5b181a83e83e25b8261717bf4dbcecc3ad453a4a71ac72f3e102403ed2d2ed01fcc71802f2ee4527825aedc31eb91c0abe100d5eacac664486d4f422f5e2d73fb30ed326c49ccb54dc2568900f1c32b27739822876658b8 002400000480000094000000060200000024000052534131000400000100010067790bbf0dee12b24b2bc6feb5e9e5dfbfaeea35efa57bb4f3b6c017329dba78a14e7d03b95a8b790f190f258f2423b577bb9a1d053529e7c93b252d75cb3f9be7710f44c6c48f441aa7348df218fb3390f55e5d50eb7a7cab35a2c9ad5bf8694d887f560e3289c560f3b290c239046332a3178b7886a19b117814cc24bbd6b9 /SC 59d4bed864488801 19d207f78a3e6d0f /UC 59d4bed864488801 19d207f78a3e6d0f /B 59d4bed864488801 19d207f78a3e6d0f |
这 [1] [2] [3] 下一页
|
|
[]
[返回上一页]
[打 印]
|
|
|