记一次对3D打印切片软件的逆向

查看 23|回复 0
作者:Drzad   
前情提要:
  高中时期使用的紫熙3D打印机,当时公司正在发展期,能够联系公司进行授权。目前公司倒闭了,又刚好碰上学校电脑重装,结果发现从其他电脑移植过去的许可证代码无效,没办法导出分层后的文件了,于是需要找到激活的方法。
  该切片软件正常导出时会提示许可证代码无效页面,如下:


0.png (99.02 KB, 下载次数: 0)
下载附件
2024-6-29 17:21 上传

逆向方法:
(1)找到上述提示框所对应的exe程序,为C盘目录下ZXPrint文件夹内的ZXFomer.exe
(2)使用Detect It Easy(爱盘内下载)分析程序。结果:该程序为.NET框架,无加壳(2015年代的软件安全性可能也不会太强)


1.png (33.36 KB, 下载次数: 0)
下载附件
2024-6-29 17:21 上传

(3)使用dnSpy(爱盘内下载)对程序进行反编译,通过代码审计找到ZX_G2P下的encodecomputer和From1_Load方法为验证许可证代码的逻辑。


2.png (92.42 KB, 下载次数: 0)
下载附件
2024-6-29 17:21 上传



4.png (184.04 KB, 下载次数: 0)
下载附件
2024-6-29 17:21 上传



3.png (200.2 KB, 下载次数: 0)
下载附件
2024-6-29 17:21 上传

代码如下:
[C#] 纯文本查看 复制代码
// textbook.ZX_G2P
// Token: 0x06000023 RID: 35 RVA: 0x000024CC File Offset: 0x000006CC
private int encodecompter(string inputstr)
{
        int num = 0;
        int[] array = new int[]
        {
                100,
                104,
                107,
                31,
                45,
                51
        };
        int num2 = 4;
        string currentDirectory = Environment.CurrentDirectory;
        if (!File.Exists(currentDirectory + "\\\\licence.dat"))
        {
                return num;
        }
        StreamReader streamReader = File.OpenText(currentDirectory + "\\\\licence.dat");
        string text = streamReader.ReadToEnd();
        streamReader.Close();
        if (text.Length = 0)
        {
                string text3 = ZX_G2P.MD5Encrypt(text.Substring(77, 34));
                if (text.Length  this.encodecompter(this.cumputer_id))
        {
                this.tex_message.Visible = true;
                this.license_state = 0;
        }
        else
        {
                this.Text = this.title;
                this.license_state = 1;
                this.tex_message.Visible = false;
                if (Program.patharg != null && Program.patharg.Length != 0)
                {
                        base.WindowState = FormWindowState.Minimized;
                        base.ShowInTaskbar = false;
                        this.startbycmd(Program.patharg);
                }
        }
        this.tex_message.Text = "本软件尚未成功激活,许可证代码无效(licence error);\r\n请联系紫熙发展技术支持部门,购买获取激活码;\r\n请访问www.zixichina.com 或致电:010-56147060\r\n如果您已经激活,请将激活文件放于 " + Environment.CurrentDirectory + "\r\n北京紫熙科技发展有限公司\r\nID:" + this.cumputer_id;
}
(4)encodecompter方法使用一套检验方法对inputstr也就是本机硬盘码和licence.dat里的内容进行对比校验,若正确返回1,若过程中任何地方不正确则返回0。
(5)将encodecompter方法中的第一句“int num = 0;”修改为“int num = 1;”。然后删除掉倒数第5行的“num++;”。目的是使该函数一直返回1,即验证通过。
(6)将修改后的ZXFormer.exe放回软件安装目录,能够正常使用无失败弹窗。

下载次数, 代码

您需要登录后才可以回帖 登录 | 立即注册

返回顶部