运行分析
- Help里有个Register
- 需要破解Name和Serial
-
PE分析
- 32位程序,壳未知
静态分析&动态调试
- ida搜索关键字符串
- 动态调试,sub_40137E(Name)和sub_4013D8(Serial)结果对比,相等则返回成功
- 先动调分析sub_40137E(Name),返回值 = 每个字符ascii相加(小写转大写(Name)) ^ 0x5678
- 继续动调分析sub_4013D8(Serial),发现伪代码少了一步计算,查看汇编代码,发现Serial转十进制后要需要与0x1234亦或
- 结果 = Serial转十进制 ^ 0x1234
算法分析
Name = 'concealbear'
Serial = 0
Names = []
# Name大写转小写
for i in range(len(Name)):
if ord(Name[i]) < 65:
print("Name的ascii码值不能小于65")
exit()
elif ord(Name[i]) >= 90:
Names.append(ord(Name[i]) - 32)
else:
Names.append(ord(Name[i]))
# Name是除最后一位相加
for i in range(len(Names)-1):
Serial += Names[i]
Serial = Serial ^ 0x5678 ^ 0x1234
print(Name + "的Serial为:\n" +str(Serial))
- 验证成功