Android 逆向函数拦截 ( GOT 表数据结构分析 | 函数根据 GOT 表进行跳转的流程 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 逆向函数拦截 ( GOT 表数据结构分析 | 函数根据 GOT 表进行跳转的流程 )相关的知识,希望对你有一定的参考价值。





一、GOT 表数据结构分析



GOT 表分为 2 2 2 部分 ,

  • 一部分在 调用者部分 ( 可执行文件 ) 中 ,
  • 一部分在 被调用者部分 ( 静态 / 动态 函数库 ) 中 ;

函数库 中的部分是真正的 GOT 表 , 在调用者的部分是 PLT 表 ;

PLT 表示一个 跳转指令列表 , 执行该跳转指令 , 可以直接跳转到对应的 GOT 表中 , GOT 表记录 函数真实的位置 , 此时可以 跳转到 函数真实位置 ;

GOT 表在动态库中是以数组形式存在的 , 其中的数据结构很负责 , 不只是有 函数地址 , 还有其它额外数据信息 ;





二、函数根据 GOT 表进行跳转的流程



函数跳转流程 :

PLT 表中 保存的是 jmp 指令 , 该指令跳转的目的地址是 动态库 中的 GOT 表 , GOT 表中记录了真实的被调用函数的地址 , 之后直接跳转到该 真实函数地址 中 ;

以访问 scanf 函数为例 : 在 PLT 表中 , 保存的是 jmp GOT表地址 指令 , GOT 表地址 指向 GOT 表的一个数组元素 , 该数组元素存储这 scanf 函数的实际地址 , 因此该 GOT 表地址 本质 是 保存 scanf 函数的地址 的 数据 的 地址 ; GOT 表 是 libc.so 中的 ;

以上是关于Android 逆向函数拦截 ( GOT 表数据结构分析 | 函数根据 GOT 表进行跳转的流程 )的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向函数拦截原理 ( 通过修改 GOT 全局偏移表拦截函数 | 通过在实际被调用的函数中添加跳转代码实现函数拦截 )

Android 逆向函数拦截原理 ( 可执行程序基本结构 | GOT 全局偏移表 | 可执行程序函数调用步骤 )

Android 逆向函数拦截实例 ( ② 插桩操作 | 保存实际函数入口 6 字节数据 | 在插桩的函数入口写入跳转指令 | 构造拼接桩函数 )

Android 逆向函数拦截实例 ( ③ 刷新 CPU 高速缓存 | ④ 处理拦截函数 | ⑤ 返回特定结果 )

Android 逆向函数拦截实例 ( 函数拦截流程 | 定位动态库及函数位置 )

Android 逆向函数拦截 ( ARM 架构下的插桩拦截 | 完整代码示例 )