吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 17186|回复: 30
收起左侧

[CTF] 【CTF习题】Take the maze

  [复制链接]
whklhh 发表于 2017-12-12 00:08
本帖最后由 whklhh 于 2017-12-13 00:22 编辑

题目来源 CTF练习平台:http://123.206.31.85/ , re300-Take the maze

这个题目挺好玩儿的~~看文章之前可以先自己做一波看看(°∀°)ノ

首先运行,提示输入key

查壳显示无,拖入IDA根据字符串定位到main函数



这里可以看出基本格式:24位十六进制
另外在字符串里可以看到很多print ticket的字样
(这个操作有点像今年信息安全国赛的“欢迎来到加基森”呢,吓了我一跳)

下面可以看出来是写入文件的操作,如果直接把这个东西dump出来不就得到flag了吗~
二进制复制下来,发现是张二维码,惊喜的扫码识别:
Congratulations! The flag is your input + “Docupa”

哦 好吧= =我就知道没这么简单

乖乖分析check函数吧
流程挺清晰的,每次读取两个输入,分别通过switch进行保存


通过数组byte_541168再次转换作为最终值

第一次输入决定调用的函数,第二次输入则决定参数2

查看发现4个函数结构基本相同,大致如下
  
可以看出来,参数a2(即第二次输入)就是计数器,表示循环次数
每次循环都会对i += 26

但是注意,i只是一个局部变量,把它保存回a1上是有条件的:
[Asm] 纯文本查看 复制代码
i/26<=10
dword_540548[i] ^ dword_540068[i] ==0

这两个条件很明显,前者是限定范围,后者则是限定路径

限定路径的方法是要求这两个数组的对应值相同才以该方向移动
eg: 坐标为(4, 5)向下移动,则判断dword_540548[4*26+5] ^ dword_540068[4*26+5]==0,
相等则合法,移动成功,
不等则直接return 移动失败(i未写入a1)

同样查看另外三个函数可以得出限定范围
x∈[1, 24]
y∈[1, 10]

4个函数的数组彼此都不相同,也就是说每个坐标的可移动方向是不同的,因此要分别判断

这里刚开始卡了我很久想不通,本来以为是先改变i再校验路径合法性的
其实i+=26是在循环体结束时调用的,而结束循环的计数器校验放在循环体的开头
这也就意味着顺序其实是:
校验计数器→校验当前i的路径合法性→改变i→校验计数器

改变i和校验路径合法性的先后顺序决定着到底是“一个地方可以向某个方向移动”还是“一个地方可以由某个方向移动来
真正的方式是前者

移动方式找到了,下一步寻找终止check,也就是终点
反编译的伪代码中没有对该变量的调用,去反汇编中找到


311 = 11*26 + 25
也就是说长宽至少为12*26,从左上角移动到右下角即可

于是下一步是dump出路径
通过IDC脚本可以直接输出合法性的数组:
以一个为例:
[C++] 纯文本查看 复制代码
IDC>auto i;for(i=0;i<26*12;i++){if(Byte(0x540548+4*i)==Byte(0x540068+4*i))Message("1, ");else Message("0, ");}
1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

然后将4个方向的都dump下来以后,复制到脚本中进行处理从而生成地图
刚开始是用的4位二进制(1111)来表示,感觉不太清晰,于是直接用了箭头,看起来舒服点



