辅助功能
大约 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_libart项目,输出该日志。输入*则默认全部都输出(除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端交互的持久化使用。