推荐肉丝r0ysue课程(包含安卓逆向与js逆向):https://img-blog.csdnimg.cn/7fa698312c304ab7bb0a03e2c866990f.png
Java层分析
MainActivity
其中是根据MyApp.m
值来判断是否是注册的
MyApp
MyApp.m的值是靠initSN方法来初始化的
RegActivity
注册界面,输入注册码后调用saveSN(sn)方法,将输入传入后保存注册码到本地
So层分析
JNI_OnLoad动态注册函数
saveSN
先打开/sdcard/reg.dat
文件,然后将origin数组拷贝到data数组
之后是一个加密,根据num的值作为下标来对原文进行异或
initSN
读取/sdcard/reg.dat
内的内容与"EoPAoY62@ElRD"
进行比较
EXP
ens = "EoPAoY62@ElRD"
data = "W3_arE_whO_we_ARE"
num = 2016
flag = ""
for i in range(len(ens)):
if i % 3 == 1:
num = (num + 5) % 16
xor = data[num + 1]
elif i % 3 == 2:
num = (num + 7) % 15
xor = data[num + 2]
else:
num = (num + 3) % 13
xor = data[num + 3]
flag += chr(ord(ens[i]) ^ ord(xor))
print(flag)
得到注册码201608Am!2333
则flag为xman{201608Am!2333}