由于工作一直会遇到frida来执行各种Hook,现在梳理整个frida的相关使用场景。由于安装的资料以及文档网上已经特别多了,本系列教程忽略相关安装步骤。
编写C++函数
#include <iostream>
#include <string>
extern "C" {
void* create_stdstr(char *data, int size) {
std::string* s = new std::string();
(*s).assign(data, size);
return s;
}
}
此函数简单的输出字符串的前n个值。比如:“abcd,3”即输出为“abc”。
生成可执行文件
通过ndk的clang生成可执行文件
C:\Users\g\AppData\Local\Android\Sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\aarch64-linux-android21-clang++ a.cpp -o a -shared -static-libstdc++
文件移动到手机内
将文件push到手机内执行frida
adb push a /data/local/tmp
frida调用
由于frida启动需要绑定一个进程,我们可以直接运行任意一个app来挂起firda。
当遇到上面的错误时,需要设置SELinux模式为permissive。
这里我们简单介绍一下SELinux的三种模式:
- enforcing:强制模式,表示SELinux 运行中,且已经正确的开始限制 domain/type
- permissive:宽容模式,表示SELinux 运行中,不过仅会有警告信息,并不会实际限制 domain/type 的存取
- disabled:关闭,SELinux 没有运行 这里再多说一点,Android的硬件检测的两种方案之一就是通过SELinux来获取,另外一个就是证书链认证,请参考以前写的文章。 然后继续执行上述命令。
现在可以直观的看到frida调用c++方法调用成功。