软件运行
刚打开软件是没有破解的,红框后面是有uncrack字样(搜索字符串可以看到)
载入OD调试
刚载入OD发现程序需要打开文件,读取文件(CRACKME3.KEY)内容。
并比较了文件的字符是不是大于0x12个字节。
校验逻辑
读取文件内容后,如果大于0x12个字符,把前14个字符跟A…N异或,异或之后结果相加,保存到0x4020F9
。
之后再拿0x4020F9
中的存的值跟 0x12345678 异或,再保存到 0x4020F9
拿15~18的4个字符跟0x4020F9
相比较,相等的话,把AL置为1,就成功了
看看前14个字符处理
通过一个循环跟A…N异或,把异或结果保存到 0x4020F9
暴力破解
直接修改指令
sete al
//修改后
mov al,1
写脚本生成正确的序列号
def genKeyFile(key):
with open("./CRACKME3.KEY",'ab+') as f:
f.write(key)
def genKey(inKey):
s = 0x41
sum_check = 0
fin_key = inKey[:0xE]
with open("./CRACKME3.KEY",'ab+') as f:
f.write(fin_key.encode())
for i in range(0xE):
sum_check += (ord(inKey[i]) ^ s)
# print(sum_check)
s += 1
sum_check ^= 0x12345678
ss = hex(sum_check)[2:]
serial = []
for i in range(0, len(ss), 2):
ch = int(ss[i:i+2],16)
serial.insert(0,ch)
genKeyFile(bytes(serial))
s = 'sw0rd@snert.com.cn'
genKey(s)