[BJDCTF 2nd]8086 && [GKCTF2020]Check_1n && [GXYCTF2019]luck_guy

本文详细解析了三个CTF挑战,涉及8086汇编代码分析,通过IDA查看和理解循环程序,找到字符串与1FH做抑或的操作,得出BJDCTF的flag。接着是GKCTF2020的开机密码解密,通过IDAS搜索找到hello world作为密码,解密Base64获取flag。最后是GXYCTF2019的解谜,通过分析脚本逻辑,确定flag的生成顺序,得出GXYCTF的flag。

[BJDCTF 2nd]8086

题目是8086,猜测与汇编代码有关系
Ida打开,直接看看汇编代码试试 View–opensubview–disassembly
发现一段字符串
在这里插入图片描述
往下看,下面是一个循环程序,选中它,按c选force把他强制转换成汇编。
在这里插入图片描述
dec是自减函数。例如:DEC AL; AL内容减1
loop指令为循环指令
mov cx,22h表示循环了22次
在这里插入图片描述
字符串与1fh做抑或
Python脚本
在这里插入图片描述

x=']U[du~|t@{z@wj.}.~q@gjz{z@wzqW~/b;'
f=''
for i in x:
	f+=chr(ord(i)^0x1F)
print(f)

运行结果
在这里插入图片描述
Flag:BJD{jack_de_hu1b1an_xuede_henHa0}

[GKCTF2020]Check_1n

在这里插入图片描述
在这里插入图片描述

需要开机密码
Ida打开shift f12
在这里插入图片描述
找到这个 hello world即为开机密码,输入开机密码
在这里插入图片描述
选择flag
在这里插入图片描述
像是base64加密,解密
选择打砖块
在这里插入图片描述
在这里插入图片描述
Flag:flag{f5dfd0f5-0343-4642-8f28-9adbb74c4ede}
后来了解
在这里插入图片描述
这一串字符为base58加密 解密可得出flag

[GXYCTF2019]luck_guy

在这里插入图片描述
在这里插入图片描述
进入patch_me
在这里插入图片描述
进入get_flag
在这里插入图片描述
在这里插入图片描述
从第21行可以知道f1= GXY{do_not_
在这里插入图片描述
但是f2的值还是空的
Case4给f2赋值9180147350284624745LL
Case5给f2做了处理
所以得到flag的顺序为case4>case5>case1.
写脚本
在这里插入图片描述

#include <stdio.h>
#include <string.h>
int main()
{
	char f2[] = { 0x69,0x63,0x75,0x67,0x60,0x6f,0x66,0x7f,0 };
	for (int i = 0; i < 8; i++)
	{
		if (i % 2 == 1)
			f2[i] -= 2;
		else
			f2[i] -= 1;
	}
	char f1[] = "GXY{do_not_";
	char flag[20];
	memset(flag, 0,20);			//memset函数
	strcat(flag, f1);				
	strcat(flag, f2);
	puts(flag);
	return 0;
}

在这里插入图片描述
Flag:GXY{do_not_hate_me}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值