2018安恒杯10月月赛RE&MISC周周练

十月月赛反正我是错过了,这次周周练有四道题来看看,菜鸡就该多学习

1.easytree

拖进linux,发现跑不起来,eng? file一下,结果发现是exe

2018安恒杯10月月赛RE&MISC周周练_第1张图片

PEID查一下

2018安恒杯10月月赛RE&MISC周周练_第2张图片

upx壳,直接脱,拖进IDA,直接看main函数

2018安恒杯10月月赛RE&MISC周周练_第3张图片

依次分析一下函数吧,2400不知道是啥,198E里面就是欢迎我们的字符串

我们输入的的字符串长度要是15才行

最后我们运算一通之后字符串要转变为aWNuZXJyc2VhZXRydmVl,长度是20

长度从15变成20,多了四分之一,怀疑是base64我觉得还是比较合理的233

我们看函数401794,如下

2018安恒杯10月月赛RE&MISC周周练_第4张图片

的确基本就是base64加密的流程,看一下加密字典

没有改变过,我们安心的base64解密一波:icnerrseaetrvee

我们上面的两个函数肯定还有些操作,结合题目,我们来一手眼拔flag…………

tree can reverse i

flag:icanreversetree,然后不对,奇怪,谁能救救我,自救吧……

看一下前面的函数,如下

2018安恒杯10月月赛RE&MISC周周练_第5张图片

学过数据结构的话,可以看出来这是个二叉树,也没什么特别的变换,看下一个函数

2018安恒杯10月月赛RE&MISC周周练_第6张图片

这是一个迭代函数,结合二叉树,猜测是遍历二叉树的算法,一共就三种遍历方式

原文:icnerrseaetrvee

前序:icanreversetree

中序:太扯淡了吧……

OD调一下,感觉也没问题,emmm咋回事

2018安恒杯10月月赛RE&MISC周周练_第7张图片

2.BASE++

直接给了我ida分析的文件,打开看一下主函数,如下

2018安恒杯10月月赛RE&MISC周周练_第8张图片

有三个transfrom函数,一上来还会判断字符串长度是否小于32,转换后的字符串要等与TRLT5amLBoLT5Z6Fa5LqN6mkTomqR66Da4LqX5mgBwkkP5wmTZ6D====,思路还是清晰的,分析一下函数

transfrom1这一看就是个转换,如下

2018安恒杯10月月赛RE&MISC周周练_第9张图片

是一个替换小写字母的转换

看transfrom2,发现里面还嵌套着transfrom1

在transfrom里面看见了一个字典,如下

但是别高兴的太早,对字典有一些操作,也就是说,现在只是伪字典,如下

2018安恒杯10月月赛RE&MISC周周练_第10张图片

脚本

s='BCDEFGHIJKLMNOPQRSTUVWXYZ'
key=''

for i in range(len(s)):
    if i%2==1:
        key+=chr(ord(s[i])+32)
    else:
        key+=s[i]

key+='765432'
print(key)  #BcDeFgHiJkLmNoPqRsTuVwXyZ765432

这密码表和base64的密码表长度相同,结合题目,可以理解为这题是base加密的变形,这里替换表发现少了一位,后面我自己补上了

然后分析第三个transfrom,如下

2018安恒杯10月月赛RE&MISC周周练_第11张图片

给了我个注释,五步一变,一变变五,转换全靠base_tran_5这个函数

2018安恒杯10月月赛RE&MISC周周练_第12张图片

switch算是一个补齐操作,缺的补等号,可以说是很base了,看最后一段长度是否是8的倍数,不是的话补等号

直接替换base的编码表运算一波,至于是base32还是64的话,因为这里有个小写字母的操作,比较符合base32,所以我就先base32了

import string
import base64
my_base64table = "BcDeFgHiJkLmNoPqRsTuVwXyZa765432"
std_base64table ="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"
s = "TRLT5amLBoLT5Z6Fa5LqN6mkTomqR66Da4LqX5mgBwkkP5wmTZ6D===="
s = s.translate(string.maketrans(my_base64table,std_base64table))
print base64.b32decode(s)

但是不幸的是,解出来是乱码,一定是哪里出了问题,回上去看吧,又要多掉些头发了

后来发现密码表我们在静态里看到的只是第一步,第二步没发现,在动态里还有第二步,结果如下

2018安恒杯10月月赛RE&MISC周周练_第13张图片

真叫人头秃,后面记得补上765432

再次解码得到:10n78ppn3ro00o70r2opop5s3roqq937

再经过transfrom1,逆回去就好啦

3.just do it

打开压缩包,里面有个txt,里面的内容看上去是base,解密一下

2018安恒杯10月月赛RE&MISC周周练_第14张图片

另外个稳文件file一下

是个pyc文件,反编译一下,有了函数逆一下就好了,res为38位去掉flag{}正好32位,猜是md5,爆破加逆向

import random

res=[33, 33, 90, 88, 6, 27, 36, 11, 59, 33, 47, 74, 28, 26, 6, 0, 15, 40, 100, 98, 96, 3, 52, 87, 94, 89, 65, 50, 51, 48, 38, 67, 100, 54, 45, 33, 39, 66]

ran = random.randint(99, 109)
#print(ran)
key = [
        151,
        157,
        163,
        167,
        173,
        179,
        181,
        191,
        193,
        197,
        199,
        211,
        223,
        227,
        229,
        233,
        239,
        241,
        251,
        257,
        263,
        269,
        271,
        277,
        281,
        283,
        293,
        307,
        311,
        313,
        317,
        331,
        337,
        347,
        349,
        353,
        359,
        367]
        
for i in range(99,109):
	flag = ''
	for j in range(len(res)):
		n=0
		while(True):
			temp = (res[j]+n*i)^key[j]
			if (temp > 47 and temp  <58) or (temp>96 and temp <103):
					flag+=chr((res[j]+n*i)^key[j])
					break
			elif n > 10:
				break
			else:
				n+=1
	print(flag)

取后32位就好了

4.未知流量

打开压缩包是两个文件

我先吧pcapng转成pcap,然后又用wireshark分析test2,不知道要干嘛,然后用wireshark打开pcapng和pcap

发现有很多流量,应该是成功了第一步吧……

然后……啥东西啊,流量分析我一点也不懂

 

 

 

 

 

 

 

 

你可能感兴趣的:(CTF_WP)