描述 :
无语了,想给你们制造点悬念都没有了,哎!直接去做题吧
解题链接: http://ctf5.shiyanbar.com/crack/3/
关键字:
破解 逆向 调试
破解[crackme1.zip](http://ctf5.shiyanbar.com/crack/3/CrackMe1.zip)压缩包的程序
要求:请找出用户名为hello的注册码
下载并解压题目提供程序
尝试运行程序 :
发现输入错误的时候会有一个 AlertDialog 弹出 , 提示 "密钥无效"
首先使用 bash 的 file 工具查看一下文件类型 :
CrackMe1.exe: PE32 executable (GUI) Intel 80386, for MS Windows
打开 IDA , 载入该程序 , 由于我们之前运行该程序的时候注意到了关键字符串 "密钥无效"
这时可以通过搜索定位 "密钥无效"
双击后面的注释跳转到 图形视图
这里调用了这个函数 : sub_4011D0
当返回值不为 0 的时候 , 就跳转到 密钥无效
的分支
我们继续查看这个函数 : sub_4011D0
直接 f5 反编译为 C代码
通过分析可以知道 , 这段代码会将用户输入的用户名的每个字符遍历一遍
把每个字符的序号(从 0 开始算)与这个字符的ASCII码的平方相乘 , 然后整体再加上序号 , 得到的和继续对 0x42 求余 , 最后将结果加上 33 , 然后再转为ASCII码
然后再将上述结果连接在字符串 'Happy@' 之后构成注册码
分析清楚了思路 , 然后就是写注册机
#!/usr/bin/env python
username = "Hello"
counter = 0;
password = "Happy@"
for i in username:
password = password + chr((counter + counter * ord(i) * ord(i)) % 0x42 + 33)
counter = counter + 1
print(password)
运行后结果为 :
得到 hello 用户的注册码为 : Happy@!GA0U