首页
论坛
课程
招聘
雪    币: 20007
活跃值: 活跃值 (117)
能力值: ( LV15,RANK:2948 )
在线值:
发帖
回帖
粉丝

看雪CTF.TSRC 2018 团队赛-第2题

2018-12-3 17:22 1268

看雪CTF.TSRC 2018 团队赛-第2题

2018-12-3 17:22
1268
1.
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;

#define BUF_SIZE (30)

static char g_buf[BUF_SIZE];
static char *g_psz_input = new char[BUF_SIZE];
static char g_expected[] = "invalid argument";

class ClsVerify
{
public:
	~ClsVerify()
	{
		void verify(char *buf);
		verify(g_expected);
	}
};
static ClsVerify g_cls_verify;

void process(char *buf)
{
	buf[7] = '#';
	for (size_t i = 0; i < strlen(buf); ++i)
	{
		buf[i] ^= 0x1F;
	}
}

void verify(char *buf)
{
	if (!buf)
	{
		return;
	}
	for (size_t i = 0; i < strlen(buf); ++i)
	{
		buf[i] ^= 0x1C;
	}
	if (!strcmp(buf, g_psz_input))
	{
		cout << 'o';
		cout << 'k';
	}
}

int main()
{
	cout << "Please Input:";
	scanf_s("%s", g_buf, BUF_SIZE);
	size_t len = strlen(g_buf);
	if (len > BUF_SIZE || len < 10) 
	{
		printf("输入错误;");
		exit(0);
	}
	strcpy_s(g_psz_input, BUF_SIZE, g_buf);
	if (g_psz_input[7] != 'A')
	{
		printf("输入错误;");
		exit(0);
	}
	process(g_psz_input);
}
sn: jmubojgAbqdvnfmw

2. Just My Code
最新版的vs加入了/JMC编译选项(Debug默认是开启的), 开启后函数开头会加入__CheckForDebuggerJustMyCode调用

// debugger_jmc.c
__declspec(selectany) DWORD __DebuggerCurrentSteppingThreadId;

void __fastcall __CheckForDebuggerJustMyCode(unsigned char *JMC_flag)
{
    unsigned char *__DebuggerLocalJMCFlag = JMC_flag;

    if (*JMC_flag && __DebuggerCurrentSteppingThreadId != 0 && __DebuggerCurrentSteppingThreadId == GetCurrentThreadId()) {
NopLabel:
        __nop();
    }
}


[公告]SDC2020 看雪安全者开发者峰会10月23日将在上海举行!欢迎参加!

最后于 2018-12-4 09:07 被风间仁编辑 ,原因:
最新回复 (1)
雪    币: 2753
活跃值: 活跃值 (24)
能力值: ( LV12,RANK:209 )
在线值:
发帖
回帖
粉丝
htg 活跃值 2 2018-12-6 12:19
2
0
检测输入字符串A长度在10-30
检测A的第8个字符是否为为“A”
进入类的方法处理,将字符串A第八个字符替换为#,然后逐位异或1F,生成新的字符串A1
自动调用类的析构方法,将全局字符串B"invalid argument"逐位异或1C,生成新的字符串B1
比较A1和B1,相等输出ok
游客
登录 | 注册 方可回帖
返回