微软的.NET逆向步骤简论

微软的.NET以及MSIL语言出来好多年了,以前有从逆向的角度去分析过一些代码,但是逆向修改代码并且编译回去还是第一次做,下面是具体的逆向步骤(下面以DLL为例,.exe类同):


1. 使用ildasm.exe 工具来加载.NET开发的.DLL文件,加载后该工具将整个Meta信息分析得很清楚(譬如Namespace、类名、常量定义、函数定义等),在文件->转储,在接下来的框根据自己的需要勾选相关选项,建议选上“转储IL下面的所有选项”,这样在逆向后的代码阅读时很方便对号入座,转储后的文件分为2个:xx.res, xx.il文件。

附录:ildasm.exe在诸如如下的位置上: C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools.


2. 使用Red Gate Software公司生产的Reflector来反编译对应的.DLL文件,然后找到对应的代码去分析,一般没经过搅乱的代码是非常容易看懂的,几乎不用费多大的力气就可以找到你自己需要改动的地方,这一点比旧的汇编容易很多了,看来以前的专业cracker都要“失业”了,呵呵。

附录:http://shop.reflector.net/download     下载Reflector即可。

 

3. 修改:这点跟查看一下MSIL的specification就可以完成了,或者简易方法是直接代码对比看看就了解了,修改完了xx.il别忘了保存一下。


4.编译回去:
强命名方式:
回到文件头,把publickey删掉,因为我们已经修改过il了,所以原来的签名肯定是无效了,我们要重新签名.

特别注意:publickey去掉是应该去掉对应的DLL部分,其结构看起来形如:

微软的.NET逆向步骤简论_第1张图片

而不是形如:(这个是mscorlib的调用的publickey)

.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}


在cmd下输入
sn -q –k MySign.sgn  //产生自己的公钥和私钥
ilasm /dll /resource:dump.res /key:MySign.sgn dump.il /quiet                 (不带路径编译)
ilasm /dll /resource:C://Temp//xx.res C://Temp//xx.il /quiet                         (带路径编译)

弱命名方式:
直接编译:
ilasm /dll /resource:C://Temp//xx.res C://Temp//xx.il /quiet

具体的例子由于牵涉到软件的版权问题,在此不做发布,大家可以对照这个方法自己写个小的测试软件试试看。

附录:ilasm文件在诸如如下的地址当中:C:\Windows\Microsoft.NET\Framework\v4.0.30319

你可能感兴趣的:(微软的.NET逆向步骤简论)