PLT hook 方案 PLT hook

PLT hook 方案  PLT hook


字节跳动开源 Android PLT hook 方案 bhook --- https://zhuanlan.zhihu.com/p/401547387

inline hook 的功能无疑是最强大的 inline hook () ->.dyn.aps2


.dyn.aps2


LT hook 并不是修改磁盘上的 ELF 文件,而是在运行时修改内存中的数据,

因此我们主要关心的是执行视图,即 ELF 被加载到内存后,ELF 中的数据是如何组织和存放的。

 size_t (*strlen_ptr)(const char *) = strlen
 
 strlen_ptr (char *)
 
 
 .dynamic 是专门为 linker 设计的,其中包含了 linker 解析和加载 ELF 时会用到的各项数据的索引。
 
 linker 在解析完 ELF 头和执行视图的内容后,就会开始解析 .dyna56mic。
 
 .dynamic
 
 .plt:对外部或内部的符号的调用跳板,.plt 会从 .got 或 .data 或 .data.rel.ro 中查询符号的绝对地址,然后执行跳转。
 
 .plt -> .got  .data.rel.ro 
 
 Android 从 7.0 开始不再允许 app 中 dlopen 系统库
 
 Android 7.0 app dlopen
 dlopen ( 45,dlClose)
 
 网关type = A088 协调器 type = A001   固件(app版本)10 , 硬件 10,
  
 hook技术->  固件版本 改成获取
 
 https://www.zhihu.com/people/bytedance-tech --- 字节技术君

 
 https://blog.csdn.net/muyang_1/article/details/123987088 --- 安卓studio打包提示建议升级到行业标准pkcs12
 
 
 https://www.csdn.net/tags/OtDaMg1sMDQ5MzMtYmxvZwO0O0OO0O0O.html ---  keytool不是内部或外部命令,也不是可运行的程序

 
 java.io.FileNotFoundException: https://massky-download.oss-cn-hangzhou.aliyuncs.com/androidgatewayV1.1.apk
 
 
 Lighter repairman:
https://github.com/bytedance/bhook/blob/main/doc/overview.zh-CN.md

Lighter repairman:
https://www.csdn.net/tags/MtTaIgysMjk1NDA3LWJsb2cO0O0O.html

Lighter repairman:
java list统计_List分组统计方法的简单学习|List数据分类

Lighter repairman:
https://www.cnblogs.com/xianz666/p/13602953.html

Lighter repairman:
java中对list集合中的数据按照某一个属性进行分组

Lighter repairman:
https://blog.csdn.net/qq_43306866/article/details/122384856

Lighter repairman:
分割一个装有多组数据List集合,并将其每组数据分别存放至不同的List集合中

Lighter repairman:
第一步查询  sceneDevice表  根据groupby  panelid  oderby  panel_address

 Android插件化开发指南——Hook技术(一)【长文】  ----  https://blog.csdn.net/qq_26460841/article/details/121497914
 
 
 static public IActivityManager getDefault() {
    return gDefault.get();
}

private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {
    protected IActivityManager create() {
        IBinder b = ServiceManager.getService("activity");
        if (false) {
            Log.v("ActivityManager", "default service binder = " + b);
        }
        IActivityManager am = asInterface(b);
        if (false) {
            Log.v("ActivityManager", "default service = " + am);
        }
        return am;
    }
};

static public IActivityManager asInterface(IBinder obj) {
    if (obj == null) {
        return null;
    }
    IActivityManager in =
            (IActivityManager)obj.queryLocalInterface(descriptor);
    if (in != null) {
        return in;
    }

    return new ActivityManagerProxy(obj);
}

 Singleton IActivityManager
 
 也就是说这里可以Hook容纳AMS的单例得到得到AMS对象。
 
 Hook  AMS对象
 
  Class<?> aClass = Class.forName("android.app.ActivityManagerNative");
            Field getDefault = aClass.getDeclaredField("gDefault");
            getDefault.setAccessible(true);

            // 获取静态的gDefault对象
            Object getDefaultObj = getDefault.get(null);
            // 而实际上AMS在单例Singleton中
            Class<?> singletonClazz = Class.forName("android.util.Singleton");
            Field mInstance = singletonClazz.getDeclaredField("mInstance");
            mInstance.setAccessible(true);
            Object amsObj = mInstance.get(getDefaultObj); // AMS

            aClass.getDeclaredField
            getDefault.get       
            
        mInstance.setAccessible true
        
            2.1.3 对startActivity进行Hook
 
 
 Android常见设计模式——代理模式(Proxy Pattern) ---   https://blog.csdn.net/qq_26460841/article/details/121435532

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用PyTorch的hook机制来获取EfficientDate模型卷积层特征图的示例代码: ```python import torch from efficientnet_pytorch import EfficientNet # 加载EfficientDate模型 model = EfficientNet.from_pretrained('efficientnet-b0', num_classes=10) # 定义一个列表,用于存储指定层的输出 outputs = [] # 定义hook函数,用于获取指定层的输出 def hook(module, input, output): # 将输出保存到列表中 outputs.append(output) # 注册hook函数到指定层 target_layer = model._blocks[9]._depthwise_conv hook_handle = target_layer.register_forward_hook(hook) # 输入图像进行前向传播 inputs = torch.randn(1, 3, 224, 224) outputs = model(inputs) # 获取指定层的输出作为特征图 feature_map = outputs[0] # 将特征图保存为图片 import matplotlib.pyplot as plt plt.imshow(feature_map.detach().numpy()[0, 0, :, :], cmap='gray') plt.show() # 移除hook函数 hook_handle.remove() ``` 在上述代码中,我们首先加载了EfficientDate模型,然后定义了一个列表`outputs`,用于存储hook函数获取的指定层的输出。接着,我们定义了一个hook函数`hook`,用于将指定层的输出保存到`outputs`列表中。然后,我们通过`register_forward_hook`方法将`hook`函数注册到EfficientDate模型的第9个block的深度卷积层上,以获取该层的输出。接下来,我们输入图像进行前向传播,模型会自动调用hook函数,将指定层的输出保存到`outputs`列表中。然后我们将特征图绘制成灰度图并显示。最后,我们从`outputs`列表中获取指定层的输出作为特征图,并移除hook函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值