攻防世界逆向高手题之2ex1

攻防世界逆向高手题之2ex1

继续开启全栈梦想之逆向之旅~
这题是攻防世界逆向高手题的2ex1
攻防世界逆向高手题之2ex1

照例下载附件,解压后是两个文件:
攻防世界逆向高手题之2ex1
.
.
由于两个文件类型的题目做得比较少,所以联想到2021年11月深育杯REVERSE的press,.out文件应该是密文写入的文件:
攻防世界逆向高手题之2ex1
.
.
照例把mx程序扔入exeinfope中查看信息:
攻防世界逆向高手题之2ex1
.
.
由于一开始只注意到ELF程序,所以照例在linux中运行看一下主要回显信息:
攻防世界逆向高手题之2ex1
.
.
运行错误?好吧,从别人博客中学到了用 file 命令查看文件类型,效果等同 exeinfope
攻防世界逆向高手题之2ex1
.
在这里明白了MIPS是一个曾经与Armx86,并肩的三大主流架构之一,既然是框架,那就是一个大方向了,现在的我还遥遥不能岂及。(以下内容出自百度百科)

1981年,斯坦福大学教授约翰·轩尼诗领导他的团队,实作出第一个MIPS架构的处理器。他们原始的想法是通过指令管线化来增加CPU运算的速度。
.
1984年,约翰·轩尼诗教授离开斯坦福大学,创立MIPS科技公司。于1985年,设计出R2000芯片,1988年,将其改进为R3000芯片。

.
.
照例扔入IDA32,不过这里没有 Main 函数。我用的是IDA7.5,一开始卡顿了一下,后来才发现IDA是在提示我这是 MIPS 框架,要用不同的编译方法
攻防世界逆向高手题之2ex1
攻防世界逆向高手题之2ex1
攻防世界逆向高手题之2ex1
攻防世界逆向高手题之2ex1
攻防世界逆向高手题之2ex1
.
.
没办法,只能参考别人的WP了,大佬们也是牛逼,一眼就看出了这是 base64 的换码表单。。。。。
攻防世界逆向高手题之2ex1
.
.
真的佩服这些做题做出灵性来的大佬们,传统的 base64 加密密文我还是看得出的,但是这换码表单的 base64 密文,谁知道是不是某些没接触过的加密密文啊,以后遇到密文时先数一下个数算了,如果是 4 的倍数就判断是 base64 换码表单吧。(^ ~ ^)
.
.
回到题目上来,既然知道是 base64 换码表单加密,那就找出 base64 换码表出来就好了:
攻防世界逆向高手题之2ex1
攻防世界逆向高手题之2ex1
攻防世界逆向高手题之2ex1
攻防世界逆向高手题之2ex1
.
.
罢了罢了,拿到 base64 换码表单后开始解密了:
第一种方法:
传统加密表单替换法由于代码太长就不演示了
.
.
第二种方法,下标对应法

from base64 import b64decode 
miwen="_r-+_Cl5;vgq_pdme7#7eC0="
key1=list("@,.1fgvw#`/2ehux$~\"3dity%_;4cjsz^+{5bkrA&=}6alqB*-[70mpC()]89noD")	
base64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
secret=""
for i in miwen:
	k=key1.index(i)
	secret+=base64[k]
print(secret)
print(len(secret))
print(b64decode(secret))

.
.
第三种方法,0~64 索引分割法

d = ""
ret = ""
string = "│_r-+_Cl5;vgq_pdme7#7eC0="			#这里是多了一个|的,但是后面except异常处理解决了这个问题
base64_list = '@,.1fgvw#`/2ehux$~"3dity%_;4cjsz^+{5bkrA&=}6alqB*-[70mpC()]89noD'

for i in string:
	try:
		d += str(bin(base64_list.index(i))[2:]).rjust(6,"0")
	except Exception as e:
		continue
for i in range(0,len(d),8):
	ret += chr(int(d[i:i+8],2))
print(ret)

.
.
第四种方法,直接工具解密:
攻防世界逆向高手题之2ex1
.
.
第五种方法:直接映射码表替换表单:

import base64
std_base= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
mg_base='@,.1fgvw#`/2ehux$~\"3dity%_;4cjsz^+{5bkrA&=}6alqB*-[70mpC()]89noD'

de_trantab=str.maketrans(mg_base,std_base)		#de_trantab 输出 {mg_base: std_base}的映射

flag=base64.b64decode('_r-+_Cl5;vgq_pdme7#7eC0='.translate(de_trantab))

print(flag)

.
.
最终flag:

flag{change53233}

.
.
.
解毕!敬礼!

上一篇:[USACO12FEB]Cow Coupons G 题解


下一篇:Linux xxd命令详解【转】