问题标签 [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.
android - 如何挂钩我的 android 应用程序的系统调用(非 root 设备)
我正在尝试拦截我的 Android 应用在非 root 设备上进行的所有系统调用。
因此,每次我的应用程序写入/读取文件时,出于安全目的,我都想拦截系统调用并加密/解密流。加密部分没问题,但是如何拦截系统调用呢?
由于应用程序的某些部分是由第三方提供商开发的模块,我无法更改其源代码,因此没有其他方法可以确保数据安全存储。
由于我没有 root 访问权限,因此无法访问此处描述的系统调用表的地址,也无法通过 LKM 模块执行此操作。
我将不胜感激任何建议,谢谢。
编辑:
好的,我得到了 Simone Margaritelli 的代码链接,现在可以使用了!我的代码不断崩溃的原因是因为我必须设置正确的内存访问权限:
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 的博客的帮助下做过吗?还有其他方法吗?我被封锁了。任何帮助,将不胜感激。
android - 将代码插入现有的 apk
给定现有的 apk,是否可以插入方法调用?任意行代码呢?
理想情况下,我希望能够拦截方法调用/代码行并调用我自己的方法进行一些检查或记录,然后让原始执行继续而不改变原始行为。
如果这是可能的,有人可以为我指出一些阅读材料的正确方向吗?
谢谢
c - 共享库中的符号查找
我在下面测试过这样一个简单的程序
我的主程序是这样的:
该程序的结果是“覆盖”。
为了弄清楚为什么会发生这种情况,我使用了 gdb。调用链是这样的:
_dl_runtime_resolve -> _dl_fixup ->_dl_lookup_symbol_x
我发现_dl_lookup_symbol_x
glibc中的定义是
在加载对象的符号表中搜索符号 UNDEF_NAME 的定义,可能带有符号的请求版本
所以我认为在尝试查找符号时dispatch_write_hello
,它首先在主目标文件中查找,然后在共享库中查找。这就是这个问题的原因。我的理解对吗?非常感谢您的时间。
shared-libraries - C 中 sleep() 函数的运行时库插入
我在运行时插入睡眠功能时遇到了一个小问题。我目前正在尝试使用简单的源代码“sleepdemo.c”和“wakeup.c”在运行时测试库插入。
我写的代码(wakeup.c)如下:
这是我试图插入的代码:
我已经向我的 gcc 提供了以下说明来创建一个共享库:
android - ptrace(PTRACE_ATTACH, pid, 0, 0) 错误:无法附加到 pid
我正在尝试使用 PTRACE 在 android 中注入一个库,但是当我尝试将 ptrace 附加到特定 pid 以进行监视时出现错误/;“无法附加到 pid”......这是代码
我想知道为什么 ptrace() 返回的值小于零导致错误.... ptrace() 函数应该返回什么才能正常执行(无错误)
c - 仅在特定条件下插入 fscanf
所以我试图覆盖 c 中的 fscanf 函数,但我只希望在满足某些条件时发生不同的行为;如果不满足这些条件,我只想调用原始的 fscanf。我知道您可以使用 dlsym 在插入函数时使用它的原始版本,但 fscanf 的问题在于它是可变参数的。我可以使用 va_list 和 va_arg 获取传递给我的函数的所有参数,但是当我实际上不知道有多少参数时,我应该如何在这些参数上调用原始 fscanf?
c - 如何调试运行时库插入的进程?
我现在正在研究在 Ubuntu 18.04 中使用 C 进行库插入,并且我正在测试两个简单的代码来包装strlen
:“mystrlen.c”、“mystrlenTest.c”。
这是我写的代码:mystrlen.c
和 mystrlenTest.c:
我尝试在运行时使用以下命令注入:
这就是我得到的全部:Segmentation fault (core dumped)
所以我尝试dmesg
使用命令找出发生了什么,结果如下:
我想问的是,我怎样才能用gdb调试这个?或者有没有其他方法可以调试它?我知道如何使用 gdb 调试单个程序,但我在调试运行时库 interpositioned process 时遇到了困难。如果我能找出其中的内容00007f7b918e35a1
,那将是一个很大的帮助。
c - 库插入
按照我们的教科书(CSAPP book),我一直在尝试拦截对 malloc 和 free 的调用。我遵循了他们的确切代码,以及我在网上找到的几乎相同的代码,但我一直遇到分段错误。我听到我们的教授说了一些关于 printf 的一些事情,它会分配 malloc 并释放内存,所以我认为这是因为我正在拦截 malloc 并且由于我在拦截函数中使用了 printf 函数,它会递归地调用自己。但是我似乎无法找到解决这个问题的方法?我们的教授证明了拦截是有效的(他没有向我们展示代码)并在每次 malloc 发生时打印我们的信息,所以我知道这是可能的。任何人都可以建议一种工作方法吗?
这是我使用的代码,但一无所获:mymalloc.c
测试.c
我得到的结果:
这是我尝试并得到分段错误的代码(来自https://gist.github.com/iamben/4124829):
来自 git repo 的 makefile 不起作用,所以我手动编译了文件并得到:
尽管我复制了教科书代码,但我已经这样做了几个小时,但仍然得到相同的错误结果。我真的很感激任何帮助!
c - macOS 上的符号插入
我有一个链接到共享库的程序libfoo
。我想从我的程序内部覆盖其中一个函数,以便从libfoo
内部对该函数的内部调用libfoo
解析为我的程序中的定义。(对于上下文,我的意图是模拟库函数进行测试。)
这个问题与这个问题有点相关:共享库中的符号查找。这是该问题的示例:
这是它在 linux 上的作用:
这是我想要的行为,但在 macOS 上我得到了这个:
如何在 macOS 上实现 linux 示例的行为?最好我想要一种适用于 linux 和 macOS 的方法,但我想如果我需要使用 macOS 特定的构建标志和/或环境变量也没关系。