破解战神关键字工具

主页 关于 友链

0x01 dnSpy

先来介绍个工具,dnSpy,下载地址:http://down.52pojie.cn/Tools/NET/dnSpy%20v2.0.2.0.zip

集分析,反编译和调试于一身,像是是ILSpy with Debugger,Reflector+Reflexil的合体,而且感觉比ILSpy和Reflector更强大,操作和UI都和VS类似

0x02 准备工作

首先PEid查下

8fc8970932287330b28df4aa410eed96.jpg

那么直接放到dnSpy中看一下

b45c69f0e1d4985e618727961285f8b2.jpg

发现是加了混淆直接用de4dot来脱一下看看

599df5d6712fc2e2dd272d481a55c829.jpg

成功了,再用dnSpy载入发现正常了,虽然里面还有一些伪代码,但是不影响阅读了

0x03 破解

先来看看这个程序的流程,打开后是一个登陆界面,根据提示,可以找到这个窗口对应login1,登陆按钮点击事件是Button2_Click,免费试用按钮点击事件是Button1_Click

ba2dda5efe8860e3694fe075d0aa9615.jpg

直接点击免费试用进入MainForm,发现最上面是一个MenuStrip,看到里面的一些信息

8e79b4b4dff2105cb788725afecdad99.jpg

最显眼的无非就是到期日期:免费版,那么在MainForm中搜索一下免费版这个关键字

MainForm_Load中,可以看到这么一些代码

475d55a0e446dd4cc16b3e63cba3b87b.jpg

1f6d10b6f39f80f16a59fa0767bfe564.jpg

似乎仅仅是和lblver.Text做了比较处理?找了找控件发现lblver其实是ToolStripMenuItem,而且还做了属性封装,取值返回的直接就是一个控件,一开始想的修改返回值基本上失败了

回过头来看看,点击免费试用之后的处理

4a388650c7c951d47caa6e42ebbd428c.jpg

method_21()这个方法是得到一个MainForm的实例,将其中的lblver强制命名为免费版,那么将这里更改成专业版之后看一下

5eb0f04ca8bd3bad73709f579ad60668.jpg

功能比对,可以发现这里很多限制都已经去掉了,但是可以发现在一些地方仍然是免费版,比如

5a2e816b9643bde466df2d8c0dd33442.jpg

不过这问题不大,仅仅是显示而已,可以看到功能还是专业版的功能,但是其他一些地方就是这样

b2f84ce1c652b58ff5a9b8b28412c290.jpg

e81375a875aceb148fe0cfa76ff5e707.jpg

这里感觉很奇怪,明明都在MainForm中,为什么验证方法会不一样呢,于是再搜索一下这些地方的验证过程是什么样的

找到两处明显不同的验证代码如下:

if (Class6.bool_10)
        {
            goto IL_235;
        }
        IL_1E0:
        num2 = 35;
        Interaction.MsgBox("免费版不支持此功能!\r\n请升级正式版!", MsgBoxStyle.Information, "提示");
        IL_1F5:
        num2 = 36;
        int arg_22A_0 = this.Handle.ToInt32();
        string text = "Open";
        string text2 = "http://www.zhanshensoft.com/price.html";
        string text3 = "";
        string text4 = "";
        MainForm.ShellExecuteA(arg_22A_0, ref text, ref text2, ref text3, ref text4, 1);
        IL_230:
        goto IL_E55;
        IL_235:
        num2 = 39;
if (!Class6.bool_8)
        {
            Interaction.MsgBox("免费版不支持数据自动保存和导出,且最多挖掘1000个关键词!\r\n请升级正式版!", MsgBoxStyle.Information, "提示");
            int arg_7B_0 = this.Handle.ToInt32();
            string text = "Open";
            string text2 = "http://www.zhanshensoft.com/price.html";
            string text3 = "";
            string text4 = "";
            MainForm.ShellExecuteA(arg_7B_0, ref text, ref text2, ref text3, ref text4, 1);
        }
        else
        {
            Class2.Class3_0.method_2().txtNum.Text = "33";
            Class2.Class3_0.method_2().ShowDialog();
        }

可以看到判断了Class6.bool_8Class6.bool_10的值,而这两个值是一个bool型的静态字段,找了整个程序也没见到在哪儿有赋值,那么就自己动手来赋值好了,因为Class6是个类,那么在它的构造方法中将bool_8,bool_10赋值为true,上面那两种判断就可以避开了,来到Class6的构造方法,右键点击编辑IL指令

添加这几句指令

920fa16632adfecbc0608088bbdad4d2.jpg

解释下这两条指令

ldc.i4.1(将整数值1作为Int32推送到计算机堆栈上)

stsfld(用来自计算堆栈的值替换静态字段的值)指令

这里为什么要推送1到堆栈来替换掉字段的值就不用说了,替换完成后看现在Class6的构造方法

4ec0df8ce1f326d1f190f37a7b05ed58.jpg

再来测试一下功能是否正确

修改后的破解专业版点击导出按钮

a59615b4bd9eb4d85a1ec44d3c7e717e.jpg

未修改的破解专业版点击导出按钮

a755beebc09a1681725a1ff2de41cc0e.jpg

不懂SEO,所以这个软件根本不懂怎么用的。 所以就先搞到这里吧

做个免责声明:该案例仅供研究学习,不提供破解后软件下载,请在24小时之内删除相关软件、忘记相关内容。。