寒假日常刷题(ctf——reverse)(三)

[HDCTF2019]Maze

首先确定是32位有壳,去壳后扔进ida

发现没有主函数,而且有一个部分被红色标注出来,并且在代码段里面出现了很多数据,就像这样:(并且前面还有main的字样)
在这里插入图片描述
分析一下可知,这里会跳转到下一行代码,但是不跳转也是下一行,可以发现是编译器把多余部分翻译成了汇编代码,也就是花指令(第一次遇到花指令,有点小激动)

先把跳转指令去掉(我第一次把这两行都nop了发现还是错的),之后再分析call这行,将它取消定义(快捷键u)
在这里插入图片描述
后面这里我是一行一行去掉的,发现直接去掉第一行就会变成这个样子
在这里插入图片描述
之前的数据段消失了,而且原本被取消定义的代码也自动定义成了代码(蒙对了ahhh)
之后因为还是没有定义主函数,还需要自己手动寻找主函数起始点和结束位置
起始点:
在这里插入图片描述
结束点:
在这里插入图片描述
很好,主函数定义出来了,按照往常方式反汇编出伪代码
在这里插入图片描述
直接看伪代码,总共14个循环,每个里面都有一个选择判断,最后判断这两个值是否是5还有-4

再进入字符串里面查看
在这里插入图片描述
发现这里有flag字样,翻译出来就是走出迷宫得到flag
而上面的一大排星号就是迷宫了,但是现在问题是,不知道迷宫型号,还有出发和结束点。
进入查看那排星号
在这里插入图片描述
发现要比较的那两个值具有初始值,所以初始值就是起点位置第0行第7个位置,结束就是第4行第5个位置。
数出来总共七十个字符,先蒙7行10列,画出来如下:

//7行10列
*******+**
******* **
****    **
**   *****
** **F****
**    ****
**********
//10行7列发现起始点就不在第0行了所以直接就是上面这个

那就是用wasd控制前后左右,从(0,7)走到(-4,5),也就是‘+’走到‘F’,
画出来就是:ssaaasaassdddw
套上flag提交即可

[MRCTF2020]Xor

照例是32位无壳,直接查看伪代码:
在这里插入图片描述
大概就是输入一个长度为27的字符串,之后每个字符都与它的位置相异或,最终得到的值是byte_41EA08

直接找出来这个字符串:
在这里插入图片描述
注意前面还有一个4Dh

直接写出解密脚本

#include <bits/stdc++.h>

using namespace std;

char s[40] = {'M','S', 'A', 'W', 'B', '~', 'F', 'X', 'Z', ':', 'J', ':', '`', 't', 'Q', 'J', '/"', 'N', '@', ' ', 'b', 'p', 'd', 'd', '}', '8', 'g'};
string c;
int main ()
{
	for(int i = 0; i <= 27; i ++) 
	{
		char t = i ^ s[i];
		c += t;
	}
	cout << c;
	return 0;
}

得到flag
在这里插入图片描述
MRCTF{@_R3@1ly_E2_R3verse!}
套上flag提交即可

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值