Ruin 发表于 2012-6-15 00:18

新发现一个简单有效的.net程序破解方法(可破隐藏IL级别的保护) 转

做过程序破解的同学都知道,一般的破解分为静态和动态两种,对于动态的破解,大家比较常用ollydbg,其虽然非常强悍,但貌似对.net程序支持不是很好,呵呵也许是我使用不够熟练吧。

   对于.net程序,我们知道,它类似于Java,编译后只是编译成了一种中间码(IL),其高于汇编但低于高等语言如C#,Java之类。其运行时候需要一个运行时,然后在需要的时候才进行JIT,根据当前系统平台将IL转成汇编码。 普通的保护也就是做些混淆,加上强签名,再加上SuppressIldasmAttribute属性禁止Ildasm,相应的破解方法也比较简单,使用修改过的ildasm就可以将相应的IL导出来,然后修改IL代码,再使用ilasm将之编译回去,破解也就完成了。

    不过呢,目前也有一些比较好的.net程序保护工具可以将IL隐藏,如国内的Maxtocode。今天下午我就遇到了一个该类型的保护程序。我使用ildasm打开后查看到所有的方法内容IL都是下边这样:

.method public hidebysig static voidMethodName(class System.Windows.Forms.Control contrl,
                                              string text) cil managed noinlining
{
// 代码大小       4 (0x4)
.maxstack4
IL_0000:nop
IL_0001:nop
IL_0002:nop
IL_0003:ret
} // end of method CallCtrlWithThreadSafetyEx::SetText

这样的话即使将它们导出也无意义,即使我们使用反射动态的获取它们的IL,也会得到我上边的结果,显然这样的保护做的已经是非常好了。

    那么我们就没有办法了么? 正当我觉得山穷水尽的时候,突然想起来为什么不使用windbg呢。 我们知道任何的保护它都不应该破坏程序的正常逻辑和行为,那么.net的JIT机制是不是也应该还是有效呢?如果有效的话,那么我们是否可以通过windbg的!u addr命令来反编译得到代码呢,说干就干,我立刻挂上目标程序,果不其然,!dumpil得到的依然是上边说到的Il内容,但!U却能得到正确的完整的逻辑。

既然已经得到的汇编代码,那就好办了,使用windbg的ed命令修改一下关键的指令,立刻工作。哈哈,太完美了,下边我就将我的完整破解过程列出来,以防以后忘记。

本来准备将博客中的文章粘贴到这的,可发现粘贴过来后格式、图片全丢了,那详细步骤大家可以移步:http://www.xioxu.com/?p=326010
有朋友说上边地址访问不了,哈哈,没办法我的网站部署在GAE上边,常这样。所以我刚将文章转成了pdf格式,感兴趣的同学请---下载---。
存储在Box.net的 下载地址http://www.box.net/shared/cfx9vbxd7h

索马里的海贼 发表于 2012-6-15 00:21

玩net的都是大牛.

yjd333 发表于 2012-6-15 00:26

很不错,学习了。

曦云 发表于 2012-6-15 00:28

NET是很难搞

温柔 发表于 2012-6-16 19:38

虽然转的是很老的一个教程了,但是还是谢谢楼主,有心了!

邪神大人 发表于 2012-6-26 20:51

NET的文章还真不多

jerry828 发表于 2012-11-19 13:13

学习了,谢谢分享!

kantal 发表于 2012-11-20 18:22

.ET的文章还真不多,学习了,谢谢分享~~

sooaoo 发表于 2012-12-3 14:26

memory DUMP

xzcvvb 发表于 2013-1-1 21:12

脱壳后的dll可以用OD破解吗
页: [1] 2
查看完整版本: 新发现一个简单有效的.net程序破解方法(可破隐藏IL级别的保护) 转