问题标签 [library-interposition]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
13450 浏览

android - 如何挂钩我的 android 应用程序的系统调用(非 root 设备)

我正在尝试拦截我的 Android 应用在非 root 设备上进行的所有系统调用。

因此,每次我的应用程序写入/读取文件时,出于安全目的,我都想拦截系统调用并加密/解密流。加密部分没问题,但是如何拦截系统调用呢?

由于应用程序的某些部分是由第三方提供商开发的模块,我无法更改其源代码,因此没有其他方法可以确保数据安全存储。

由于我没有 root 访问权限,因此无法访问此处描述的系统调用表的地址,也无法通过 LKM 模块执行此操作。

我将不胜感激任何建议,谢谢。

编辑:

好的,我得到了 Simone Margaritelli 的代码链接,现在可以使用了!我的代码不断崩溃的原因是因为我必须设置正确的内存访问权限:

0 投票
1 回答
1629 浏览

android - 如何挂钩我的 android 应用程序的系统调用

我想拦截 connect() 系统调用并使用我自己的自定义实现。为简单起见,自定义实现将执行一些操作,例如打印日志,然后进一步调用系统实现。

我查看了Audrey 的博客,其中的方法是修补 PLT。但不幸的是,当试图更改重定位表中的地址时,这段代码会崩溃。

经过一段时间的凝视后,我遇到了这个已经回答的问题。但是这里描述的方法给了我以下错误。

*****跳转到案例标签[-fpermissive] jni/test.cpp:107:20:错误:跨过'uint32_t entry_page_start' jni/test.cpp:106:15的初始化:错误:跨过'uint32_t page_size的初始化'*****

建议更改后来自Andrey 博客的钩子调用方法Here,如下所示。

我做错了什么,我是否将 mProtect() 方法放在了错误的地方?我们有人在 Andrey 的博客的帮助下做过吗?还有其他方法吗?我被封锁了。任何帮助,将不胜感激。

0 投票
0 回答
34 浏览

android - 将代码插入现有的 apk

给定现有的 apk,是否可以插入方法调用?任意行代码呢?

理想情况下,我希望能够拦截方法调用/代码行并调用我自己的方法进行一些检查或记录,然后让原始执行继续而不改变原始行为。

如果这是可能的,有人可以为我指出一些阅读材料的正确方向吗?

谢谢

0 投票
1 回答
1648 浏览

c - 共享库中的符号查找

我在下面测试过这样一个简单的程序

我的主程序是这样的:

该程序的结果是“覆盖”。
为了弄清楚为什么会发生这种情况,我使用了 gdb。调用链是这样的:
_dl_runtime_resolve -> _dl_fixup ->_dl_lookup_symbol_x
我发现_dl_lookup_symbol_xglibc中的定义是

在加载对象的符号表中搜索符号 UNDEF_NAME 的定义,可能带有符号的请求版本

所以我认为在尝试查找符号时dispatch_write_hello,它首先在主目标文件中查找,然后在共享库中查找。这就是这个问题的原因。我的理解对吗?非常感谢您的时间。

0 投票
0 回答
285 浏览

shared-libraries - C 中 sleep() 函数的运行时库插入

我在运行时插入睡眠功能时遇到了一个小问题。我目前正在尝试使用简单的源代码“sleepdemo.c”和“wakeup.c”在运行时测试库插入。

我写的代码(wakeup.c)如下:

这是我试图插入的代码:

我已经向我的 gcc 提供了以下说明来创建一个共享库:

0 投票
1 回答
761 浏览

android - ptrace(PTRACE_ATTACH, pid, 0, 0) 错误:无法附加到 pid

我正在尝试使用 PTRACE 在 android 中注入一个库,但是当我尝试将 ptrace 附加到特定 pid 以进行监视时出现错误/;“无法附加到 pid”......这是代码

我想知道为什么 ptrace() 返回的值小于零导致错误.... ptrace() 函数应该返回什么才能正常执行(无错误)

0 投票
1 回答
163 浏览

c - 仅在特定条件下插入 fscanf

所以我试图覆盖 c 中的 fscanf 函数,但我只希望在满足某些条件时发生不同的行为;如果不满足这些条件,我只想调用原始的 fscanf。我知道您可以使用 dlsym 在插入函数时使用它的原始版本,但 fscanf 的问题在于它是可变参数的。我可以使用 va_list 和 va_arg 获取传递给我的函数的所有参数,但是当我实际上不知道有多少参数时,我应该如何在这些参数上调用原始 fscanf?

0 投票
2 回答
133 浏览

c - 如何调试运行时库插入的进程?

我现在正在研究在 Ubuntu 18.04 中使用 C 进行库插入,并且我正在测试两个简单的代码来包装strlen:“mystrlen.c”、“mystrlenTest.c”。

这是我写的代码:mystrlen.c

和 mystrlenTest.c:

我尝试在运行时使用以下命令注入:

这就是我得到的全部:Segmentation fault (core dumped) 所以我尝试dmesg使用命令找出发生了什么,结果如下:

我想问的是,我怎样才能用gdb调试这个?或者有没有其他方法可以调试它?我知道如何使用 gdb 调试单个程序,但我在调试运行时库 interpositioned process 时遇到了困难。如果我能找出其中的内容00007f7b918e35a1,那将是一个很大的帮助。

0 投票
1 回答
308 浏览

c - 库插入

按照我们的教科书(CSAPP book),我一直在尝试拦截对 malloc 和 free 的调用。我遵循了他们的确切代码,以及我在网上找到的几乎相同的代码,但我一直遇到分段错误。我听到我们的教授说了一些关于 printf 的一些事情,它会分配 malloc 并释放内存,所以我认为这是因为我正在拦截 malloc 并且由于我在拦截函数中使用了 printf 函数,它会递归地调用自己。但是我似乎无法找到解决这个问题的方法?我们的教授证明了拦截是有效的(他没有向我们展示代码)并在每次 malloc 发生时打印我们的信息,所以我知道这是可能的。任何人都可以建议一种工作方法吗?

这是我使用的代码,但一无所获:mymalloc.c

测试.c

我得到的结果:

这是我尝试并得到分段错误的代码(来自https://gist.github.com/iamben/4124829):

来自 git repo 的 makefile 不起作用,所以我手动编译了文件并得到:

尽管我复制了教科书代码,但我已经这样做了几个小时,但仍然得到相同的错误结果。我真的很感激任何帮助!

0 投票
1 回答
59 浏览

c - macOS 上的符号插入

我有一个链接到共享库的程序libfoo。我想从我的程序内部覆盖其中一个函数,以便从libfoo内部对该函数的内部调用libfoo解析为我的程序中的定义。(对于上下文,我的意图是模拟库函数进行测试。)

这个问题与这个问题有点相关:共享库中的符号查找。这是该问题的示例:

这是它在 linux 上的作用:

这是我想要的行为,但在 macOS 上我得到了这个:

如何在 macOS 上实现 linux 示例的行为?最好我想要一种适用于 linux 和 macOS 的方法,但我想如果我需要使用 macOS 特定的构建标志和/或环境变量也没关系。