首页
社区
课程
招聘
[讨论] Alt-Tab Terminator注册算法逆向
发表于: 2024-7-2 22:27 9212

[讨论] Alt-Tab Terminator注册算法逆向

2024-7-2 22:27
9212

逆向这个软件的注册算法很容易, 但貌似这个算法是不可逆的, 分享出来看看大家的思路

(这个程序开着aslr呢, 先用CFF Explorer抹去dll can move属性)
aslr
用了mfc写的程序, 用xspy定位到关键函数:
xspy
其中id=03fa是序列号那个edit的文本内容被改变事件, id=03fc是'浏览许可证文件'被单击事件
显然分析id=03fc比较方便(这俩事件最终调用的是同一验证函数)

首先弹出个ModalDialog 选择文件:
Dialog
然后读取文件内容:
read_file
读取的时候会判断文件编码, 普通文本文件就直接读了, 会根据换行分割, 获取name和key.

然后进入验证函数sub_14000F820:
verify
其中MultiByteStr就是'名称', v55就是'序列号', v34, v33没有用到

总的来说, 这个函数分两部分, 首先把name大写后进行魔改的rc4加密, 然后把key进行某种自定义的算法, 然后把两个加密后的值进行某种比较, 其中两部分的前5个字节要相等.

①首先把name大写后赋值给uint8_t name_upper[256]数组 (这个数组存放魔改RC4加密后的结果):
begin
其中函数开头的sub_14000F670函数是在进行字符串映射:
map
这串字符串就是key的有效字符, 比如'3'在字符串中的位置是1, 则g_ci_map['3'] = 1;
②然后进行RC4初始化, 下面在初始化S盒和密钥(下图中的byte_140400FC0就是s盒, xor_bytes就密钥):
rc4_init
只不过编译时内联了, 其实应该是先产生密钥, 再rc4_init, 汇编层面放到了同一个循环里
③然后进行256轮魔改RC4加密:
rc4_crypt
然后name加密就到底结束, 然后进行key的加密.

enc_key
这个算法有点冗杂, 这里就不展示了, 可以直接看附件整理好的.

name加密结果和key加密结果的前5个字节要相等, 第六个字节要满足下面的条件:
verify_enc

具体算法细节见附件, verify.zip是还原的C代码, bin.zip是原始程序安装包

这样的验证逻辑, 貌似没法通过name推出key, 或者通过key推出name?
那作者是怎么产生注册码的呢?


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2024-7-2 22:39 被0xEEEE编辑 ,原因: 更新附件
上传的附件:
收藏
免费 3
支持
分享
最新回复 (5)
雪    币: 348
活跃值: (4321)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这rc4貌似只用到了密钥流计算,就给name运算以后当密钥算成了密钥流然后迭代了256次密钥流
2024-7-3 00:20
0
雪    币: 348
活跃值: (4321)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
rc4这个肯定不可逆,估计还是得看自定义那个算法
2024-7-3 00:21
0
雪    币: 348
活跃值: (4321)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
key那个算法貌似可以反着算回去但可能有多解  if (tmp & 1) 其实最后结果就取决于tmp的奇偶
2024-7-3 00:32
0
雪    币: 348
活跃值: (4321)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
uint8_t tmp = (*constant_ptr & bit_mask) != 0; 根据const来控制一开始是奇还是偶
2024-7-3 00:35
0
雪    币: 232
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
大佬牛啤! 请问大佬你平时也用这个软件吗?有没有类似的软件推荐?
2024-11-20 06:36
0
游客
登录 | 注册 方可回帖
返回
//