某批量Word转PDF转换器注册算法分析

北京扁平疣防治医院 https://m-mip.39.net/czk/mipso_8813030.html

祝各位考生考试顺利。

之前姜老师想把好多好多word转成PDF,顺带帮他看了一下这个软件。

文:慕若曦

01

分析程序

DIE查壳,无壳,.Net开发的软件,因此选择dnSpy来作为逆向工具。

02

找关键位置

载入dnSpy,运行起来,点击注册。

输入假码,提示“错误的注册码”

暂停,在调用堆栈中找到这个弹窗的来源。

可知,btnOK_Click事件被触发后,假码导致66行的错误报错被触发。

由此可知,btnOK_Click即为注册购买窗口中确定按钮的消息事件。

第三步,分析注册逻辑

把注册方法拿出来阅读一下。

privatevoidbtnOK_Click(objectsender,EventArgse){boolflag=false;boolflag2=false;boolflag3=false;boolflag4=false;for(inti=1;ithis.txtReg.Text.Length;i++){if(this.txtReg.Text.Substring(i,1)==W){flag=true;}if(this.txtReg.Text.Substring(i,1)==A){flag2=true;}if(this.txtReg.Text.Substring(i,1)==N){flag3=true;}if(this.txtReg.Text.Substring(i,1)==G){flag4=true;}}if(this.txtReg.Text==MD9M3M9CVPWPEOTConvert.ToInt32(DateTime.Now.ToString(yyyyMMdd))){MessageBox.Show(Form1.lan[38],OK,MessageBoxButtons.OK);FileStreamfileStream=newFileStream(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)+\w2psound.dll,FileMode.Create);StreamWriterstreamWriter=newStreamWriter(fileStream);stringvalue=;streamWriter.Write(value);streamWriter.Flush();streamWriter.Close();fileStream.Close();base.Close();Form1.zhuce=true;Application.Exit();return;}if(this.txtReg.Text.Trim().Length!=15){MessageBox.Show(Form1.lan[39],Form1.lan[39],MessageBoxButtons.OK);base.Close();return;}if(flagflag2flag3flag4){MessageBox.Show(Form1.lan[38],OK,MessageBoxButtons.OK);FileStreamfileStream2=newFileStream(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)+\w2psound.dll,FileMode.Create);StreamWriterstreamWriter2=newStreamWriter(fileStream2);stringvalue2=;streamWriter2.Write(value2);streamWriter2.Flush();streamWriter2.Close();fileStream2.Close();base.Close();Form1.zhuce=true;Application.Exit();return;}MessageBox.Show(Form1.lan[39],Form1.lan[39],MessageBoxButtons.OK);base.Close();}

首先定义了四个flag,然后循环判断,检查注册码中是否包含W、A、N、G这四个字符,大概是作者姓王吧……

为了验证下这个逻辑,我们输入假码WANG看看。

在30行下断点,逐过程调试,把for循环走完。

然后发现flag并没有被置为true。

原因是W实际上是WANG这个字符串的第0个字符,而它的for从1开始计算,因此正确的注册码的第2-5位应该是WANG。

至于第一位是多少,目前看不来,随便,假设它是M吧。

接下来看49行的判断。

如果注册码等于“MD9M3M9CVPWPEOT”且现在的时间早于。

遗憾的是这已经是年了。

当然你也可以爆破这个判断,修改方式很多,有以下逻辑:

1.注册码等于xxx,且时间晚于xxx

2.注册码等于xxx,或时间晚于xxx

3.注册码不等于xxx,或时间早于xxx

4.注册码不等于xxx,且时间晚于xxx

你可以随意玩。

本篇教程目的是分析注册算法,而不是爆破,所以无视这个判断,继续往下看。

64行,如果注册码长度不是15位,报错。

70行,如果几个flag都是true,则注册成功。

综上,只要2-5位是WANG就行了。

试一试。

用MWANGMWANGMWANG尝试注册,提示成功。

这就完了?

不,继续分析,看看他提示注册成功后干了什么。

首先是一个弹窗,提示注册成功了。

然后在Environment.SpecialFolder.ApplicationData这个位置创建了一个dll,其内

容为。

这个目录在哪里呢?

按Win+R,打开运行对话框,输入%appdata%,确定。

你就能看到这个文件。

右键,打开方式,记事本。

吐血。

卒。

当然,你别用记事本去打开其他软件的dll,正常情况下我们的dll和exe一样是由编译产生的。

接下来我们分析一下这个软件是如何判断软件是否注册的。

既然写入了这个dll,打开软件时的判断肯定会和这个文件有关。

搜索一下这个文件名,可以发现在软件窗口加载时进行了判断,如果有这个文件且内容为,则这个软件已经注册。

因此,我们可以不计算注册码,直接伪造授权文件。

在桌面新建一个记事本文档,输入内容,将这个文档的名字改成w2psound.dll。

然后把这个文件放入%appdata%目录。

经测试,效果是一样的。

教程中所分析的软件在博客。




转载请注明:http://www.aierlanlan.com/tzrz/4838.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了