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

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

[MRCTF2020]Transform

首先查壳后发现是64位无壳,运行后进ida

在这里插入图片描述
查看伪代码在这里面可以看到大概思路是输入一个字符串str,之后字符串每一位都用dword-40f040来打乱,紧接着是在与它异或一下,这是第一重循环
在这里插入图片描述
之后第二重循环是就是循环判断改变过的字符串和byte_414040比较是否相同,由此可知,最后的byte_414040字符串就是最终处理结束的字符串,直接按照这个思路写代码

#include <iostream>

using namespace std;

int lowbit(int x)
{
	return x & -x;//在原本伪代码里面看到了一个大写的lowbit,以为是树状数组里面的lowbit函数,实际上并不是,直接异或就可以
}

/*
LOWORD()得到一个32bit数的低16bit  
HIWORD()得到一个32bit数的高16bit
LOBYTE()得到一个16bit数最低(最右边)那个字节
HIBYTE()得到一个16bit数最高(最左边)那个字节
*/
int nm[50] = {0x9, 0x0A, 0x0F, 0x17, 0x7, 0x18, 0x0C, 0x6, 0x1, 0x10, 0x3, 0x11, 0x20, 0x1D, 0x0B, 0x1E, 0x1B, 0x16, 0x4, 0x0D, 0x13, 0x14, 0x15, 0x2, 0x19, 0x5, 0x1F, 0x8, 0x12, 0x1A, 0x1C, 0x0E, 0x8};
int op[50] = {0x67, 0x79, 0x7B, 0x7F, 0x75, 0x2B, 0x3C, 0x52, 0x53, 0x79, 0x57, 0x5E, 0x5D, 0x42, 0x7B, 0x2D, 0x2A, 0x66, 0x42, 0x7E, 0x4C, 0x57, 0x79, 0x41, 0x6B, 0x7E, 0x65, 0x3C, 0x5C, 0x45, 0x6F, 0x62, 0x4D, 0x3F};
int fa[50];
int main ()
{
	for(int i = 0; i < 33; i ++) op[i] ^= nm[i];
	for(int i = 0; i < 33; i ++) fa[nm[i]] = op[i];
	for(int i = 0; i < 33; i ++) 
	{
		char c;
		c = fa[i];
		cout << c;
	}
	return 0;
}

最终得到flag{Tr4nsp0sltiON_Clph3r_1s_3z}

[WUSTCTF2020]level2
前面两道题不太会做,先跳到了这道题

首先是32位有壳,直接upx脱壳
之后拖到ida里面不用操作直接一眼看到答案
在这里插入图片描述
已经是比较靠后的题了,解出来的人也只有七百多,但是实际上flag就是上图黄字,属实惊到我了doge
flag{Just_upx_-d}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值