坏事做尽--通过修改IL获取某资源文件

事情源于想获取某个非开源组件里面的某个资源文件的内容
该资源文件为一个二进制文件,通过某种方式解析出来之后将会是一行行的字符串
我就是想拿到这些字符串

目的很明确
开始准备工具 ildasm,ilasm,Xenocode Fox
该组件已经通过Xenocode 混淆过了,但是不代表不能看,只要细心分析还是能看出端倪。
通过Xenocode Fox 分析得到文件资源文件的内容通过解析之后被加载到
private  Dictionary<string,ushortl9Ej)T;  中,
用ildasm获得该组件的IL文件,把private  Dictionary<string,ushortl9Ej)T; 的private改为public

去掉文件的强名
去掉强名的方法相当简单,把.publickey 整个去掉就是了
之后该IL才可以通过ilasm还原为DLL文件

本以为这样就可以得到内容了
但是非常遗憾。。
不知道是我的问题还是 .NET命名的 问题。。。l9Ej)T 这样的名称居然不能出现,但是该DLL文件还是可以正常使用。。。  -_-!!!

既然这样不能得到该 类成员的访问权限的话。。那么换一种方式
为该类增加一个方法
嘿嘿。。邪恶的开始。。。

因为对IL不是很熟识,所以需要有参考代码。
首先自己写一个简单的C#代码
如下
Dictionary<string, ushort> ol9EjT;
public Dictionary<string, ushort> getyou()
        {
            return ol9EjT;
        }

将自己写的DLL反编译为IL

IL代码为
.method public hidebysig instance class [mscorlib]System.Collections.Generic.Dictionary`2<string,uint16>
          getyou() cil managed
  {
    // 代码大小       12 (0xc)
    .maxstack  1
    .locals init (class [mscorlib]System.Collections.Generic.Dictionary`2<string,uint16> V_0)
    IL_0000:  nop
    IL_0001:  ldarg.0
    IL_0002:  ldfld      class [mscorlib]System.Collections.Generic.Dictionary`2<string,uint16> '破解'.testsssssssssssss::ol9EjT
    IL_0007:  stloc.0
    IL_0008:  br.s       IL_000a

    IL_000a:  ldloc.0
    IL_000b:  ret
  } // end of method testsssssssssssss::getyou

完全将该代码复制为 目标组件的IL代码中
再一次编译为DLL

嘿嘿 组件中多了一个 getyou()的方法
嘿嘿 拿到该组件的某个资源文件的内容了
邪恶终止。

PS:如若你是该组件的作者,请大可放心,获取组件中资源文件的内容只是用于参考学习,不会用于任何商业用途。

posted @ 2007-07-20 02:17  T.t.T!Ck.¢#  阅读(1645)  评论(5编辑  收藏  举报