初音ミクの消失

bbvvmm

字数统计: 421阅读时长: 1 min
2019/04/28 Share

bbvvmm

用ida打开 可以发现程序读入了用户名和密码,然后对用户名和密码进行了加密,如果用户名和密码校验正确,那么就cat flag

首先是用户名,用户名先进行一层加密,后进行sm4加密,最后进行变表base64转换为了一串密文

首先解决base64:

import base64
tab2 = "IJLMNOPKABDEFGHCQRTUVWXSYZbcdefa45789+/6ghjklmnioprstuvqwxz0123y="
tab1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="

s2 = "RVYtG85NQ9OPHU4uQ8AuFM+MHVVrFMJMR8FuF8WJQ8Y="
s1 = ""
for c in s2:
for i in range(len(tab2)):
if(tab2[i] == c):
s1 += tab1[i]
break

print(base64.b64decode(s1))

得到“EF468DBAF985B2509C9E200CF3525AB6”

然后是sm4加密算法,直接在网上找轮子
解密得到“36 32 36 31 36 34 37 32 36 35 37 32 33 31 33 32”

最后
两次转化成ascii
第一次62 61 54 72 65 72 31 32
第二次b a d r e r 1 2

然后就得到了用户名

对于密码,并不清楚这个密码使用了什么加密算法,只清楚这是一个虚拟机,有几百个操作数,好像是对密码进行了某种运算,最后将运算结果保存到内存的某个地方,如果这个内存数据为0,那么密码便正确

直接开ida动态远程调试:
能找到一个类似于栈的结构(一直+4 -4),在内存中找到这个栈对应的位置

通过不断地循环fastcall,看到栈中出现了我刚刚输入的字符串,并且旁边是一堆奇特字符串,而且长度也是六位,于是尝试交上去,成功

getshell的时候:输入密码之后不能直接按回车键,这样会多输入一个 \n,而应该ctrl+d,输入文本中断符,然后拿到flag

CATALOG
  1. 1. bbvvmm