浅谈c#.net程序的破解
本帖最后由 Leo 于 2014-10-4 22:01 编辑第一次逆向c#的软件,好多工具不会使,废了半天劲,总算是成功了{:6_143:}
废话不多说直接切入主题,由于.net程序的特殊性,无法使用OD逆向等常用逆向工具
先来看下这个联网验证的FZ程序,今天就破掉它的登陆
程序打开后弹窗提示输入Key,输入假码后验证失败并不断弹验证窗并提示失败
ok,今天要介绍的第一款软件叫做reflector,专门用来反编译.net程序得到源码的,我们把程序载入
resources目录可以暂不关心,我们展开exe,如下
没有加壳,可以看到解析出来程序的很多类和函数,随便选中一个,
注意右侧窗口// This item is obfuscated and can not be translated.
这个意思是代码被混淆了,看不到,怎么办{:6_165:}
接下来就要用到另一个工具,de4dot,这个强大的东东有两个主要功能
1.可以脱掉绝大部分.net程序的壳 2.可以反混淆绝大部分.net程序
那我们来试一试,ok,生成了一个-cleaned后缀的exe文件
把生成的文件拖入reflector试试看代码反混淆成功了没
完整的c#代码已经被我们搞出来了,胜利50%~
剩下的工作就是在代码中找啊找,找到我们要破掉的登陆,c#代码比较简单,这个工作量不大
找到了,这一段就是登陆,我们找到关键地方的代码修改掉,注意c#代码并不能直接修改,我们要修改的是il代码
il是什么玩意儿,就是微软为.net衍生出来的一种中间语言,和汇编类似
我们简单修改一下试试,把成功的判断跳转改掉
再保存一个新的exe试一试,还是输入刚才的假码
输入假码后,看看这回是不是不再弹验证了,它已经开始检测游戏窗口了,不过我没有这个游戏哈哈
由于刚才只修改了一行if判断,所以大家可以看到还有一些问题,比如仍然输出了key无效的log信息,
这就是后面一点点修复的细活了,不再赘述,这里只谈一谈.net程序逆向的思路和方法,大神们莫喷 不错,大牛作品,必须精品{:6_145:}
我表示看起来顶晕,继续努力! 说实话,我对这个NET程序逆向一直不是太了解,代码能看懂,也知道修改那里,但是不能达到逆向。
尤其是de4dot这个插件,为什么要那么改,他代表了什么?Leo给讲讲。
比如我想把某个语句NOP掉或者把 == 该成 !=该怎么操作?
....直接看不懂。这个NET的程序 Shark恒 发表于 2014-10-4 23:07
说实话,我对这个NET程序逆向一直不是太了解,代码能看懂,也知道修改那里,但是不能达到逆向。
尤其是de4 ...
恒大,de4dot是脱壳和去混淆的工具,具体翻译代码的工具是reflector,但是reflector也有个弊端,就是只能阅读代码,不能修改,所以需要给它加载一个插件叫reflexil,通过这个插件可以对代码进行修改,但是也不能修改原始的c#代码,只能修改编译后的IL代码,我是查找了IL指令集参考修改,
这个就是在reflector工具中通过reflexil插件查看到的对应IL代码,callvirt就是调用一个虚函数,比如nop就是右键点删除它,
跳转的指令是leave.s这个,brtrue.s就是if (bool_true)的处理,brfalse.s就是if (bool_false),
比如 if (!nullable.HasValue || !nullable.Value) 这句if,就对应上图那几条语句,如果满足为真,就跳的第20行语句,不为真就向下执行,==和!=就把这句改掉就好,大概就是这些,其他的指令也不熟了
也有其他的一些il代码编辑工具,但是应该没有这个方便 Leo 发表于 2014-10-4 15:33
也有其他的一些il代码编辑工具,但是应该没有这个方便
对,就是reflexil不知道怎么用……刚才说错了。你说的那个IL指令集参数在哪儿能找到? Shark恒 发表于 2014-10-4 23:57
对,就是reflexil不知道怎么用……刚才说错了。你说的那个IL指令集参数在哪儿能找到?
我找一找,一会传到论坛上来吧,那几个工具我也打包传上来 Leo 发表于 2014-10-4 16:00
我找一找,一会传到论坛上来吧,那几个工具我也打包传上来
好,太好了,学习了~ 对于NET怎么修改,我始终没有时间研究,今天开眼了。{:6_135:}