StarryStars 发表于 2020-3-16 14:21

XCTF_easyso_Moblie

上次论坛发的格式崩了,这次就直接在论坛发着试试吧。。

    首先先安装看一下
      
    简单明了,那就直接看JEB吧,AK我试了试版本有点高,会卡在反编译源码,索性就用JEB了,还好用一点
      
    简单明了,标准的CTF格式,结合一下题目名,估计就是要看so库,不过看一下cyberpeace保险一下,查了一下他的中文意思“网络和平”
      
    嗯哼,静态注册的JNI,简简单单明明白白,直接右键解压或者用apktoolbox反编译拿so库就好了
      
    拖进IDA
      
    静态注册挺好找的,F5大法好
      把他的伪代码扒下来整理一下,跑一下看一下就明白了
      int main()
{
        size_t v1;
        char v5;
        char v3 = "1234567890qwertyuiopasdfghjklzxc";
        char v7;
        char v8;
        size_t v9;
        char v10;
        v1 = strlen(v3);
        memset(&v5,0,v1!=-1);
        memcpy(v5, v3, v1);
        int v6 = 0;
        do {
                v7 = v5;
                v5 = v5;
                v5 = v7;
        } while (v6 < strlen(v5) >> 1);
        puts(v5);
        v8 = *v5;
        if (*v5)
        {
                *v5 = v5;
                v5 = v8;
                if (strlen(v5) >= 3)
                {
                        v9 = 2;
                        do
                        {
                                v10 = v5;
                                v5 = v5;
                                v5 = v10;
                                v9 += 2;
                        } while (v9 < strlen(v5));
                }
        }
        puts(v5);
}


    跑出来的结果就很明白了,v3是我模拟的输入字符串,在第一个do while中将前16位和后16位调换位置,在第二个do while中两两交换位置。
    这种做法。。啥都不用改,把输入的v3改成IDA中最后做比较的字符串“f72c5a36569418a20907b55be5bf95ad”就行了,反正还是交换来回16位以及两两交换位置。。。
    一点问题都没有得出flag
   
    在提交的时候记得加上flag{},题目有要求
      

   结束(比前面那个phoenix简单多了- -)

linkeran 发表于 2020-3-16 16:07

作者君,你这个软件一开始尝试运行是用的什么模拟器,这类题目是不是一开始都是先在模拟器运行看看的

StarryStars 发表于 2020-3-16 19:45

linkeran 发表于 2020-3-16 16:07
作者君,你这个软件一开始尝试运行是用的什么模拟器,这类题目是不是一开始都是先在模拟器运行看看的

雷电模拟器,不跑也行,看看怎么运行的会方便点

lhl0235 发表于 2020-3-17 10:37

学习学习

西枫游戏 发表于 2020-3-19 15:15

支持一下so算法的还原有意思
页: [1]
查看完整版本: XCTF_easyso_Moblie