以及输出示例
Binder 事务获取系统属性揭示手动注册的原生符号枚举已加载的类类描述关闭 WiFi设置代理获取 IMEI钩子 io InputStreamAndroid 弹 Toast等待特定模块加载Webview URL打印所有运行时字符串及栈回溯打印 SharedPreferences 更新字符串比较按地址钩子 JNI钩子构造函数钩子 Java 反射跟踪类钩子 Unity3d获取 Android ID改变位置绕过 FLAG_SECURESharedPreferences 更新钩子所有方法重载注册广播接收器增加计步数列出实现接口的类(带类加载器)$ frida --codeshare FrenchYeti/android-file-system-access-hook -f com.example.app --no-pauseimplementation 属性赋值为 null。
{
"scope": "source.js",
"completions": [
{"trigger": "fridainterceptor", "contents": "Interceptor.attach(\n ptr,\n {\n onEnter:function(args) {\n\n },\n onLeave: function(retval) {\n\n }\n }\n)"},
{"trigger": "fridaperform", "contents": "function main(){\n console.log('main()');\n}\n\nconsole.log('script loaded');\nJava.perform(main);"},
{"trigger": "fridause", "contents": "var kls = Java.use('kls');"},
{"trigger": "fridahex", "contents": "hexdump(\n ptr,\n {\n offset: 0,\n length: ptr_size\n }\n);" },
{"trigger": "fridabacktrace", "contents": "console.log('called from:\\n' +\n Thread.backtrace(this.context, Backtracer.ACCURATE)\n .map(DebugSymbol.fromAddress).join('\\n') + '\\n'\n);"},
{"trigger": "fridamods", "contents": "var mods = Process.enumerateModules().filter(function(mod){\n return mod.name.includes(\"<name>\");\n});"},
{"trigger": "fridaexport", "contents": "Module.findExportByName(null, \"<export_name>\");"},
{"trigger": "fridabase", "contents": "Module.findBaseAddress(name);"},
{"trigger": "fridaoverload", "contents": "kls.method_name.overload().implementation=function(){}"}
]
}
列出缩写 :ab
展开:输入 key 和 <Space>
</details>
<details>
<summary>JEB</summary>
使用键盘快捷键的Java方法钩子生成器
1. `curl -o ~/$JEB$/scripts/FridaCodeGenerator.py https://raw.githubusercontent.com/iddoeldor/frida-snippets/master/scripts/FridaCodeGenerator.py`
2. 将光标置于Java方法的签名处
3. 按下 `Ctrl+Shift+Z`
4. 代码被复制到系统剪贴板(使用 `xclip`)
</details>
<hr />
#### 获取SSL密钥```js
var keylog_callback = new NativeCallback((ssl, line) => {
send(Memory.readCString(line));
}, 'void', ['pointer', 'pointer']);
if (ObjC.available) {
var CALLBACK_OFFSET = 0x2A8
if (Memory.readDouble(Module.findExportByName('CoreFoundation', 'kCFCoreFoundationVersionNumber')) >= 1751.108) {
CALLBACK_OFFSET = 0x2B8
}
Interceptor.attach(Module.findExportByName('libboringssl.dylib', 'SSL_CTX_set_info_callback'), {
onEnter(args) {
ptr(args[0]).add(CALLBACK_OFFSET).writePointer(keylog_callback)
}
})
} else if (Java.available) {
var set_keylog_callback = new NativeFunction(Module.findExportByName('libssl.so', 'SSL_CTX_set_keylog_callback'), 'void', ['pointer', 'pointer']);
Interceptor.attach(Module.findExportByName('libssl.so', 'SSL_CTX_new'), {
onLeave(retval) {
set_keylog_callback(retval, keylog_callback)
}
})
}
#include #include
extern "C" { void* create_stdstr(char data, int size) { std::string s = new std::string(); (*s).assign(data, size); return s; } }
### [Blackeye](https://github.com/xo1337/Blackeye) - 最完整的基于 Bash 制作的钓鱼工具,拥有 32 个模板并与 ngrok 连接```sh
$ ./android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang++ a.cpp -o a -shared -static-libstdc++ && adb push a /data/local/tmp/a
单个 TCP 会话。本文档的其余部分将继续阅读本文档的其余部分。```js
[device]->
function readStdString(str) {
if ((str.readU8() & 1) === 1) { // size LSB (=1) indicates if it's a long string
return str.add(2 * Process.pointerSize).readPointer().readUtf8String();
}
return str.add(1).readUtf8String();
}
[device]-> Module.load('/data/local/tmp/a');
[device]-> var fp_create_stdstr = Module.findExportByName('a', 'create_stdstr');
[device]-> var createStdString = new NativeFunction(fp_create_stdstr, 'pointer', ['pointer', 'int']);
[device]-> var stdstr1 = createStdString(Memory.allocUtf8String("abcd"), 3);
"0x07691234567"
[device]-> readStdString(stdstr1);
"abc"
#### 加载C模块
* https://frida.re/docs/javascript-api/#cmodule
* https://frida.re/news/2019/09/18/frida-12-7-released/```sh
$ ./aarch64-linux-android21-clang /tmp/b.c -o /tmp/a -shared ../sysroot/usr/lib/aarch64-linux-android/21/liblog.so && adb push /tmp/a /data/local/tmp/a
--bcol BCOL 背景颜色。支持十六进制,例如#00ff00。
--bclo BCLO 背景颜色不透明度。范围:0-100。
--bgra 以低亮度显示背景。可选。```c
#include <stdio.h>
#include <stdlib.h>
#include <android/log.h>
#define TAG "TEST1" #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG, VA_ARGS) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, TAG, VA_ARGS)
void test(void) { FILE* fp = popen("ls -l /sdcard 2>&1", "r"); if (fp == NULL) LOGE("executing cmd failed"); char b[256]; while (fgets(b, sizeof(b), fp) != NULL) { LOGI("%s", b); } pclose(fp); }
`invoke-build` 用于编译、执行 CI 任务、运行测试和生成文档。
> `invoke-build` 会缓存构建脚本函数。如果你更改了构建脚本后出现问题,请尝试使用 `-NoBuildCaching` 参数运行 `invoke-build`。
如果由于某种原因 `invoke-build` 不可用,可以使用仓库根目录下的 `build.ps1` 文件来编译项目。
### 手动构建
要手动构建,请打开 PowerShell,导航到项目根目录,然后:
- 运行 `dotnet restore`。
- 运行 `dotnet build`。
- 运行 `dotnet test`。
这将生成解决方案并运行所有测试。
### CI/CD 元数据管道
此仓库包含一些用于 CI/CD 的管道文件。