运行程序
错误:
查壳
没有壳,是汇编写的程序
载入OD
前面是在读取输入内容,到这里开始做计算了
分析
首先遍历了用户名,计算结果保存在EBX,在存放到 0x40E0F8
对EBX中的值再次计算,最后结果保存到 0x40E1F8
把第一次计算的结果转为字符串,再次在ECX计算,并保存到 0x40E2F8
"Bon-"字符串保存在 0x40DDF8
最后把这些计算的字符拼接起来,保存在 0x40DDF8
之后在拿这些通过用户名计算出来的字符串和我们输入Serial对比
最后通过判断结果跳转就在这了
算法破解
def genKey(username):
s = 'Bon-'
s1 = ''
s2 = ''
s3 = ''
EBX = 0
EAX = 0
for i in username:
EBX -= ord(i) - 0x19
s1 = hex(EBX & 0xffffffff)[2:]
print(s1)
EAX = EBX**3
s2 = hex(EAX & 0xffffffff)[2:]
print(s2)
s3 = hex(0x40E0F8 * 0x40E0F7)[-8:]
print(s3)
s = s + s1.upper() + "-" + s2.upper() + "-" + s3.upper()
print(s)
genKey("sword")
暴力破解
把这个汇编指令修改就可以了
破解结果
总结
算法不是很难,汇编程序,很好分析