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

来源:互联网 发布:python win32ui 编辑:程序博客网 时间:2024/05/17 04:04

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

这里写图片描述
直接下载,我是拖到虚拟机中(xp,吾爱破解版,文章最后附上链接),先随便输入用户名注册码,得到密钥无效!然后就可以根据密码无效用IDA pro x86搜索
这里写图片描述

这里写图片描述
看到如下图所示的,密钥无效

这里写图片描述
在左侧看出这个调用了 : sub_4011D0
分析可知道,当返回值不为 0 的时候 , 就跳转到 密钥无效 的分支
转到 sub_4011D0
直接 f5 反编译为 C代码
(f5得看版本,64和32如果和程序不对应得情况,f5失效)
这里写图片描述

这里写图片描述

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 + 1print(p)

Python2.7运行

Happy@!GA0U

这里写图片描述
得到flag

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

原创粉丝点击