lihaohua 发表于 2018-12-21 20:16

SWPUCTF两道安卓逆向题

本帖最后由 lihaohua 于 2018-12-21 23:26 编辑

基础android
拿到题目模拟器跑一下看到相关字符串

拖进jeb看一下代码

调用了check函数
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 = ((char)(255 - v0 - 100 - v1));
                  if(v1 == 48 && v0 < v5) {
                        ++v0;
                        continue;
                  }
                }
                else {
                  break;
                }

                goto label_5;
            }

            v2 = true;
      }

    label_5:
      return v2;
    }
}
脚本跑一下




感觉挺像刘诗诗的
继续看

发现还有另一张图 ··
觉得可以修改后缀拿到图片


android2.0
这一题用到了native层


改后缀解压出so文件拖进IDA看一下
找到核心代码
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 ^= v3;
      ++v6;
    }
    while ( v6 != 4 );
    if ( !strcmp(v4, &unk_2888) )
    {
      v7 = 0;
      do
      {
      v5 ^= v4;
      ++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
signed int __fastcall First(char *a1)
{
int v1; // r1@1
int v2; // r0@3
signed int v3; // r1@3

v1 = 0;
do
{
    a1 = 2 * a1 ^ 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 ^= v4;
      ++v7;
      }
      while ( v7 != 4 );
      v1 = 0;
if ( !strcmp(v4, &unk_2888) )
    {
      v7 = 0;
      do
      {
      v5 ^= v4;
      ++v7;
      }
      while ( v7 != 4 );
      v1 = 0;

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

第三个也如此
#out:asoy}

整理一下
flag{sosorryla}





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

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


stars-one 发表于 2018-12-21 21:35

像我就不会做。。
厉害!

onmiuncai 发表于 2018-12-21 21:59

请问题目是在哪呢? 去拿来玩玩

lihaohua 发表于 2018-12-21 23:15

onmiuncai 发表于 2018-12-21 21:59
请问题目是在哪呢? 去拿来玩玩

啊哈 忘记贴环境了

onmiuncai 发表于 2018-12-21 23:16

lihaohua 发表于 2018-12-21 23:15
啊哈 忘记贴环境了

{:1_919:}贴一波,也顺便去玩玩,感谢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

给赞一个!
页: [1] 2
查看完整版本: SWPUCTF两道安卓逆向题