实验吧-逆向-该题不简单

解题链接
http://www.shiyanbar.com/ctf/14

实验吧-逆向-该题不简单_第1张图片
直接下载,我是拖到虚拟机中(xp,吾爱破解版,文章最后附上链接),先随便输入用户名注册码,得到密钥无效!然后就可以根据密码无效用IDA pro x86搜索
实验吧-逆向-该题不简单_第2张图片

实验吧-逆向-该题不简单_第3张图片
看到如下图所示的,密钥无效

实验吧-逆向-该题不简单_第4张图片
在左侧看出这个调用了 : sub_4011D0
分析可知道,当返回值不为 0 的时候 , 就跳转到 密钥无效 的分支
转到 sub_4011D0
直接 f5 反编译为 C代码
(f5得看版本,64和32如果和程序不对应得情况,f5失效)
实验吧-逆向-该题不简单_第5张图片

实验吧-逆向-该题不简单_第6张图片

c语言代码可以读得懂,这段代码会将

1.用户输入的用户名的每个字符遍历一遍
2.把每个字符的序号(从 0 开始算)与这个字符的ASCII码的平方相乘 
3.然后整体再加上序号 
4.得到的和继续对 0x42 求余 
5.最后将结果加上 33 
6.然后再转为ASCII码
7.最后再将上述结果连接在字符串 'Happy@' 之后构成注册码

可用python写脚本运行
代码如下
username ——>u
counter ——>c
password——>p

u= "Hello"
c= 0;
p= "Happy@"
for i in u:
    p = p + chr((c + c * ord(i) * ord(i)) % 0x42 + 33)
    c = c + 1
print(p)

Python2.7运行

Happy@!GA0U

实验吧-逆向-该题不简单_第7张图片
得到flag

吾爱破解虚拟机链接:
https://www.52pojie.cn/thread-661779-1-1.html
有安装问题可以私聊我~

你可能感兴趣的:(RE)