吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5357|回复: 30
收起左侧

[Android CTF] 攻防世界mobile之easy-so

  [复制链接]
正己 发表于 2020-12-1 21:37

前言:

每周一题,做做笔记,这个也不难,就是一个简单的算法。
软件链接:飞机票


过程:

运行app,根据提示的字符串,打开jadx,搜索字符串,然后发现上方有个方法对这个条件进行判断,按住Ctrl跳过去,于是就看到了熟悉的native。
QQ图片20201201213355.jpg QQ截图20201201172146.png QQ截图20201201172211.png
上IDA,搜索刚才的方法名check,只有一个结果,双击跳过去,F5转伪代码,大概看一下,就是TestDec输出的字符串和f72c5a36569418a20907b55be5bf95ad进行对比,如果相等则返回1,也就是验证通过。
QQ截图20201201172312.png QQ截图20201201172346.png QQ截图20201201185651.png
双击TestDec,康康里面的运行逻辑。
QQ截图20201201185708.png
代码如下:

 v1 = (char *)a1;    //把a1的强转换成了char指针
  if ( strlen(a1) >= 2 )  //判断a1的长度是否大于等于2,如果是,则进行下面的逻辑
  {
    v2 = 0;  //初始化v2的值为0
    do   //第一个循环体
    {
      v3 = (int)&v1[v2];   
      v4 = v1[v2];   //取v1[v2]的地址
      v1[v2] = v1[v2 + 16]; //逐个将v1的第v2个字符与第v2+16个字符交换位置
      ++v2; //v2自增
      *(_BYTE *)(v3 + 16) = v4;
    }
    while ( v2 < strlen(v1) >> 1 );   //结束循环的条件
  }
  result = (unsigned __int8)*v1; //条件不满足再把a1强转成unsigned__int18
  if ( *v1 )
  {
    *v1 = v1[1];
    v1[1] = result;
    result = strlen(v1);
    if ( result >= 3 )
    {
      v6 = 0;  //初始化v6的值为0
      do   //第二个循环体
      {
        v7 = (int)&v1[v6];
        v8 = v1[v6 + 2]; //取v1[v6+2]的地址
        *(_BYTE *)(v7 + 2) = v1[v6 + 3];//逐个将v1的第v6+3个字符与第v7+2个字符交换位置
        *(_BYTE *)(v7 + 3) = v8;
        result = strlen(v1);
        v9 = v6 + 4;
        v6 += 2;
      }
      while ( v9 < result );
    }
  }
  return result;

其实关键的就是那两个循环体,第一个循环体将字符串从中间砍断,头拼接到尾,第二个循环体将字符串两两交换。接着打开我们的IDLE,编写一个简单的脚本来还原字符串,代码如下

data = list('f72c5a36569418a20907b55be5bf95ad') //把字符串传入,并转为列表
for i in range(len(data)//2):  //第一个循环体
    a = data[i]
    data[i] = data[i+16]
    data[i+16] = a
for i in range(0,len(data),2):  //第二个循环体
    a2 = data[i]
    data[i]=data[i+1]
    data[i+1]=a2
key=''.join(data) //拼接字符串
print("flag{"+key+"}")  //把题目中的flag{}和最终字符串拼接并输出

最后:

看一下IDLE的输出结果flag{90705bb55efb59da7fc2a5636549812a},再到app测试一下,flag正确!
QQ截图20201201213615.png QQ图片20201201213357.jpg

免费评分

参与人数 14威望 +1 吾爱币 +36 热心值 +13 收起 理由
qtfreet00 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
淡灬看夏丶恋雨 + 1 + 1 我很赞同!
我用飘柔 + 1 + 1 谢谢@Thanks!
牛结实 + 1 + 1 我很赞同!
sb71322619 + 1 + 1 谢谢@Thanks!
深水夜藏 + 1 + 1 我很赞同!
拾染 + 1 + 1 谢谢@Thanks!
www.52pojie.cn + 1 + 1 谢谢@Thanks!
Rayanx + 1 热心回复!
zhangxu888 + 1 + 1 我p了一张狗头鸟的图片!哈哈
hjz19921205 + 1 + 1 热心回复!
18269055653 + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
yiwai2012 + 2 + 1 这是成神之路的第一个笔记 学习了
涛之雨 + 3 + 1 这次的有点水啊(斜眼笑)

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

HNHuangJingYU 发表于 2021-9-18 15:34
本帖最后由 HNHuangJingYU 于 2021-9-22 11:49 编辑

代码加密其实就是两个循环进行位置互换
因为只是位置互换所以我们只要按着顺序去倒回来就行
[Java] 纯文本查看 复制代码
    @Test
    public void demo2() {
        String str = "f72c5a36569418a20907b55be5bf95ad";
        char[] data = str.toCharArray();

        //伪代码中的第二次循环
        int index2 = 0;
        int result;
        int v9;
        do {
            char v8 = data[index2 + 2];
            data[index2 + 2] = data[index2 + 3];
            data[index2 + 3] = v8;
            result = data.length;
            v9 = index2 + 4;
            index2 += 2;
        }
        while (v9 < result);


        //循环后进行的简单的互换
        result = data[0];
        data[0] = data[1];
        data[1] = (char) result;
        result = data.length;


        //伪代码中第一次循环
        int index = 0;
        do
        {
            char v4 = data[index];
            data[index] = data[index + 16];
            data[index+16] = v4;
            ++index;
        }
        while ( index < data.length >> 1 );

        System.out.println(data);
        //输出结果 -> 90705bb55efb59da7fc2a5636549812a
    }



uTools_1631966798692.png
 楼主| 正己 发表于 2020-12-1 21:38
yiwai2012 发表于 2020-12-1 22:29
qihang5518 发表于 2020-12-1 22:32
谢谢分享代码教程,小白也可以跟着学习
芽衣 发表于 2020-12-1 23:28
来了来了

免费评分

参与人数 1热心值 +1 收起 理由
正己 + 1 咕咕咕~今天没分了

查看全部评分

K.G暗雪 发表于 2020-12-1 23:44
开始学习ctf!
CYD 发表于 2020-12-2 01:45
大佬牛逼
okgjkk 发表于 2020-12-2 08:07
非常满意  学习了
bdcen007 发表于 2020-12-2 08:41
不好意思,走错了,我还以为是个游戏呢
whofly 发表于 2020-12-2 09:13
攻防世界的人才啊
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表