本帖最后由 wwh1004 于 2018-7-15 14:31 编辑
如果文字没有说清楚,可以看我录的视频:https://www.bilibili.com/video/av26315130
视频下载: https://pan.baidu.com/s/1cmncmF9-McKPOzk7M69j9Q 密码: ra2d
视频里面打错个东西,是NullReferenceException而不是ArgumentNullException,我的锅..
成品:https://www.52pojie.cn/thread-762218-1-1.html
先丢de4dot里,看看脱壳之后能不能运行,测试之后可以
这时字符串都被de4dot还原出来,所以我们用dnSpy打开脱壳之后文件,搜索"Demo",并查找调用
多看下调用方法和被调用方法,可以发现WinForm1.smethod_13(string[])是最可疑的,因为它给这个成员赋值为"Full Version"了
这个时候反编译会卡死,因为WinForm1类里面有个巨大的方法,6万行IL,手动转到这个方法或者把显示C#代码改成显示IL代码
分析一下这个方法,发现它会调用WinForm1.smethod_71()来判断是否注册
所以我们暴力地编辑IL,把IL改成
ldc.i4.1
ret
清空局部变量和异常处理程序
我们保存,运行,发现这个还是Demo版本,重新看看WinForm1.smethod_13(string[]),发现这个里面还有判断
[C#] 纯文本查看 复制代码 if (Class459.smethod_30().Count > 0)
{
if (text.ToUpper() == "JAMES ROULEAU" || (text2.ToUpper() == "JAMES" && text3.ToUpper() == "ROULEAU"))
{
//这个应该是黑名单...
Class586.QwgqvCejwQk = false;
Class459.smethod_3(false);
Class586.string_1 = " Demo ";
}
}
else
{
//sortedlist为空
Class586.QwgqvCejwQk = false;
Class459.smethod_3(false);
Class586.string_1 = " Demo ";
}
看看Class459.smethod_30()返回了什么,发现是一个SortedList
查看调用
暴力修改静态构造器IL代码
在new出SortedList后加
dup
ldstr "REG_NAME"
ldstr "随便写个试试"
callvirt instance void [mscorlib]System.Collections.SortedList::Add(object, object)
保存,再运行,发现破解成功了
个鬼(至少说明Demo版本和Full版本是有区别的,之前测试过,不是魔改IL代码导致的)
打开dnSpy,调试,取消所有异常捕获,显示C#代码改成显示IL代码
找到了,smethod_52 IL_B44F处,好吧,卡死了,人肉翻译一下(dnSpy卡死了,毕竟5.5万行的IL代码)
[C#] 纯文本查看 复制代码 Type x=Type.GetType("字符串仅供参考,请以实际图片为准");
x.GetMethhods();
就是这里出问题了,这个类之前是被改名了,但是拖de4dot的时候被重命名了,所以返回了null
这里x是null,自然弹出NullReferenceException。不确定这样的地方有多少处,所以只有一个快捷的办法,带参数运行de4dot取消命名。
用--dont-rename参数,可以看到名称都保留了,这下应该可以正常破解了。重新爆破一遍,和上文说的一样,也可以看视频,视频里面有完整的过程
几分钟过去了~~~~~~~~~~~~~~~
完成!
随便点,无报错 |