johnick 发表于 2021-7-21 09:56

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,这是何故?两者也并未有继承。。。









Hmily 发表于 2021-7-21 14:01

你这个图有问题,先学习下怎么插入图片,然后编辑下吧,我给你改了2个其他对不上了https://www.52pojie.cn/misc.php?mod=faq&action=faq&id=29&messageid=36

johnick 发表于 2021-7-21 14:36

Hmily 发表于 2021-7-21 14:01
你这个图有问题,先学习下怎么插入图片,然后编辑下吧,我给你改了2个其他对不上了https://www.52pojie.cn/ ...

有两个图我用了缩略图,因为原图太大,他俩都出现在了文末,我改一下。

Hmily 发表于 2021-7-21 15:06

你第一个小图的原图哪里来的?上传里好像没有。

johnick 发表于 2021-7-21 16:14

Hmily 发表于 2021-7-21 15:06
你第一个小图的原图哪里来的?上传里好像没有。

母鸡。。发帖时还在的

Hmily 发表于 2021-7-21 17:04

johnick 发表于 2021-7-21 16:14
母鸡。。发帖时还在的

你可以重新传一下把正文图片替换编辑下。
页: [1]
查看完整版本: Net注册码迷宫【续】