破解合计行控件AX.SumDataGrid.dll(仅供大家学习交流,勿用于商业用途)
主程序调用AX.SumDataGrid.dll时会先出现下面界面,下面开始破解这个 dll
先用Reflector 分析,可以加载,但程序是被混淆(加密)过的,可以看到类名(大部分被改成无序的名称了),但要打开类,看类里的代码时会出现 “Expression stack is empty at offset 0006”
照着上面的错误提示google了一下,找到了”看雪”, 看雪大牛如是说:
程序是用 .Net Reactor 混淆过的
用dotnet helper反编译得到IL文件,
用文本编辑器删除以下的文本段:
IL_0000: br IL_0007
IL_0005: pop
IL_0006: ldc.i4.0
,再编译。
得到的文件可以用reflector看C#源码
我照作了,果然OK,可以看到函数内部代码了
于是找到底是哪段代码让上面那个广告弹出来的,刚开始想从反混淆着手破解,先用reflector把AX.SumDataGrid.dll反成C#代码,然后再根据自己2个月的C#学习经验来调试,但是看啊看,实在太累人了,代码里有好多”asdfsdf(“ 和 ” Adse)jou”之类的字符串变量,查找替换了老半天,里面还是有很多错误的地方,还是不能编译成DLL,可能这条路行不通.
后来换了思路,找程序的破解入口,也就是说哪句话让那个广告窗口出来了(当时想着找关键字show()),后来在reflector中看代码,分析出来了,是下面这句,后来验证果真不错,哈哈,这两个月的C#也不是白学的
破解前
但是知道是这句代码了,还有一个问题没解决:怎么把这句话给去掉(或注释掉)??? 现在有的可只是一个DLL文件啊,没有源码啊,自己又不懂IL语言,不会修改,后来临时补了下IL语言(在网上找了一点儿,临时抱佛脚),学了老半天,也还是找不到上面的这个破解入口点所对应的IL代码部分.
下午下班吃完饭,内急,去蹲厕所, 蹲着蹲着,嘿灵感来了,我顿时有种预感破解就要成功了,果真如是
新建一个工程,什么也不要往里边加,就只在一个新定义的函数中添加(还得在工程里新添加一个空类TestExpired)
public void ABC()
{
TestExpired expired = new TestExpired();
}
把这个EXE转成IL代码,这样IL代码就会很短,更容易查找目标,经验证把IL代码中的
.maxstack 1
.locals init (class ILCode.TestExpired V_0)
IL_0000: nop
IL_0001: newobj instance void ILCode.TestExpired::.ctor()
IL_0006: stloc.0
IL_0007: ret
部分去掉,再用dotnet helper编译回EXE文件,可以正常运行, 加载到reflector后, public void ABC()部分就变成了
public void ABC()
{
}
在AX.SumDataGrid.dll的IL代码里去掉下面两行(或注释这两行)
IL_0093: newobj instance void AX.SumDataGrid.TestExpired::.ctor()
IL_0098: stloc.0
,然后再用dotnet helper编译得到DLL文件,再加载到reflector中后如下,没有TestExpired expired = new TestExpired();这句了,如下图所示.
再用主程序调用AX.SumDataGrid.dll也没有广告窗口了,OK………………..完!!!!!!!!!!!!!!!!!!!!!!
破解后
破解合计行控件AX.SumDataGrid.doc
原始程序.rar
破解成功.rar
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)