跳至主要內容

辅助功能

missking大约 3 分钟

辅助功能,主要是在分析应用时一些常用的分析手段,由于功能比较杂乱,就统一放在辅助功能中了。后期可能会细化这些功能,调整界面,将各类功能重新划分。下面看当前版本的辅助功能界面

辅助功能
辅助功能

native函数睡眠

用于反调试,调试检测一般在应用启动时进行检测,基本都在需要调试的函数执行前,就会检测是否被调试。而该功能则会在目标函数开始执行时,让其等待30秒再继续执行。在这时我们再附加其进行调试,如此可绕过部分反调试手段。该字段填native函数名即可。

smali指令trace

用于对java函数分析,将其执行的smali指令进行打印输出。下面看一个例子,将函数sortUrlParam进行smali trace的输出日志。函数源码如下。

public static String sortUrlParam(String url) {
    String[] params = url.split("&");
    List<String> resList = new ArrayList<>();
    for (String param : params) {
        String[] kv = param.split("=");
        String val="";
        if(kv.length>=2){
            val=kv[1];
        }
        resList.add(kv[0] + "=" + val);
    }
    Collections.sort(resList);
    return String.join("&", resList);
}

smali的trace结果日志如下。

mikrom Execute strstr traceMethod success:java.lang.String com.example.codemgr.common.OtherTools.sortUrlParam(java.lang.String)	sortUrlParam
java.lang.String com.example.codemgr.common.OtherTools.sortUrlParam(java.lang.String)
mikrom smaliTrace 0x0: const-string v0, "&" // string@5	 // vreg0=0x00000000 vreg1=0x00000000 vreg2=0x00000000 vreg3=0x00000000 vreg4=0x00000000 vreg5=0x00000000 vreg6=0x00000000 vreg7=0x00000000 vreg8=0x00000000 vreg9=0x00000000 vreg10=0x00000000 vreg11=0x00000000 vreg12=0x131A7920/java.lang.String "datatype=-1&status=-1&num=0"
java.lang.String com.example.codemgr.common.OtherTools.sortUrlParam(java.lang.String)
mikrom smaliTrace 0x2: invoke-virtual {v12, v0}, java.lang.String[] java.lang.String.split(java.lang.String) // method@88	 // vreg0=0x6F4367D0/java.lang.String "&" vreg1=0x00000000 vreg2=0x00000000 vreg3=0x00000000 vreg4=0x00000000 vreg5=0x00000000 vreg6=0x00000000 vreg7=0x00000000 vreg8=0x00000000 vreg9=0x00000000 vreg10=0x00000000 vreg11=0x00000000 vreg12=0x131A7920/java.lang.String "datatype=-1&status=-1&num=0"
java.lang.String com.example.codemgr.common.OtherTools.sortUrlParam(java.lang.String)
mikrom smaliTrace 0x5: move-result-object v1	 // vreg0=0x6F4367D0/java.lang.String "&" vreg1=0x00000000 vreg2=0x00000000 vreg3=0x00000000 vreg4=0x00000000 vreg5=0x00000000 vreg6=0x00000000 vreg7=0x00000000 vreg8=0x00000000 vreg9=0x00000000 vreg10=0x00000000 vreg11=0x00000000 vreg12=0x131A7920/java.lang.String "datatype=-1&status=-1&num=0"
java.lang.String com.example.codemgr.common.OtherTools.sortUrlParam(java.lang.String)
mikrom smaliTrace 0x6: new-instance v2, java.util.ArrayList // type@TypeIndex[54]	 // vreg0=0x6F4367D0/java.lang.String "&" vreg1=0x131A7950/java.lang.String[] vreg2=0x00000000 vreg3=0x00000000 vreg4=0x00000000 vreg5=0x00000000 vreg6=0x00000000 vreg7=0x00000000 vreg8=0x00000000 vreg9=0x00000000 vreg10=0x00000000 vreg11=0x00000000 vreg12=0x131A7920/java.lang.String "datatype=-1&status=-1&num=0"
java.lang.String com.example.codemgr.common.OtherTools.sortUrlParam(java.lang.String)
...

ArtMethod Invoke

该功能原本是属于ROM级打桩栏目,为了方便灵活控制,则将其转移到辅助功能栏目。invoke函数是大多数函数的必经之地,参考frida_hook_libartopen in new window项目,输出该日志。输入*则默认全部都输出(除android.开头和java.开头的),否则输出模糊匹配到的执行函数。下面是输出日志。

mikrom ArtMethod invoke androidx.emoji2.text.flatbuffer.MetadataList.<init>
mikrom ArtMethod invoke androidx.emoji2.text.flatbuffer.Utf8Safe.<init>
mikrom ArtMethod invoke androidx.emoji2.text.flatbuffer.MetadataList.getRootAsMetadataList
mikrom ArtMethod invoke androidx.emoji2.text.MetadataRepo.<init>
mikrom ArtMethod invoke androidx.emoji2.text.EmojiMetadata.<clinit>
mikrom ArtMethod invoke androidx.core.os.TraceCompat.endSection

修复so

该功能会在启动应用30秒后,将目标so从内存中dump出来,并使用SoFixer进行修复,最终结果保存到/data/mikrom/dumpSo目录下。多个目标文件可使用,分割

frida-gadget

该功能是注入frida-gadget.so,可以选择自己编译的gadget,如不选择,则默认使用系统内部自带的16.0.3版本的gadget,端口选项为0,则是使用frida默认端口,否则就使用用户自定义的端口。

监听实际就是attach附加。监听并阻塞就是spawn附加,启动应用时会阻塞住,等待用户附加了才继续执行,选择脚本则是无需pc端交互的持久化使用。