【攻防世界009】流浪者
这是看雪CTF 2019的一个题,题目是很标准的一个比赛签到题,没有反调试和混淆,只需要耐心分析汇编即可。
拿到手是一个 cm.exe,根据图标判断是MFC程序,图形界面程序分析起来比控制台要更难,程序运行起来是这样的:
随便输入点什么,程序提示密码错误,然后就会退出:
现在需要找到判断的逻辑,一个简单的方法是找字符串交叉引用,shift + f12 可以查看程序的字符串:
其中,请输入pass 这个字符串是我们不输入密码直接点验证会弹出的提示信息,校验的逻辑应该就在附近,通过这个方法我们可以找到该程序的校验函数:
该函数首先获取文本框中的内容:
得到用户输入key的字符数组后,进行了遍历,对于三种不同的情况,分别做了不同的处理,三种情况分别是数字,小写字母和大写字母:
而如果出现这三种情况以外的字符,则直接判断密码错。
上面的代码是根据三种不同的情况,对一个数组进行填值,根据指令寻址方式 mov [ebp+eax*4+SomeDwordArray]
,可以推断这是一个DWORD数组,由于不知道是干嘛用的,我将它命名为 SomeDwordArray 。对密钥遍历完成后,SomeDwordArray 被填值,然后作为参数传给了下一个函数 sub_4017F0 :
这里我们大概能够猜到这个题最终要怎么解,通过对 sub_4017F0 函数进行分析,应该可以反解出 SomeDwordArray 的值,然后通过 SomeDwordArray 反解正确的密钥。接下来是 sub_4017F0 的分析。
sub_4017F0 是比较简单的,最终有一个 strcmp 的字符串比较,其中一个是 “KanXueCTF2019JustForhappy” ,另一个就是运行时生成的。这个函数做的事情是遍历 SomeDwordArray 数组,然后填充 Str1,可以直接看汇编,逻辑比较简单。最后编写脚本也不难,这个题的逆算法还是很好写的XD
KanXue = "KanXueCTF2019JustForhappy"
abcdef = "abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ"
SomeDwordArray = []
Key = ""for i in range(len(KanXue)):SomeDwordArray.append(abcdef.find(KanXue[i]))print("SomeDwordArray =", SomeDwordArray)for dw in SomeDwordArray:if dw <= 9 and dw >= 0:Key += chr(dw + ord('0'))elif dw + ord('W') >= ord('a') and dw + ord('W') <= ord('z'):Key += chr(dw + ord('W'))else:Key += chr(dw + 0x1D)print(Key)
解出的 key 加上flag{} 就可以了。
【攻防世界009】流浪者相关推荐
- 攻防世界逆向入门题之流浪者
攻防世界逆向入门题之流浪者 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向入门题的流浪者 下载附件,照例扔入exeinfope中查看信息: 32位PE文件无壳,照例扔入ida32中查看伪代码: 是没 ...
- 攻防世界 web 009 XFF Referer burp
XFF头:全名X-Forwarded:代表客户端,html请求端的真实 IP 只有通过 HTTP 代理或者负载均衡服务器时才会添加该项(可伪装) 用法: X-Forwarded-For:123.1 ...
- 攻防世界 新手练习区 MISC+WEB
攻防世界 新手练习区MISC+WEB MISC 新手练习区 002 pdf 方法1 方法2 003 如来十三掌 004 give_you_flag 005 stegano 006 坚持60s 007 ...
- 刷攻防世界crypto
小白刷攻防世界crypto新手区 001 base64 002 Caesar 003 Morse 004 幂数加密 005 Railfence 006 不仅仅是Morse 007 混合编码 008 e ...
- XCTF攻防世界练习区-web题(新手)
XCTF攻防世界练习区-web题(新手) https://adworld.xctf.org.cn/task?now_checked_num=3&name=web 001 view_source ...
- 【攻防世界001】Guess-the-Number
攻防世界之前刷了几十题了,没写wp,感觉很简单没啥意思.后来参加了几次比赛,发现有点干不动,决定还是老老实实刷题好了.这是第一篇wp,这题很简单,是个jar,用jd-gui可以得到java源码. 原来 ...
- 攻防世界(pwn)--Mary_Morton 利用格式化字符串+栈溢出破解Canary的保护机制
ctf(pwn) canary保护机制讲解 与 破解方法介绍 程序执行流程 有三个选项,1是利用栈溢出,2是利用格式化字符串,3是退出;可连续输入多次; IDA分析 解题思路 程序存在canary保护 ...
- 攻防世界(Pwn) forgot---栈溢出;(方法二)
攻防世界(Pwn) forgot-栈溢出:(方法一) 里面对问题描述的更详细一点 返回目标函数 0x80486CC 方法二(爆破流) 因为最终返回的是 v3[0]-v3[9] 之中的一个函数, v3[ ...
- 攻防世界(Pwn) forgot---栈溢出;(方法一)
攻防世界(Pwn) forgot-栈溢出:(方法二) 介绍 这道题表面看起来有点复杂,其实很简单,有两种方法可以来做这一道题; 方法一(精确打击) 文件运行流程是: 1.先输入名字 2. 输入一串字符 ...
最新文章
- 赫夫曼树建立c语言源程序编译结果详细解释,哈夫曼树的建立与实现最终版(备份存档)...
- [转] MongoDB 入门
- 《java语法实例2~15章》
- python文字游戏 生成数字菜单_pygame游戏之旅 游戏中添加显示文字
- GCD异步加载网络图片
- Android音视频【六】视频数据存储方式YUV
- CAM(内容可寻址存储器)的认知
- oracle开发的小技巧(原创)
- 印度首颗 CPU 横空出世:软件开发已开动
- java URL和URI
- cad汉仪长仿宋体_hzcf.shx字体下载
- 友华PT939G移动光猫开启telnet获取配置文件
- java集成极光推送
- 《王垠、赵海平列传(1)》:“成为最伟大的计算机科学家!”
- c语言pow函数原型_C语言pow函数
- mac php dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib 亲测有效
- 法规标准-UN R152标准解读
- setContentView报错NullPointerException: Attempt to invoke virtual method on a null object reference
- 驱动位置硬盘无法识别
- 基坑计算理论m法弹性支点法_微型防腐螺旋管支挡结构的内力与变形规律
热门文章
- oracle供需平衡,OracleR12_MRP_功能介绍_V2.ppt
- plsql tables 没有表_InnoDB 层锁、事务、统计信息字典表 | 全方位认识 information_schema...
- AI:2020年6月22日北京智源大会演讲分享之09:50-10:40 Anil教授《Pattern Recognition: Statistics to Pattern Recognition》
- 成功解决ModuleNotFoundError: No module named 'keras_retinanet.utils.compute_overlap'
- Algorithm之EM:Expectation Maximization简介、代码实现
- Gradient Tree Boosting:梯度提升树详解
- 认知实习培训第四天总结
- LeetCode Implement Trie(Prefix Tree)
- Java基础语法 第2节 Java语言基本语法
- PHP教程-防止网站被刷票的小技巧