【愚公系列】2021年12月 攻防世界-简单题-MOBILE-007(easyjni)

举报
愚公搬代码 发表于 2021/12/14 16:43:06 2021/12/14
【摘要】 一、easyjni题目链接:https://adworld.xctf.org.cn/task/task_list?type=mobile&number=6&grade=0&page=1 二、答题步骤 1.运行app发现字符串:You are wrong!Bye~ 2.jadx反编译apk文件搜索字符串发现代码package com.a.easyjni;import android.os.B...

一、easyjni

题目链接:https://adworld.xctf.org.cn/task/task_list?type=mobile&number=6&grade=0&page=1

二、答题步骤

1.运行app

在这里插入图片描述
发现字符串:You are wrong!Bye~

2.jadx反编译apk文件

搜索字符串

在这里插入图片描述
发现代码
在这里插入图片描述

package com.a.easyjni;

import android.os.Bundle;
import android.support.v7.app.c;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

/* loaded from: classes.dex */
public class MainActivity extends c {
    static {
        System.loadLibrary("native");
    }

    /* JADX INFO: Access modifiers changed from: private */
    public boolean a(String str) {
        try {
            return ncheck(new a().a(str.getBytes()));
        } catch (Exception e) {
            return false;
        }
    }

    private native boolean ncheck(String str);

    /* JADX INFO: Access modifiers changed from: protected */
    @Override // android.support.v7.app.c, android.support.v4.a.i, android.support.v4.a.aa, android.app.Activity
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { // from class: com.a.easyjni.MainActivity.1
            @Override // android.view.View.OnClickListener
            public void onClick(View view) {
                if (MainActivity.this.a(((EditText) ((MainActivity) this).findViewById(R.id.edit)).getText().toString())) {
                    Toast.makeText(this, "You are right!", 1).show();
                } else {
                    Toast.makeText(this, "You are wrong! Bye~", 1).show();
                }
            }
        });
    }
}

进入a函数
在这里插入图片描述
这里我们知道了 是我们输入的字符 经过变形的base64加密码表为 然后传进了 so 里面的方法 然后我们去so里面找函数

3.IDA解析SO

用 ida 打开 so 文件,找到 ncheck 函数,发现将传进来的字符串首先将前 16 个字符和后 16 个字符交换位置,然后将这个新字符串两两一组互相交换位置,最后和一个字符串比较,相等则返回TRUE
在这里插入图片描述
解密脚本

import base64
 
import string
 
string1 = string.maketrans("i5jLW7S0GX6uf1cv3ny4q8es2Q+bdkYgKOIT/tAxUrFlVPzhmow9BHCMDpEaJRZN","ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
strEnBase64 = "QAoOQMPFks1BsB7cbM3TQsXg30i9g3==".translate(string1)
 
print(strEnBase64)
 
strFlag = base64.b64decode(strEnBase64)
 
print(strFlag)

flag为: flag{just_ANot#er_@p3}


总结

找到关键字,逆向分析流程,写出对应的脚本就可以拿到答案

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。