运行程序
先是弹出一个neg
然后是真正的程序界面
有一个输入Serial和Name的判断
还有一个只输入Serial的判断
查壳
没有壳,是Delphi程序
先除去一个Neg
找到Neg弹出的程序,在程序头下个断,运行程序,此时栈顶是调用此功能的返回地址,反汇编跟过去
发现上面有个跳能跳过去,改成JMP,保存。再打开程序就不会有Neg
载入OD分析
- 先分析输入Serial的
这个功能会提示Try Again,直接去搜字符串
在函数头部下个断,check就会断
就一个字符串比较
看一下要输入Name和Serial的
从上往下跟,在验证Name,感觉很复杂,最后满足大于4就可以了
之后取第一个Name字符,计算出一个值,在拼接CW和CRACKED
最后和自己输入的Serial比较
算法分析
def genKey(name):
s1 = 'CW-'
s2 = '-CRACKED'
serial = str(ord(name[0]) * 0x29 * 0x2)
serial = s1 + serial + s2
print(name)
print(serial)
genKey('sword')
- 结果
总结
花里胡哨