Source Insight 3破解
上操作系统课的老师给我们发了一个大工程编辑软件 Source Insight 3,还是没有注册过的,我就拿来分析了一下,发现注册函数很简单 (o°ω°o)。8 说了,开整
PS. 资源在文末,非商用目的,仅供学习交流使用
找到注册函数
打开软件,就让输入序列号:
随便输一个 123
将 exe 拖入 ida,在文字窗口搜索 “You typed”,找到一个匹配项
检查交叉引用,来到函数 sub_4495B1
可以看到左下角有成功注册的提示,往上找找,可以看到是 sub_445B07 函数的返回值(test eax, eax)将验证结果区分开来,若想成功注册,就得使 sub_445B07 返回非零
再往上看看,调用 sub_445B07 之前压入了一个字节数组的地址(0x5E5BFC),再之前,还调用了 strupr 函数将这个字节数组每个字符转化为大写,所以猜测该字节数组为我们的输入序列号字符串,sub_445B07 则为注册函数
分析
sub_445B07 的伪代码:
结构很清晰,序列号应该分三段,连接符号是 ‘-‘,形如 XXXX-XXXX-XXXX,一段一段地检查
第一段:
其中的 sub_414738 函数如下:
也就是说第一段应与全局变量 aSi3us 相同,故第一段为 “SI3US”
第二段:
这里将我们输入序列号的中间部分取出来,长度得是 6,并且调用 atoi 函数将其转换为数值,这个数不能在元素个数为 23 的 int 数组 dword_53CA80 中
第三段:
长度应该为 5,且调用了 sub_4F62D4 函数,并向其传递第二段的地址,推测第三段的产生与第二段相关
sub_4F62D4:
很简单的逻辑,初始化 v4 为第二段 atoi 的值,拿第二段的 6 个字符逐位与 dword_5A8A54 数组中的值异或,每次异或完加上 4 * v4,最后再模 0x186A0
所以注册码应该形似 SI3US-XXXXXX-xxxxx
python 脚本:
1 | import random |
资源
链接:网盘
提取码:8ww4