Net注册码迷宫【续】
本帖最后由 johnick 于 2021-7-21 18:05 编辑没经验,上一帖冗长了,新开一帖。虽说还没攻克,也学到不少东西,发出来分享交流共同进步。
或蒙大神垂青,点拨一二也未可知。
没有的话,也算为论坛尽绵薄之力做些贡献。
[*]前情提要
上回说到,破解一个.Net商业软件(开发者不是个人,是公司,用心做了保护)。
核心代码(注册码)部分混淆成了字母,层层嵌套,极其复杂。先用dnspy上。
[*]de4dot一波流。。。
使用de4dot去混淆(需用正则筛选,因字母默认合法)后,共有ns 20+个,GClass 300+,class 1000+。
[*]初步静态分析
通过未混淆代码,分析十几层,到达获取注册码的关键代码,
继续寻找smethod_1被使用的地方,仅有一个LoadAsync()函数,跳转到代码处。
这就是dnspy最大的缺陷:无法分析异步代码。基本所有带异步的函数都会被翻译成这个样子。
[*]挥别dnspy
要分析这种代码,可以用IL,也可以用dotpeek。
我选择了后者,不仅因其操作简便,另一个原因下面说。先找到异步代码,现在正常了。找到其核心,变量gclass3肩负了注册状态的总调度,一切付费功能的开关,似乎都在里面。
[*]dotpeek调试之旅
获取并修改gclass3,应该是破解的关键了。下一步,最直观的方法就是调试下断了。
dnspy无法在此函数下断,IL没有找到调试功能,dotpeek官网文档却明确列举了在VS中调试的步骤。全村的希望!
把一切设置完毕后,开始调试,exe可以下断,但核心dll无法下断,pdb也无法生成,每次运行都直接跳过。
这个神秘又万恶的LoadAsync函数,泥鳅般地无法握住,砍刀切黄豆般难以剖开。
[*]垂死挣扎:无奈的静态分析
万般无奈,只能继续追踪gclass3的赋值过程,N层以后:
这里传入的参数是"Login",再下一层,第一个函数字符串连接,没啥花样;第二个函数,内存流,应该不用管。
[*]dnspy我错了
还是离不开调试。只能回头拥抱唯一可调试的dnspy,小心翼翼地绕开异步下断。
用第一个函数还原出网址:
直接登录会报错。
[*]硬上无门
方法用尽,只有最后一招了:强行尝试修改gclass3。
但是。。。dnspy和ilspy的IL命令中,都无法正常显示异步的LoadAsync()函数:
它们的IL命令,和之前反编译的异常显示是对应的。。。
而只有dotpeek可以反编译出正确的IL代码,但dotpeek不具备修改IL的功能。。。
想肉搏都不给我机会啊,摔!
另外,我有个疑问:
下图的class1467_0.smethod4()方法,并未在Class1467中定义,却在Class1466中定义了,点追踪去的也是1466,这是何故?两者也并未有继承。。。
你这个图有问题,先学习下怎么插入图片,然后编辑下吧,我给你改了2个其他对不上了https://www.52pojie.cn/misc.php?mod=faq&action=faq&id=29&messageid=36 Hmily 发表于 2021-7-21 14:01
你这个图有问题,先学习下怎么插入图片,然后编辑下吧,我给你改了2个其他对不上了https://www.52pojie.cn/ ...
有两个图我用了缩略图,因为原图太大,他俩都出现在了文末,我改一下。 你第一个小图的原图哪里来的?上传里好像没有。 Hmily 发表于 2021-7-21 15:06
你第一个小图的原图哪里来的?上传里好像没有。
母鸡。。发帖时还在的 johnick 发表于 2021-7-21 16:14
母鸡。。发帖时还在的
你可以重新传一下把正文图片替换编辑下。
页:
[1]