攻防世界RE新手区部分WP(持续更)

攻防世界RE

  • insanity
  • open-source
  • simple-unpack
  • logmein
  • python-trade
  • game
  • Hello, CTF
  • getit
  • re1
  • 待更新

insanity

对新手极其友好的送分题

1.拖进IDA
2.Shift+F12
3.Ctrl+F输入flag得到flag
在这里插入图片描述

9447{This_is_a_flag}

open-source

#include 
#include 

int main(int argc, char *argv[]) {
	/*if (argc != 4) {
    	printf("what?\n");
    	exit(1);
    }

    unsigned int first = atoi(argv[1]);
    if (first != 0xcafe) {
    	printf("you are wrong, sorry.\n");
    	exit(2);
    }

    unsigned int second = atoi(argv[2]);
    if (second % 5 == 3 || second % 17 != 8) {
    	printf("ha, you won't get it!\n");
    	exit(3);
    }

    if (strcmp("h4cky0u", argv[3])) {
    	printf("so close, dude!\n");
    	exit(4);
    }

    printf("Brr wrrr grr\n");*/

    unsigned int hash = 0xcafe * 31337 + (25 % 17) * 11 + 7 - 1615810207;
//由题意得first = 0xcafe  second = 25(猜测)  第三个参数为“h4cky0u”的长度等于7
    printf("Get your key: ");
    printf("%x\n", hash);
    return 0;
}

攻防世界RE新手区部分WP(持续更)_第1张图片
运行得flag:

c0ffee

simple-unpack

菜鸡拿到了一个被加壳的二进制文件(加壳?不存在的)
这题不用去壳都可以做

  • 解法一

1.拖进IDA选择用二进制文件打开
攻防世界RE新手区部分WP(持续更)_第2张图片
2.shift+F12,Ctrl+F查找字符串flag
攻防世界RE新手区部分WP(持续更)_第3张图片
双击进入或者单机后将筛选框的flag删掉
在这里插入图片描述
在这里插入图片描述
得flag:flag{Upx_1s_n0t_a_d3liv3r_c0mp4ny}

  • 解法二
    kali脱壳(习惯windows的自查Windows脱壳这里不做累述)
    攻防世界RE新手区部分WP(持续更)_第4张图片
    脱壳后用IDA打开,flag直接出来了
    攻防世界RE新手区部分WP(持续更)_第5张图片

     flag{Upx_1s_n0t_a_d3liv3r_c0mp4ny}
    

logmein

攻防世界RE新手区部分WP(持续更)_第6张图片
在v7长整数上按一下R键转换为字符串型
在这里插入图片描述
小端序得v7=“harambe”;
然后根据后面的算法得出代码:

#include
#include
using namespace std;
int main(){
	char v7[] = "harambe";
	char v8[] = ":\"AL_RT^L*.?+6/46";
	for(int i=0;i<strlen(v8);i++){
		v8[i] = v8[i]^v7[i%7];
	}
	cout<<v8;
} 

得出flag:

RC3-2016-XORISGUD

python-trade

运行一下发现就是让你输入一个flag然后验证正确与否
二话不说,pyc反编译在线工具
需要注意的是这个网站反编译下来是有两串相同的代码的,复制一段就可

#!/usr/bin/env python
# encoding: utf-8
import base64

def encode(message):
    s = ''
    for i in message:
        x = ord(i) ^ 32
        x = x + 16
        s += chr(x)

    return base64.b64encode(s)

correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
flag = ''
print 'Input flag:'
flag = raw_input()
if encode(flag) == correct:
    print 'correct'
else:
    print 'wrong'

观察源码发现flag经过:

  1. 取ASCII码值
  2. 与32异或
  3. 转化为ASCII字符

这里唯一需要了解的就是异或运算的逆运算还是异或运算 即:X ^ 32 ^ 32 = X

再一个,在我自己做题中发现一个问题,python中的base64函数与在线工具base64解码出来的答案貌似不同:
python:
在这里插入图片描述
在线工具:
攻防世界RE新手区部分WP(持续更)_第7张图片
用pyhton解出来的才是正确答案 (注意把前面的b删掉)
写出反编译代码:

correct = '^SdVkT#S ]`Y\\!^)\x8f\x80ism'

s = ''
for i in correct:
	x = chr((ord(i)-16)^32)
	s += x
	
print(s)

运行得flag:

nctf{d3c0mpil1n9_PyC}

game

1-8依次输一遍就可以了,亲测可用
攻防世界RE新手区部分WP(持续更)_第8张图片
flag:

zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}

想看更牛X解法的可以输完flag后去看攻防世界里面的WP,这里不做累述

Hello, CTF

攻防世界RE新手区部分WP(持续更)_第9张图片

(补充知识:C语言strcmp函数基本形式为strcmp(str1,str2),若str1=str2,则返回0;若str1str2,则返回正数。)

观察这一段就可,aSuccess是输出success提供验证作用,从这里出发可以看 到如果v10,v13的值相同则返回success,接着找v10怎么来的
攻防世界RE新手区部分WP(持续更)_第10张图片

  1. 输入字符串v9,如果v9的长度大于17(0x11=17)直接结束程序,再根据之后的观察,flag的长度多半就是17
  2. 依次取出v9中的单个字符,if(!v4)表示如果v9中含0直接结束程序
  3. sprintf:点进去观察asc_408044,貌似是以16进制将v4的值存储到v8中

在这里插入图片描述

  1. 将v8传递给v10,所以这里v10就是16进制串

整个过程的功能就是将输入的17位字符串转化为16进制串再与v13(即原16进制串)进行比较,如果相同就success,不同就wrong

所以直接把提供给你的那串16进制串:

437261636b4d654a757374466f7246756e

解码就行了
flag:

CrackMeJustForFun

getit

最重要的一段代码,之后的是写入flag.txt文件的操作,不太重要。
攻防世界RE新手区部分WP(持续更)_第11张图片
可翻译成一下代码:

char v3;//前面定义的,打开IDA看
int v5 = 0;
while(v5<strlen(s)){
	if(v5 & 1){
		v3 = 1;
	}
	else v3 = -1;
	
	t[v5+10] = s[v5] + v3;
	v5++;//v5=v5+1;
}

点开s、t分别查看内容:
攻防世界RE新手区部分WP(持续更)_第12张图片
可以看到:

char s[] = "c61b68366edeb7bdce3c6820314b7498";
char t[] = "SharifCTF{????????????????????????????????}";

根据以上内容写出大概的源码:

#include
#include
using namespace std;
int main(){
	char s[] = "c61b68366edeb7bdce3c6820314b7498";
	char t[] = "SharifCTF{????????????????????????????????}";
	int v5 = 0;
	int v3 = 0;
	while(v5<strlen(s)){
		if(v5 & 1){
			v3 = 1;
		}
		else v3 = -1;
		
		t[v5+10] = s[v5] + v3;
		v5++;
	}
	cout<<t;
	return 0;
} 
SharifCTF{b70c59275fcfa8aebf2d5911223c6589}

re1

点一下v6的值
在这里插入图片描述
点击这两个数值按R键转化为字符
在这里插入图片描述
注意小端序

DUTCTF{We1c0met0DUTCTF}

目前猜测最前面那个_mm_storeu_si128把v6的值传给了v5

待更新

你可能感兴趣的:(CTF,攻防世界)