分析
试用期内打开软件,界面有“XX days left”的提示。当31天的试用期过后,打开软件提示试用版已过期,需键入注册码,否则无法使用。软件无壳,很友好,直接拖入IDA分析。根据提示字符串进行字符串搜索,在试用期内分析时,因剩余天数的数字是变化的,内存中的字符串相对特殊,可配合CE进行搜索,确定位置,然后查找访问内存的代码空间。在IDA中直接搜索也可以。最终,在IDA中定位到引用提示字符串的代码如下图:
Snipaste_2024-08-29_16-28-06.png (83.44 KB, 下载次数: 0)
下载附件
2024-8-30 10:24 上传
在试用期内则走左侧流程,若试用过期则走右侧的流程。当到期后会调用CWnd::ShowWindow(0),参数0即SW_HIDE ,作用是将点击使用软件的“Continue evaluation”按钮控件隐藏。本来以为手动修改参数为1,让按钮正常显示即可使用软件,但是点击后程序仍有判断流程,出现不同的字符提示,无法继续使用。
Snipaste_2024-08-29_14-58-08.png (34.4 KB, 下载次数: 0)
下载附件
2024-8-30 10:23 上传
Snipaste_2024-08-29_14-58-57.png (43.22 KB, 下载次数: 0)
下载附件
2024-8-30 10:24 上传
继续分析。既然软件显示剩余可用天数,那肯定有初次使用的时间记录以及计算时间差值的代码,所以可通过上面定位的函数层层往前回溯(因为上一次分析还是在上一次,没有及时记录经过了几层函数调用),最终可以定位到HKEY thiscall subD3CD90(int this)函数。
Snipaste_2024-08-29_09-30-35.png (91.78 KB, 下载次数: 0)
下载附件
2024-8-30 10:23 上传
在42行处,sub_11436CA()/sub_13036CA()函数内的第一个分支是调用GetPrivateProfileIntW读取INI文件(程序同目录下的Settings.ini文件)中指定节(“Settings”)和键("OperationalModeType")的数值,赋值给V1。
Snipaste_2024-08-29_09-42-46.png (43.96 KB, 下载次数: 0)
下载附件
2024-8-30 10:23 上传
然后,若注册表"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main"存在键”OperationalModeType”,读取数值赋值给Data。V1异或0x29CB5801,Data异或0x51AA79E5。正常情况下,两个异或后的数值应该相同,并且注意:此异或后的数值即为初次试用软件的时间戳!
既然这样,我就可以随意修改这两处的值,更改首次试用时间,达到长期使用的目的。更简单省事的话,我可以删掉此注册表键和INI文件,假装我从来没有用过Proxifier,每一次的重新使用都是第一次,充满了新鲜感~(当然前提是软件没有其他处关于时间的校验。)
删掉之后,重新打开软件,熟悉的界面又回来了,可以继续使用。为了防止之前的规则或者配置丢失,可以将INI文件和Profiles文件夹备份。我再次试用后还能看到以前的规则,但可能误操作没有保存,规则清空了。
Snipaste_2024-08-29_20-29-16.png (46.9 KB, 下载次数: 0)
下载附件
2024-8-30 10:24 上传
Snipaste_2024-08-30_08-48-52.png (48.33 KB, 下载次数: 0)
下载附件
2024-8-30 10:24 上传
如此重复循环试用,就实现了长期使用软件的目的。
关于注册码
注册码验证部分比较好找,但是逻辑分析较复杂。主要部分在sub_D02430()内:
Snipaste_2024-08-29_19-49-01.png (114.67 KB, 下载次数: 0)
下载附件
2024-8-30 10:24 上传
(上图81行处sub_D02740()的注释不准确,除了部分字符替换外,更主要的是进行移位等操作。)KEY的运算包括移位、异或等,然后进行12字节的CRC-32/MPEG-2校验,校验结果与0x1FFFFFF相与后的数值要等于之前一次的运算,相等后才进入验证正确的流程,否则出错。
当时分析卡在此处,以为通过构造最后5字节KEY,可以得出CRC32校验结果,这样已知原始12字节中的4字节,爆破出8字节来得出校验前的字节流。但这样应该是不可逆的过程,因为字节并不只是限定在可见字符的范围,即使就算增加可见字符的约束条件,我也不知道是否可行,数学功底不行。思路没有打开。后来发现一篇github上的文章,别人去年就分析过了,《Proxifier注册机》,感兴趣的可以搜一下,讲的明白。