坏事做尽--通过修改IL获取某资源文件
事情源于想获取某个非开源组件里面的某个资源文件的内容
该资源文件为一个二进制文件,通过某种方式解析出来之后将会是一行行的字符串
我就是想拿到这些字符串
目的很明确
开始准备工具 ildasm,ilasm,Xenocode Fox
该组件已经通过Xenocode 混淆过了,但是不代表不能看,只要细心分析还是能看出端倪。
通过Xenocode Fox 分析得到文件资源文件的内容通过解析之后被加载到
private Dictionary<string,ushort> l9Ej)T; 中,
用ildasm获得该组件的IL文件,把private Dictionary<string,ushort> l9Ej)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:如若你是该组件的作者,请大可放心,获取组件中资源文件的内容只是用于参考学习,不会用于任何商业用途。