运行程序

错误:

查壳
没有壳,是汇编写的程序

载入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")


暴力破解
把这个汇编指令修改就可以了

破解结果

总结
算法不是很难,汇编程序,很好分析



















