-
-
[原创]CTF-无限流解题思路
-
发表于: 2019-12-1 14:01 2460
-
虽然是个签到题.但是发出来给大家看下解题思路也挺好.
一丶定位位置
首先是定位位置.打开程序提示你输入随便输入一串数字会提示出错.弹出个信息框.
对于窗口类程序,特别是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即可.
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2019-12-2 17:54
被TkBinary编辑
,原因:
赞赏
他的文章
看原图
赞赏
雪币:
留言: