MENU

文章目录

某商UI逆向

前言

  朋友是个幼师,把幼儿园的教学一体机给弄中毒了,找我帮忙。俗话说得好,重启解决99%的问题,重装解决100%的问题,本着省时省力的原则,我决定远程帮她重装一波系统。然后问题来了,那幼儿园用的一体机是个不怎么知名的牌子,配套的教学UI搜都搜不出来,让她在隔壁班拷贝一份后发现居然还要注册,她害怕被园长批又不敢去要注册码。怪自己贪方便选择重装系统,无奈只能逆向一下了。让人又好气又好笑的是,这个开发人员不是一般的懒,而且懒的还非常可爱,本文就记录一下他的可爱以及逆向过程,顺便提醒一下自己和大家,不管做什么事,都要注意安全措施哟。

分析

  看了一下拷贝过来的文件,是个WPF程序,运行后从里边得到了完整安装包的下载地址,居然是放在百度网盘里的,算了不纠结,毕竟连官网都没有。

  把安装包下下来发现图标有点熟悉,仔细一看,这不是用HofoSetup打包成的安装包么?到这里开始觉得这位开发小哥哥有点懒了,啥都是用第三方的。可当我打开安装包的后就对他彻底改观了,不是有点懒,是非常懒!路径居然是写死在D盘的,不给自定义。

1.png

  由于虚拟机只有一个C盘,故只能修改安装包或分区,对比之下后者更省时间,索性给虚拟机分个D盘出来。安装完成后把主程序拖进dnSpy一看,得,混淆都懒的混,是个狠人。

2.png

  上下滑了两下,看到RegisterWindow这个类,估计是填注册码的窗口,就点进去看看是什么情况,虽然我对这位开发小哥哥的懒已经见怪不怪了,但还是惊讶他的敷衍程度,这是有且仅有的安全措施:

3.png

  不用想,GetSerialNumber就是注册码的生成方法。

private static string GetSerialNumber(string hwid)
        {
            string text = "";
            uint num = 0u;
            for (int i = 0; i < hwid.Length; i++)
            {
                num += (uint)hwid[i];
            }
            int num2 = 0;
            do
            {
                uint num3 = 0u;
                for (int j = 0; j < 4; j++)
                {
                    num3 += (uint)hwid[num2 + j];
                }
                uint num4 = num3 ^ num;
                text += ((char)(65u + num4 % 26u)).ToString();
                num2 += 4;
            }
            while (num2 < hwid.Length);
            return text;
        }

后记

  虽然这位开发人员在一些方面是有点懒,软件本身也是各种功能不完善,但好在对基本教学没有影响。其实想想也能理解,那个公司主要是卖一体机的,也不算大公司,配套的教学UI也不可能出现大规模被使用被盗版的情况,故保护措施形同虚设也无可厚非。但不管怎样,未来会是重视各种版权的时代,时刻警醒,未雨绸缪不是坏事。

留言打赏

粤公网安备 44160202000193 号