最近想在沙箱中使用frida的hook能力,有三个方案:
1 集成frida-server到系统
2 内置frida-gadget.so,然后将其加载到应用中
3 集成gumjs引擎
考虑到使用的体验性,最终打算用第三种方案
一、编译gumjs
1.1 先去frida官网下载gumjs的头文件和静态库
1.2 创建工程,导入gumjs.a和头文件

编译成动态库
二、创建Hook管理类
/frameworks/base/core/java/android/app/HookUtils.java
package android.app;
import android.content.Context;
import android.os.Build;
import android.os.Environment;
import android.os.FileUtils;
import android.util.Log;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import dalvik.system.DexClassLoader;
import org.json.JSONObject;
import org.json.JSONArray;
public class HookUtils {
public static final String TAG = "HookUtils";
public static HookJs hookjs;
public static class HookJs{
public boolean open = false;
public String[] packageName;
public String arm32SoPath;
public String arm64SoPath;
public HookJs(JSONObject js){
try{
open = js.getBoolean("open");
JSONArray names = js.getJSONArray("packageName");
if (names != null){
packageName = new String[names.length()];
for (int i = 0; i < names.length(); i++){
packageName[i] = names.getString(i);
}
}
arm32SoPath = js.getString("ArmSoPath");
arm64SoPath = js.getString("Arm64SoPath");
} catch(Exception e){
在Android中使用GumJS集成FridaHook功能

本文介绍了如何在Android环境中利用GumJS编译动态库并实现Frida的Hook功能,详细步骤包括集成gumjs动态库、创建Hook管理类以及配置和启动Hook过程。
最低0.47元/天 解锁文章
5664

被折叠的 条评论
为什么被折叠?



