攻防世界-Ph0en1x-100

第一次独立使用frida解安卓题,没分析代码

Steps

  • 使用jadx打开apk分析主要代码

    • 最主要的就是这个if判断了,安装apk后,有一个输入框和一个check按钮,会根据输入的结果Toast:Success or Failed。
    • getSecret(getFlag()).equals(getSecret(encrypt(sInput))),判断getSecret(getFlag())getSecret(encrypt(sInput))的结果是否相同,其中sInput是输入。

    • getFlag()没有接收任何字符串,所以想到没必要分析代码写了什么,只需要看这个getSecret方法的输入和返回是多少就可以,这里想到了frida。

    • 分析一下getSecret方法

      • **byte**[] hash = MessageDigest.getInstance(encrypt("KE3TLNE6M43EK4GM34LKMLETG").substring(5, 8)).digest(string.getBytes("UTF-8"));
      • 这一句对输入进行加密,加密方法还要通过encrypt("KE3TLNE6M43EK4GM34LKMLETG").substring(5, 8)获取,写死的就证明加密也只是一个。这里开始想的是用frida看简单的输入的输出,判断是什么编码。
    • frida函数

      • jadx中右键getSecret函数-复制为frida代码,

      • 再加个Java.perform(function()运行函数

        Java.perform(function() {
        let MainActivity = Java.use("com.ph0en1x.android_crackme.MainActivity");
        MainActivity["getSecret"].implementation = function (string) {
        console.log('getSecret is called' + ', ' + 'string: ' + string);
        let ret = this.getSecret(string);
        console.log('getSecret ret value is ' + ret);
        return ret;
        };
        });

    • 打开frida-server

    • 在手机上点击check按钮,查看log信息。
    • 比如012编码后的结果试一下就可以得出进行的md5编码。

    • 然后可以看出getFlag()的返回是乱码,分析getSecret(getFlag()).equals(getSecret(encrypt(sInput)))得出,getFlag()encrypt(sInput))相等即可,而根据getSecret()的输入参数可知,这个过程仅仅对输入进行了ascii减一的操作,我们就可以对getFlag()的返回进行ascii加一的操作。

    • 得出flag的代码

      s = 'ekfz@q2^x/t^fn0mF^6/^rbqanqntfg^E`hq|'
      for i in range(0, len(s)):
      print(chr(ord(s[i])+1), end='')

  • 用IDA动态调试应该也是可以的。

相关推荐
AFinalStone12 分钟前
Android 7系统编译与刷机(三)从编译产物到高通刷机包
android·系统编译
AFinalStone15 分钟前
Android 7系统编译与刷机(四)QFIL刷机工具详解
android·系统编译
plainGeekDev1 小时前
JUnit 4 → JUnit 5 + Kotlin
android·java·kotlin
plainGeekDev1 小时前
Mockito → MockK
android·java·kotlin
2 小时前
使用ffmpeg将mp4视频转为m3u8格式
android·ffmpeg·音视频
00后程序员张2 小时前
使用Instruments工具深入分析iOS应用性能与启动时间优化
android·macos·ios·小程序·uni-app·cocoa·iphone
zbmwa2 小时前
jetpack compose 副作用 snapshotFlow
android
爱笑鱼2 小时前
Binder 实战(九):一次调用变慢,到底卡在客户端、驱动、Binder 线程还是 Handler?
android
恋猫de小郭3 小时前
Flutter hit,一个可以灵活控制溢出点击的第三方包
android·前端·flutter
我命由我123453 小时前
Kotlin 面向对象 - 枚举排序
android·java·开发语言·java-ee·kotlin·android studio·android-studio