上次论坛发的格式崩了,这次就直接在论坛发着试试吧。。
首先先安装看一下
简单明了,那就直接看JEB吧,AK我试了试版本有点高,会卡在反编译源码,索性就用JEB了,还好用一点
主活动
简单明了,标准的CTF格式,结合一下题目名,估计就是要看so库,不过看一下cyberpeace保险一下,查了一下他的中文意思“网络和平”
JNI
嗯哼,静态注册的JNI,简简单单明明白白,直接右键解压或者用apktoolbox反编译拿so库就好了
so库位置
拖进IDA
IDA
静态注册挺好找的,F5大法好
把他的伪代码扒下来整理一下,跑一下看一下就明白了
[C] 纯文本查看 复制代码 int main()
{
size_t v1;
char v5[33];
char v3[33] = "1234567890qwertyuiopasdfghjklzxc";
char v7;
char v8;
size_t v9;
char v10;
v1 = strlen(v3);
memset(&v5[v1],0,v1!=-1);
memcpy(v5, v3, v1);
int v6 = 0;
do {
v7 = v5[v6];
v5[v6] = v5[v6 + 16];
v5[v6++ + 16] = v7;
} while (v6 < strlen(v5) >> 1);
puts(v5);
v8 = *v5;
if (*v5)
{
*v5 = v5[1];
v5[1] = v8;
if (strlen(v5) >= 3)
{
v9 = 2;
do
{
v10 = v5[v9];
v5[v9] = v5[v9 + 1];
v5[v9 + 1] = v10;
v9 += 2;
} while (v9 < strlen(v5));
}
}
puts(v5);
}
加密算法结果
跑出来的结果就很明白了,v3是我模拟的输入字符串,在第一个do while中将前16位和后16位调换位置,在第二个do while中两两交换位置。
这种做法。。啥都不用改,把输入的v3改成IDA中最后做比较的字符串“f72c5a36569418a20907b55be5bf95ad”就行了,反正还是交换来回16位以及两两交换位置。。。
一点问题都没有得出flag
在提交的时候记得加上flag{},题目有要求
结束(比前面那个phoenix简单多了- -)
|