攻防世界逆向高手题之2ex1
继续开启全栈梦想之逆向之旅~
这题是攻防世界逆向高手题的2ex1
照例下载附件,解压后是两个文件:
.
.
由于两个文件类型的题目做得比较少,所以联想到2021年11月深育杯REVERSE的press,.out文件应该是密文写入的文件:
.
.
照例把mx程序扔入exeinfope中查看信息:
.
.
由于一开始只注意到ELF程序,所以照例在linux中运行看一下主要回显信息:
.
.
运行错误?好吧,从别人博客中学到了用 file
命令查看文件类型,效果等同 exeinfope
:
.
在这里明白了MIPS
是一个曾经与Arm
、x86
,并肩的三大主流架构
之一,既然是框架,那就是一个大方向
了,现在的我还遥遥不能岂及。(以下内容出自百度百科)
1981年,斯坦福大学教授约翰·轩尼诗领导他的团队,实作出第一个MIPS架构的处理器。他们原始的想法是通过指令管线化来增加CPU运算的速度。
.
1984年,约翰·轩尼诗教授离开斯坦福大学,创立MIPS科技公司。于1985年,设计出R2000芯片,1988年,将其改进为R3000芯片。
.
.
照例扔入IDA32,不过这里没有 Main
函数。我用的是IDA7.5
,一开始卡顿了一下,后来才发现IDA是在提示我这是 MIPS
框架,要用不同的编译方法
:
.
.
没办法,只能参考别人的WP了,大佬们也是牛逼,一眼就看出了这是 base64 的换码表单。。。。。
.
.
真的佩服这些做题做出灵性来的大佬们,传统的 base64
加密密文我还是看得出的,但是这换码表单
的 base64 密文,谁知道是不是某些没接触过的加密密文啊,以后遇到密文时先数一下
个数算了,如果是 4
的倍数就判断是 base64 换码表单吧。(^ ~ ^)
.
.
回到题目上来,既然知道是 base64 换码表单加密,那就找出 base64 换码表出来就好了:
.
.
罢了罢了,拿到 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)
.
.第四种方法,直接工具解密:
.
.第五种方法:直接映射码表替换表单:
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}
.
.
.
解毕!敬礼!