携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第22天,点击查看活动详情
MOBILE
Amy's Code
输入的字符串从第五位到""这一部分传入到Jlast,在Jlast里面进行md5+base64,
从这里可以看出,""到倒数第二位全部进行AES加密再进行base64加密,
key为加密之后的"K@e2022%%y",
iv是"I&V2022*",
进行逆向运算
#include<iostream>
using namespace std;
int main() {
int i = 0;
bool z = false;
char a[] = "=IkMBb+=gF2/Try5PCUruw1j";
char b[100];
for (int i2 = 5; i2 >= 0; i2--) {
if (!z) {
for (int i3 = 3; i3 >= 0; i3--) {
b[(i3 * 6) + i2] = a[i];
i++;
}
z = true;
}
else {
for (int i4 = 0; i4 <= 3; i4++) {
b[(i4 * 6) + i2] = a[i];
i++;
}
z = false;
}
}
for (int num = 0; num < 24; num++) {
cout << b[num];
}
cout << endl;
system("pause");
return 0;
}
然后将得到的内容进行MD5,base64解密。
得到的内容进行aes解密
就能得到flag。
MobileB
通过分析so文件 构造·payload
a = input("加密的数据:")[:-1]
print("输入so的数据:")
b = input("one:")
b+=b
c = input("two:")
c+=c
d = input("three:")
d+=d
e = input("four:")
e+=e
f = input("five:")
f+=f
g = input("six:")
g+=g
h = input("seven:")
h+=h
i = input("eight:")
i+=i
j = input("nine:")
j+=j
k = input("ten:")
k+=k
l = input("eleven:")
l+=l
m = input("twelve:")
m+=m
n = [5,1,51,2,52,12,512,3,53,13,513,23,523,123,5123,4,54,14,514,24,524,124,5124,34,534,134,5134
,234,5234,1234,51234]
a=list(map(int,a.split("0")))
o="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
p = []
for r in a:
p.append(o[n.index(r)])
q = [d,m,g,i,h,c,e,l,b,f,j,k]
print("ISCC{",end='')
for r in range(12):
print(q[r][q[r].index(p[r],26)-9],end='')
print('}')
MobileC
输入错误会有"输入错误,继续加油"的提示。
逻辑分析: 将输入进行 CBC 模式的 AES 加密,key通过Myjni.GetKey 获得,iv 是 aUBTJjg4Q2NDLg== 然后Base64后调用了 GetStr 后和指定的字符串比较,GetKey和GetStr都是mobilec库里的native函数
GetKey和GetStr都是mobilec库里的native函数
GetKey的值可以通过 objection hook直接获得: QERAPG9dPyZfTC5f
在libmobilec.so中找到Java_com_example_mobilec_MyJNI_Myjni_GetStr 调用了GetStrc
GetStrc里将第一个输入用"="补齐,然后分成了6组, 然后根据第二个输入选择6组中的几组作为结果返回,逆推回去,所以结果肯定6个组都包含,所以只需排列组合一下,用aes解密后筛选出有意义的答案即可。
from Crypto.Cipher import AES
import base64
def decrypt(password):
key = b'QERAPG9dPyZfTC5f'
iv = b"aUBTJjg4Q2NDLg=="
aes = AES.new(key,AES.MODE_CBC,iv)
result = aes.decrypt(base64.b64decode(password.encode()))
return result
from itertools import product
t =['c3KJ+XJQ','zJbrlKs=','NzQp2BU=','iLfdeK4=','J0xVWTT=','N3k3Kzy=']
for c in product(range(1,6),repeat=5):
if len(set(c)) != len(c):
continue
d = [0] + list(c)
s=''
for i in range(8):
for idx in d:
s+=t[idx][i]
print(decrypt(s[:-4]))