031-Cruehead.1
无壳
算法
通过搜索字符很容易定位到以下位置:
判断 v7 和 a1 相等就成功
a1是 sub_4013D8函数的输出结果。怎么得出的结论呢?猜的,或者动态调试,这个反汇编不准确,看不出来。
1、进入 sub_40137E
将小写转为大写,最后累加各个字符的ascii码值
2、进入sub_4013D8
将输入的数字字符串转为对应的数字
最后还发现这个函数反汇编不准确,少了一段
要再异或一个 0x1234
注册机
name = "sword"
res = 0
for i in name:res += (ord(i) - 32) # 前提输入是小写
res = res ^ 0x5678 ^ 0x1234print(res)
方法2 动态调试
打开发现,所有正确和错误提示都是函数,不好下断点,直接在提示错误的函数头下断点,然后往回追:
往上追一步:
进入处理函数看看:
1、用户名处理
先判断输入不能小于 A,如果是小写字符,就转为大写,完成后将大写字符累加,最后结果异或0x5678
2、serial处理函数
将输入的数字字符串转为对应数字,然后异或 0x1234