Frida

Frida

https://v5le0n9.github.io/posts/ab7319a3.html

杂记

查找模拟器相关frida-server版本

1
2
3
> adb shell
> su
> uname -a

 

查看app架构(windows下)

找到相应父进程 zygote/zygote64

1
2
3
4
5
6
7
8
> adb shell ps | findstr /c "hook"
USER PID PPID VSZ RSS WCHAN ADDR S NAME
u0_a59 5937 1471 1765436 105812 0 0 S com.example.hooknative

> adb shell ps | findstr /c "zygote"
USER PID PPID VSZ RSS WCHAN ADDR S NAME
root 1469 1 3503096 68020 0 0 S zygote64
root 1471 1 1386184 38300 0 0 S zygote

 

.ab文件解压缩==>使用abe.jar

1
> java -jar abe.jar unpack test.ab test.zip

 

frida 调用栈

1
console.log(Java.use("android.util.Log").getStackTraceString(Java.use("Java.lang.Throwable").$new()));

 

JavaScript生成Java字符串

1
Java.use('java.lang.String').$new("")

 

Android数据库 sqlcipher 加密

使用 DB Browser for SQLcipher打开

逆向三段

hook invoke rpc

(参数 调用栈 返回值)

(方法重载 参数构造 动静态处理)

(主动调用 忽略内部细节 直接返回结果)

rpc:远程调用

frida(rpc):多主机多手机多端口混连

网络组件

httpURLConnection

okhttp_interceptor

objection

memory list modules

memory list exports test.so

frida

Module.findBaseAdderss(“test.so”)

Module.findExportByName(“test.so”, “funcname”)

注意so中env重写 frida 与 so 中 输出方法相同

Java.vm.getEnv().readCString()

image-20221103212319189

image-20221104150142305

用户代码 native hook

Process

Module

Memory

Thread 打印调用栈

1
console.log("CCCryptoCreate called from\n" + Thread.backtrace(this.context, Backtracer.FUZZY).map(DebugSymbol.fromAddress).join('\n') + '\n');

JNI框架hook

JNI函数符号hook

JNI函数参数 返回值打印 替换

动态注册JNI_Onload

hook RegisterNatives

jnitrace

image-20221105180753717

image-20221105180735467

libc框架hook

libc函数符号hook

libc函数参数 返回值打印 替换

主动调用libc读写文件

hook linker dlopen

frida-trace

image-20221105213449533

image-20221105220509914