nuaaCTF2017 robots

apk文件 jadx打开
image
image
这里可以看到链接了一个 native-lib
看前面的checkans
image
这里对name base64解密再加密后 发现执行了一个从数据库查询的操作
看SQLAm
image
这里可以看到数据库名字是test
找到test 搜索md5后的值
image
结合长度为20的判断得到查询结果 kEvKc|roAkNADgGExUeq
然后check flag经过加密后与这个字符串相等
回到main看看加密操作
image
这里的 getsecret是在.so链接里的
apk解包后IDA打开
找名字为getsecret的
image
这里作了一系列操作 其实就是一个线性变换
从最后的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);
}

image

{4ndr0id1s!ntr3st1ng!}

posted @ 2023-10-31 22:45  N0zoM1z0  阅读(39)  评论(0编辑  收藏  举报