1.砍树
下载题目得到一个apk文件,jadx打开,查看Android.Manifest.xml
查看MainActivity
发现使用了一个I0o0I处理了输入和Syclover,猜测应该是对text处理后与Syclover对比,当result赋值为1就成功了。故查看I0o0I
发现I0o0I再so文件中,故查看libezreeeee.so文件
IDA打开,查找I0o0I
生成伪代码并修改一些可以分辨的函数
关键注意点:
1.在 函数中
text[i] ^= syclover[i % 7];
syc = Sycloverforerver实际上只被用到了前6个字符
exp
点击查看代码
#include <stdio.h>
#include <string.h>
int main(void) {
unsigned char text[40];
unsigned char syc[20] = "Sycloverfover";
unsigned char dest[36] = {
0x00, 0x20, 0x20, 0x17, 0x1B, 0x36, 0x0E, 0x36,
0x26, 0x17, 0x04, 0x2A, 0x29, 0x07, 0x26, 0x15,
0x52, 0x33, 0x2D, 0x0F, 0x3A, 0x27, 0x11, 0x06,
0x33, 0x07, 0x46, 0x17, 0x3D, 0x0A, 0x3C, 0x38,
0x2E, 0x22, 0x18
};
for (int i = 0; i < 35; ++i) {
text[i] = dest[i] ^ syc[i % 7];
}
printf("Recovered text: ");
for (int i = 0; i < 35; ++i) {
printf("%c", text[i]);
}
printf("\n");
return 0;
}