首页
社区
课程
招聘
[原创]CTF-无限流解题思路
2019-12-1 14:01 1955

[原创]CTF-无限流解题思路

2019-12-1 14:01
1955
虽然是个签到题.但是发出来给大家看下解题思路也挺好.

 一丶定位位置
  首先是定位位置.打开程序提示你输入随便输入一串数字会提示出错.弹出个信息框.
对于窗口类程序,特别是MFC程序. 有几种方法可以进行逆向
1.看行为. 比如弹窗信息框. 则在信息框函数位置下断点. OD下断点可以看到. IDA也可以直接看引用
2. 程序需要输入 内容. 则在获取用户输入的函数下断点 如 GetWindowTextA/W版本 GetDlgItemTextA/W版本
3.通过消息查看.
鉴于这种程序很简单. 直接拖入IDA shift + F12 找到字符串. 可以看到PassWord. 直接双击过去即可.

二丶 分析算法
上面进行定位到程序位置 如下

然后开始分析算法
三丶进行逆运算
  分析算法.算法很简单. 首先根据他的逻辑.校验了两个位置. 一个是你输入的字符是否为空, 另一个是判断输入的字符要限定在 0- 9
也就是由此来确定.我们输入的 flag = 数字  限定输入数字

然后进行进一步查看. ```str[i] = vstrBuffer[userpassWord[i] - 0x30]
首先一步一步分析

userPassWorld[i] - 0x30  代表的意思是 用户输入的字符串,也就是数字.在内存中是ASCII吗. -0x30(AscII的0) 得出下标. 所以意思就是用户输入的字符串当做下标

vstrBuffer = "cuk!ogl"
vstrBuffer = [下标]  赋值给 str[i]
str[i] = vstrBuffer[下标]

进一步去校验函数查看.

发现其实就是 比如 获取出的字符 是否 == goluck!
换言之 就是我们 已知 计算出的明文 = goluck!  数组表 =  cuk!ogl 所以只需要逆运算处下标即可.

然而根据字符串数量. 觉着写程序太慢. 直接手工运算

数组表 = " cuk!ogl "
明文 = "goluck!"
下标  = 5461023
输入 flag即可.







[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2019-12-2 17:54 被TkBinary编辑 ,原因:
收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回