吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9296|回复: 10
收起左侧

[Android CTF] SWPUCTF两道安卓逆向题

  [复制链接]
lihaohua 发表于 2018-12-21 20:16
本帖最后由 lihaohua 于 2018-12-21 23:26 编辑

基础android
拿到题目模拟器跑一下看到相关字符串
1.png
拖进jeb看一下代码
2.png
调用了check函数
[Asm] 纯文本查看 复制代码
package com.example.test.ctf02;

public class Check {
    public Check() {
        super();
    }

    public boolean checkPassword(String str) {
        int v5 = 12;
        boolean v2 = false;
        char[] v1 = str.toCharArray();
        if(v1.length == v5) {
            int v0 = 0;
            while(true) {
                if(v0 < v1.length) {
                    v1[v0] = ((char)(255 - v0 - 100 - v1[v0]));
                    if(v1[v0] == 48 && v0 < v5) {
                        ++v0;
                        continue;
                    }
                }
                else {
                    break;
                }

                goto label_5;
            }

            v2 = true;
        }

    label_5:
        return v2;
    }
}

脚本跑一下

3.png

4.png
感觉挺像刘诗诗的
继续看
5.png
发现还有另一张图 ··
觉得可以修改后缀拿到图片
6.png

android2.0
这一题用到了native层
7.png

改后缀解压出so文件拖进IDA看一下
找到核心代码
[Asm] 纯文本查看 复制代码
signed int __fastcall Java_com_example_test_ctf03_JNI_getResult(int a1)
{
  signed int v1; // r4@1
  const char *v2; // r8@1
  char *v3; // r6@2
  char *v4; // r4@2
  char *v5; // r5@2
  int v6; // r0@3
  int v7; // r0@7

  v1 = 0;
  v2 = (*(*a1 + 0x2A4))();
  if ( strlen(v2) == 15 )                       // v2=input flag
  {
    v3 = malloc(1u);
    v4 = malloc(1u);
    v5 = malloc(1u);
    Init(v3, v4, v5, v2, 15);
    if ( !First(v3) )                           // v3=fgorv
      goto LABEL_14;
    v6 = 0;
    do
    {
      v4[v6] ^= v3[v6];
      ++v6;
    }
    while ( v6 != 4 );
    if ( !strcmp(v4, &unk_2888) )
    {
      v7 = 0;
      do
      {
        v5[v7] ^= v4[v7];
        ++v7;
      }
      while ( v7 != 4 );
      v1 = 0;
      if ( !strcmp(v5, "AFBo}") )
        v1 = 1;
    }
    else
    {
LABEL_14:
      v1 = 0;
    }
  }
  return v1;
}


大致的意思是把flag分成了三段
v3 = malloc(1u);
    v4 = malloc(1u);
    v5 = malloc(1u);
每一段进行了不同的加密
然后再进行逐个输出
看一下这里的数据
First
[Asm] 纯文本查看 复制代码
signed int __fastcall First(char *a1)
{
  int v1; // r1@1
  int v2; // r0@3
  signed int v3; // r1@3

  v1 = 0;
  do
  {
    a1[v1] = 2 * a1[v1] ^ 0x80;
    ++v1;
  }
  while ( v1 != 4 );
  v2 = strcmp(a1, "LN^dl");
  v3 = 0;
  if ( !v2 )
    v3 = 1;
  return v3;
}

脚本跑出来是
#out:v3=fgorv
second:
if ( !strcmp(v4, &unk_2888) )
    {
      v7 = 0;
      do
      {
        v5[v7] ^= v4[v7];
        ++v7;
      }
      while ( v7 != 4 );
      v1 = 0;
[Asm] 纯文本查看 复制代码
if ( !strcmp(v4, &unk_2888) )
    {
      v7 = 0;
      do
      {
        v5[v7] ^= v4[v7];
        ++v7;
      }
      while ( v7 != 4 );
      v1 = 0;

8.png
就相当于与First异或前四位
#out:l{sra

第三个也如此
#out:asoy}

整理一下
flag{sosorryla}

9.png



做下来感觉整体难度不难,但小弟是第一次做Android题,请大师傅们勿喷哈·~~

链接:https://pan.baidu.com/s/1ig-xmmGgg9LiDcIzHsjyrQ
提取码:yh28
复制这段内容后打开百度网盘手机App,操作更方便哦


免费评分

参与人数 5威望 +2 吾爱币 +15 热心值 +4 收起 理由
你的燚龘 + 1 + 1 我很赞同!
JosnSon + 1 + 1 谢谢@Thanks!
qtfreet00 + 2 + 12 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ADkil + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
哟耶灬痕 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

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

stars-one 发表于 2018-12-21 21:35
像我就不会做。。
厉害!
onmiuncai 发表于 2018-12-21 21:59
 楼主| lihaohua 发表于 2018-12-21 23:15
onmiuncai 发表于 2018-12-21 23:16
lihaohua 发表于 2018-12-21 23:15
啊哈 忘记贴环境了

贴一波,也顺便去玩玩,感谢LZ分享分析过程~!
哟耶灬痕 发表于 2018-12-22 04:45
希望多点这种帖子  谢谢分享
Knave 发表于 2018-12-23 19:46
厉害厉害,第一个的图片提取码其实是一个广播
erdaye 发表于 2019-1-29 12:12
虽然没有看明白,但是还是要感谢楼主
小逗比- 发表于 2019-2-10 00:59 来自手机
校友啊,兄弟
你的燚龘 发表于 2019-6-23 00:32
给赞一个!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-22 15:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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