这是看雪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】流浪者相关推荐

  1. 攻防世界逆向入门题之流浪者

    攻防世界逆向入门题之流浪者 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向入门题的流浪者 下载附件,照例扔入exeinfope中查看信息: 32位PE文件无壳,照例扔入ida32中查看伪代码: 是没 ...

  2. 攻防世界 web 009 XFF Referer burp

    XFF头:全名X-Forwarded:代表客户端,html请求端的真实 IP 只有通过  HTTP 代理或者负载均衡服务器时才会添加该项(可伪装) 用法:  X-Forwarded-For:123.1 ...

  3. 攻防世界 新手练习区 MISC+WEB

    攻防世界 新手练习区MISC+WEB MISC 新手练习区 002 pdf 方法1 方法2 003 如来十三掌 004 give_you_flag 005 stegano 006 坚持60s 007 ...

  4. 刷攻防世界crypto

    小白刷攻防世界crypto新手区 001 base64 002 Caesar 003 Morse 004 幂数加密 005 Railfence 006 不仅仅是Morse 007 混合编码 008 e ...

  5. XCTF攻防世界练习区-web题(新手)

    XCTF攻防世界练习区-web题(新手) https://adworld.xctf.org.cn/task?now_checked_num=3&name=web 001 view_source ...

  6. 【攻防世界001】Guess-the-Number

    攻防世界之前刷了几十题了,没写wp,感觉很简单没啥意思.后来参加了几次比赛,发现有点干不动,决定还是老老实实刷题好了.这是第一篇wp,这题很简单,是个jar,用jd-gui可以得到java源码. 原来 ...

  7. 攻防世界(pwn)--Mary_Morton 利用格式化字符串+栈溢出破解Canary的保护机制

    ctf(pwn) canary保护机制讲解 与 破解方法介绍 程序执行流程 有三个选项,1是利用栈溢出,2是利用格式化字符串,3是退出;可连续输入多次; IDA分析 解题思路 程序存在canary保护 ...

  8. 攻防世界(Pwn) forgot---栈溢出;(方法二)

    攻防世界(Pwn) forgot-栈溢出:(方法一) 里面对问题描述的更详细一点 返回目标函数 0x80486CC 方法二(爆破流) 因为最终返回的是 v3[0]-v3[9] 之中的一个函数, v3[ ...

  9. 攻防世界(Pwn) forgot---栈溢出;(方法一)

    攻防世界(Pwn) forgot-栈溢出:(方法二) 介绍 这道题表面看起来有点复杂,其实很简单,有两种方法可以来做这一道题; 方法一(精确打击) 文件运行流程是: 1.先输入名字 2. 输入一串字符 ...

最新文章

  1. 赫夫曼树建立c语言源程序编译结果详细解释,哈夫曼树的建立与实现最终版(备份存档)...
  2. [转] MongoDB 入门
  3. 《java语法实例2~15章》
  4. python文字游戏 生成数字菜单_pygame游戏之旅 游戏中添加显示文字
  5. GCD异步加载网络图片
  6. Android音视频【六】视频数据存储方式YUV
  7. CAM(内容可寻址存储器)的认知
  8. oracle开发的小技巧(原创)
  9. 印度首颗 CPU 横空出世:软件开发已开动
  10. java URL和URI
  11. cad汉仪长仿宋体_hzcf.shx字体下载
  12. 友华PT939G移动光猫开启telnet获取配置文件
  13. java集成极光推送
  14. 《王垠、赵海平列传(1)》:“成为最伟大的计算机科学家!”
  15. c语言pow函数原型_C语言pow函数
  16. mac php dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib 亲测有效
  17. 法规标准-UN R152标准解读
  18. setContentView报错NullPointerException: Attempt to invoke virtual method on a null object reference
  19. 驱动位置硬盘无法识别
  20. 基坑计算理论m法弹性支点法_微型防腐螺旋管支挡结构的内力与变形规律

热门文章

  1. oracle供需平衡,OracleR12_MRP_功能介绍_V2.ppt
  2. plsql tables 没有表_InnoDB 层锁、事务、统计信息字典表 | 全方位认识 information_schema...
  3. AI:2020年6月22日北京智源大会演讲分享之09:50-10:40 Anil教授《Pattern Recognition: Statistics to Pattern Recognition》
  4. 成功解决ModuleNotFoundError: No module named 'keras_retinanet.utils.compute_overlap'
  5. Algorithm之EM:Expectation Maximization简介、代码实现
  6. Gradient Tree Boosting:梯度提升树详解
  7. 认知实习培训第四天总结
  8. LeetCode Implement Trie(Prefix Tree)
  9. Java基础语法 第2节 Java语言基本语法
  10. PHP教程-防止网站被刷票的小技巧