xctf-writeup-黑客精神

黑客精神 解题报告

打开apk, 依次点下去,随便输入一个字符串,点保存,直接退出了

JEB 打开

1587124866101

m进行判断,未注册或者已经注册,如果没注册则进行注册

1587124932783

保存sn, 直接退出

看MyApp

1587125025411

IDA打开:

1587126060077

找到对应函数

initSN,saveSn,work

initSN

1587127356323

打开reg.data,和EoPAoY62@ElRD比较,如果没有就新建

saveSN

1587127452608

对reg.data的处理

work

1587127607183

捋一下

  1. 拿到m,判断值,如果为0 注册,进入2,如果为1,调用work,输出,在work里,m = 1 ,表示输入即为flag
  2. 注册的时候调用saveSN,将输入的文件经过一系列处理之后还是存在/sdcard/reg.dat
  3. saveSN在myApp这个Application中,创建的时候调用initSN,如果文件不存在,新建,并和EoPAoY62@ElRD比较,如果相等,setValue
  4. 在work里面可以就看到结果正确

所以解题步骤,输入EoPAoY62@ElRD,点击注册,

sdcard/reg.data里面拿到结果,加上xman{},即是最终结果

补充

分析saveSN过程拿到结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
env = "EoPAoY62@ElRD"
str1 = "W3_arE_whO_we_ARE"

flag = ""
v9 = 2016

for v10 in range(len(env)):
if v10 % 3 == 1:
v9 = (v9 + 5) % 16
v11 = str1[v9 + 1]
elif v10 % 3 == 2:
v9 = (v9 + 7) % 15
v11 = str1[v9 + 2]
else:
v9 = (v9 + 3) % 13
v11 = str1[v9 + 3]
flag += chr(ord(env[v10]) ^ ord(v11))
print(flag)