栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

[XCTF] reverse android-app-100

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[XCTF] reverse android-app-100

JADX打开,直奔入口

 

MainActivity.java 这个类 重点:

public native int IsCorrect(String str);
public native int processObjectArrayFromNative(String str);
public void onCreate() {
    this.b = EditText;
    this.e = Build.SERIAL; "设备标识,可能是想限制模拟器"
    this.d = 114366;

    "然后给了按钮一个响应事件,代码在a类里面"
    Button.setOnClickListener(new a(this));
}

我们去看看a类里的onClick()有啥

public void onClick(View view) {
    String editable = mainActivity.b.getText();
    int processObjectArrayFromNative = mainActivity.processObjectArrayFromNative(editable);
    int IsCorrect = mainActivity.IsCorrect(editable);
    String str = String.valueOf(mainActivity.d + processObjectArrayFromNative) + " ";

    byte[] digest = MD5(str.getBytes());
    StringBuffer sb = new StringBuffer();
    for (byte b : digest) {
        sb.append(Integer.toString((b & 255) + 256, 16).substring(1));
    }
    if (IsCorrect == 1 && mainActivity.e != "unknown") {
        mainActivity.c.setText("Sharif_CTF(" + sb.toString() + ")");
    }
    if (IsCorrect == 1 && mainActivity.e == "unknown") {
        mainActivity.c.setText("Just keep Trying :-)");
    }
    if (IsCorrect == 0) {
        mainActivity.c.setText("Just keep Trying :-)");
    }
}

可以看到,代码逻辑是用Naive方法MainActivity.IsCorrect对输入的字符串处理,

如果函数返回1,则输出flag。

那我们用IDA打开lib中的libadnjni.so文件

 不难猜到v9就是我们输入的字符串

v12的值是ef57f3fe3cf603c03890ee588878c0ec

然后用strcmp把v9和v12进行了比较,一通分析猜测,要使此函数返回1,入参应该等于v12

真机测试,flag为 Sharif_CTF(833489ef285e6fa80690099efc5d9c9d)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/891507.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号