Atomin**rProDocumentation 9.34 破解小记

来源:互联网 发布:调音师知乎 编辑:程序博客网 时间:2024/06/08 08:43

AtomineerProDocumentation 9.34 破解小记


这一天,我正在写代码,突然被发现VS的AtomineerProDocumentation 插件试用期到了了,惨。
过期

上网简单搜索了一下,有大佬破解了9.32,但是下载还要啥子积分,小弟穷的要死,也不想进入积分的恶性循环,看来只好自己动手了。

从大佬的破解文章中得知,这个插件是C#写的,很好破解。因为本来也没破解经验,也不会C#这语言,所以就试了下几个常见C#反编译工具,有Reflector、JustDecompile、ILSPY,都没用明白。经过再次上网搜索了,发现了dnSpy这东西,地址是https://github.com/0xd4d/dnSpy,看看最近的Commit是在7月18号,有大佬一直在维护这东西啊,怪不得这么好用。

通过搜索,发现插件位置在C:\Users\电脑用户名\AppData\Local\Microsoft\VisualStudio\15.0_0e3fd674\Extensions\里,这个目录应该是VS2017安装插件的目录吧,每个插件都在一个类似乱码的单独文件夹中。插件的核心功能应该还是在AtomineerProDocumentation.dll里。用dnSpy打开,是这样的:

这里写图片描述

看这个Atomineer.Utils里面的AtomineerProDocPackage,应该是程序入口之类的东西吧,先看看他的Initialize()方法,是这样的:

这里写图片描述

步骤是基类初始化、获取一个DTE库实例、和Commands类初始化,先去看看Commands是咋初始化的:

这里写图片描述

去看了下这个Commands.m()方法,貌似是首次使用插件时用来弹出设置向导用的,接下来看看Prefs.a(true,false),这个函数里又调用了Prefs.b(…),在这里发现了比较关键的代码:

这里写图片描述

这个num3貌似就是已使用时间,如果超过19天了,就提示你“哎呀试用时间没剩多少了哦”,如果超过29天了,直接就不让用了。在关键代码 int num3 = num - num2 >> 8l;处右键,选择“编辑IL指令”,随便改一下,让num3一直不大于19就行了,改成这样:

这里写图片描述

代码就变成了int num3 = num - num;,然后选择菜单栏里的文件->全部保存,直接覆盖原dll,再次打开vs,诶,弹出框没了,哈哈,难道成功了,就这么简单?但是我一按快捷键,弹出了这东西:

这里写图片描述

啥情况?这么机智吗?经过又一阵折腾,发现这种弹窗口的动作通常都是由一个叫做Helpers的类完成的,最终定位到了Helpers.a()方法里:

这里写图片描述

把这一大串字符串按照图中的算法翻译过来后,发现这确实是错误提示框框中的内容。

string text = "Qe}~}{srj9Niu|r?xpa3ppbr{m\u007f\u007f<|>ob~p\u007fqx6`qmr;erkm0e`zuy6g}kstx1>{et2g{5uxjkokhtqq0~t3mzce8k\u007f|unjmi1}a4t6dq~trzt}~~e2p|txp}9nt<dqjb1ajgasz8zvt\u007fv0?E\u007ft|facyym\u007fwe=gpec2pagdrvm:ont\u007fs0awa}zr7{xtusi>}u1q|za\u007fym|~5\u0016\u0017Nsupav4{yc}9ns}i>kxxa3dgyc}znrss>p~}k3uef{q|i;hr>kxt2gf|w{8o\u007fiotqq<1a|4a~r8hor\u007fv{ld1a|x`b~ww:ro=jp0dbtftrr8mu;hu{?vd~\u007f4gs{}xi~<k{mcx}}:\u001f\u001cVtm\u007fir|jvft~j85\u007fq8`un<jwlx1f|4vyylptny=gpec2gf|w{49jwy|mz0t\u007fr}y6dmijtni^~d~\u007fzzpsemmswo3}p}1s}p5ar8nswp=|z0yscdl6cw9u}zxl?i~g3u{6r`m\u007fuotqq>1\u0018\u0019Cp6vhvvt{tdz0w}a4txn8ptxsshz~xw}wp8";stringstream stringBuilder;for (int i = 0; i < text.length(); i++){    stringBuilder << ((char)((int)text[i] ^ (16 | i % 16)));}cerr << stringBuilder.str() << endl;

查看一下都是谁调用了Helpers.a(),定位到Commands.a(CMD)方法中:
这里写图片描述

把这个方法中的Helpers.a();改成nop,再次打开VS尝试,发现框框不弹了,说明确实是这儿的问题。仔细看看,如果异常类型是NullReferenceException,同时Helpers.b这个成员变量被包括在“Sc5fd”这个字符串中,则弹框框。我们先看看这个Helpers.b成员变量都被那些方法用到:
这里写图片描述

诶呀妈呀这一大堆,我们挨个看看吧,看了几个,发现这些方法只会将Helpers.b赋值为数字,那么如果它被包括在“Sc5fd”中,只可能是数字5啊,经过疯狂查找,发现Helpers.b在mdDocComment类中的void a(ref EditPoint A_0, ref EditPoint A_1)方法被赋值为5:
这里写图片描述

定睛一看,诶呀,咋这么坏呢,这还藏一个,按照相同的方法吧num3改成0,再试一次Ctrl+Shift+D,好使了!顺手把Commands.a(CMD)里提到的两个类CmdInfo、CmdCheckForUpdates随便改改,大工告成。

最后随便分享一下修改完成的dll吧,直接百度网盘:
http://pan.baidu.com/s/1eSiqqx8 密码6if1
覆盖系统中的同名文件即可。

原创粉丝点击