[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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值