(这里要感谢一波出题人没有用复杂的迷宫来为难,否则就只好再写一个走迷宫的算法了OTZ
写出解法字符串:
06360836063b0839073e0639

将其输入程序,发现还是不行
于是动态调试,发现这里对input进行了处理
[C++] 纯文本查看 复制代码
 input[16] ^= 1u;                            
    sub_45C748((int)input);

sub_45C748内部很复杂,感觉有点类似VMP

分析起来太麻烦了,干脆直接动态调试猜结果
输入测试字符串一串1时发现结果挺有规律的,下硬件断点也看到在进行一些花指令包裹的异或操作

于是输入测试字符串,将结果dump出来进行异或,发现这个函数的操作就是input ^ i  ~

于是将结果字符串进行转换,得到flag前段
[Python] 纯文本查看 复制代码
a = list("06360836063b0839073e0639")
a[16] = chr(ord(a[16]) ^ 1)
for i in range(24):
    print(chr(ord(a[i])^i), end='')


还记得之前的二维码么,最后要拼接上Docupa哦
提交,完成~

=======================================================================

有点在意那个对Input加密的sub_464b50,今天又看了一下
请教了下画眉师傅,果然是VM
有空过两天还是要回来实打实的静态分析一下……

之前依靠黑盒测试猜出来的加密方法
还是要再次感谢出题人手下留情,没整很复杂的方法了

ConsoleApplication1.rar

198.03 KB, 下载次数: 22, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 6吾爱币 +3 热心值 +5 收起 理由
瑟瑟发抖小菜虾 + 1 热心回复!
dasein + 1 谢谢@Thanks!
旋木过流年 + 1 + 1 谢谢@Thanks!
EnderCaster + 1 + 1 谢谢@Thanks!
chkds + 1 膜大佬!!!
iCupid + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| whklhh 发表于 2017-12-14 00:27
whklhh 发表于 2017-12-13 12:44
嗯。。。
没有列表_(:з」∠)_插入图片需要个快捷键(最好能接入论坛的图片上传功能,而不 ...

列表是一个类似于“
· 1
· 2
  · 2.1
“这样的格式
上传图片的话,有快捷键会方便一些嘛..因为打字的时候就不想碰鼠标了(

论坛现在的上传需要再多点几步贴进去,希望能简化(比如自动贴入到当前光标处)这样
 楼主| whklhh 发表于 2019-11-12 17:01
上山砍大树 发表于 2019-11-3 10:08
楼主可以分享一下怎样判断的按位异或吗。。刚入手这个题,就是最后的输入算法整不明白,加密函数看不懂,动 ...

用黑盒猜的,比如输入一串"0",看输出的内容,应该是"012345"...
然后再输入一串"1",再看输出的结果发现是“123456"...
通过改变输入的内容来猜出来算法
Aug.LuKai 发表于 2017-12-12 09:42
Hmily 发表于 2017-12-12 20:47
最后一个图片没有显示?还是尽量把图片上传论坛,防止失效。
 楼主| whklhh 发表于 2017-12-12 21:13
本帖最后由 whklhh 于 2017-12-12 21:15 编辑
Hmily 发表于 2017-12-12 20:47
最后一个图片没有显示?还是尽量把图片上传论坛,防止失效。

{:301_1009:} 查了一下纯文本格式发现是img头里面包了一段文字,不知道怎么进去的……
主要是说实话论坛的MD不太好用,所以一般不在论坛的编辑器上写……

点评

哪不好用,你给说说,我和插件作者反馈下,看看能不能改善。  详情 回复 发表于 2017-12-13 09:41
Hmily 发表于 2017-12-13 09:41
whklhh 发表于 2017-12-12 21:13
查了一下纯文本格式发现是img头里面包了一段文字,不知道怎么进去的……
主要是说实话论坛 ...

哪不好用,你给说说,我和插件作者反馈下,看看能不能改善。
 楼主| whklhh 发表于 2017-12-13 12:44
Hmily 发表于 2017-12-13 09:41
哪不好用,你给说说,我和插件作者反馈下,看看能不能改善。

{:301_1003:} 嗯。。。
没有列表_(:з」∠)_插入图片需要个快捷键(最好能接入论坛的图片上传功能,而不是现在这样直接出一个链接)
(本来以为没有标题,突然发现要在#号后面加个空格就行了)
如果可能的话有UML图当然更好啦~(不过使用率貌似并不高

点评

你表是目录吗?帖子页个人信息西方有。 图片直接用论坛本来的上传再贴进去不行吗?默认好像也带上传,不过那个也是调用系统相册功能,还没论坛自己上传好用。 其他说的我不太懂  详情 回复 发表于 2017-12-13 14:45
Hmily 发表于 2017-12-13 14:45
whklhh 发表于 2017-12-13 12:44
嗯。。。
没有列表_(:з」∠)_插入图片需要个快捷键(最好能接入论坛的图片上传功能,而不 ...

你表是目录吗?帖子页个人信息西方有。

图片直接用论坛本来的上传再贴进去不行吗?默认好像也带上传,不过那个也是调用系统相册功能,还没论坛自己上传好用。

其他说的我不太懂
heqiu000 发表于 2017-12-13 19:41
谢谢楼主分享
飞翔的大橙子 发表于 2017-12-14 00:08
围观,抽空看看。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-29 16:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表