nuaaCTF2017 robots
apk文件 jadx打开
这里可以看到链接了一个 native-lib
看前面的checkans
这里对name base64解密再加密后 发现执行了一个从数据库查询的操作
看SQLAm
这里可以看到数据库名字是test
找到test 搜索md5后的值
结合长度为20的判断得到查询结果 kEvKc|roAkNADgGExUeq
然后check flag经过加密后与这个字符串相等
回到main看看加密操作
这里的 getsecret
是在.so链接里的
apk解包后IDA打开
找名字为getsecret的
这里作了一系列操作 其实就是一个线性变换
从最后的enc往前逆推即可得到初始输入 即flag
solution.c
#include<bits/stdc++.h>
using namespace std;
signed main(){
char v17[]="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!{|}~";
string enc="kEvKc|roAkNADgGExUeq";
int dest[1050],v19[100];
for(int i=0;i<strlen(v17);i++)
dest[i] = (i+16)%strlen(v17);
for(int i=0;i<enc.length();i++)
v19[i] = (enc[i]^i)%128;
for(int j=0;j<enc.length();j++){
for(int pos=0;pos<strlen(v17);pos++){
if(v19[j] == v17[pos]){
for(int k=0;k<strlen(v17);k++){
if(dest[k] == pos){
v19[j] = v17[k];
break;
}
}
break;
}
}
}
for(int x:v19)
cout<<char(x);
}
{4ndr0id1s!ntr3st1ng!}