- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设我在 Linux 上有一个动态库 (.so)。我还有一个使用该库的现有应用程序。图书馆被剥夺了。我想为该库生成一些(近似的)头文件,以便我可以编写另一个使用它的程序。
很容易使用 objdump 查看库中有哪些函数,并使用 ltrace 查看每次调用。
如何确定函数参数是什么?
一些想法:我可能可以使用 LD_PRELOAD 或 dlsym 类型技巧来加载垫片库,只要在原始库中调用任何函数,它就会查看堆栈。我也可以在转储寄存器的垫片中做一些事情(这是在 ARM 上,所以我想应该是 r0-r3)。通过更多的工作(通过查看反汇编),还可以确定寄存器是否包含将被取消引用的指针,然后让垫片函数转储该指针处的内容。
这似乎是从那里迈出的一大步,“此函数将指向具有以下字段的结构的指针作为其第一个参数......”是否有用于此类事情的自动化工具?
注意:我对函数的工作原理一点都不感兴趣,我只关心如何向它们提供正确的数据。
最佳答案
一个好的开始是像 Objdump、HopperApp 或 IDA Pro 这样的反汇编程序。后者会自动检测非特殊情况下的参数。
如果您想自己了解这是如何工作的,我会查找不同的“调用约定”(维基百科是一个好的开始)。
__stdcall 的示例:假设您有 x86 .so 库并且在二进制文件中发生了类似的事情:
push 3
push 2
push 1
call func ; void func(int a, int b, int c) where a=1, b=2 and c=3
参数以相反的顺序压入堆栈。 EAX、ECX 和 EDX 可以在函数内部使用(由调用者保存),其他寄存器必须从函数本身(由被调用者保存)中明确保存。这不会告诉您有关参数背后的数据类型的任何信息。这通常需要更多的逆转才能解决。
即使是 IDA Pro 也不会自动检测所有信息,因为它取决于很多因素并且可能非常困难:)
关于c - 如何对C库进行逆向工程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21457005/
我有 *.ipa 文件,它是 iphone 应用程序。 是否可以在该 ipa 中使用逆向工程并提取代码..? 最佳答案 嗯,这不是真正的黑客攻击,但它确实可以帮助您识别 UI 的某些部分...请执行以
我一直在尝试对游戏的功能进行逆向工程,但我有点困惑。我对逆向工程还很陌生(顺便说一句,我正在使用 ollydbg),所以我还不太了解所有的技巧和细节。 无论如何这是我的问题。当您在游戏中拾取任何元素时
我被要求抓取一个 Flash 网站,该网站似乎正在通过 AMF 协议(protocol)使用某种服务器端调用。我完全不熟悉这个协议(protocol),但找到了这个库(http://www.pyamf
我的问题是我正在使用一个巨大的网络应用程序(学校系统),没有内部逻辑的文档。我需要对特定值进行批量更新,但我不知道MySQL数据库中的哪些表包含要更新的相关数据。该应用程序是从 php 自行运行的。有
我正在学习如何逆向一个程序,我想知道..如果我用调试信息编译: gcc -g .... 这对逆向过程有什么帮助吗?如果我这样做,我会提供额外的信息吗?我找不到有关该主题的任何信息。 最佳答案 它通过将
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
今天我决定使用 IDA Pro 反编译一个用 Visual C++ 编写的简单“Hello world”程序。 根据我以前的知识,我确定我不会在可执行文件入口点找到对 printf 的立即调用,我是对
我正在使用 PowerDesigner 为我的 SQL Server 数据库建模。我使用逆向工程选项来导入我的数据库。我的问题是表中的默认数据未导入。 有人知道如何导入表格中的数据吗? 最佳答案 我们
我一直在分析一些 230V 通信并试图找出协议(protocol)的校验和算法。从我了解到的通信结构如下: 第一个 block 总是相同的,必须是某种开始结构(910hex) 然后嵌套5个 block
在 AmigaOS 中的 Devs:Monitors 中找到的文件,它们包含什么? 它们的内部格式是什么?您如何修补一个或从头开始创建一个? 最佳答案 Amiga 程序 MonEd ( http://
我正在使用 VS2013 更新 3 的“逆向工程”模型优先功能从现有数据库开发 EF 模型。不幸的是,我无法完全控制数据库架构,它使用表和列前缀(例如 tblPerson , cFirstName,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在尝试对 APK 文件进行逆向工程。 我尝试了 apk2jar 来获取类和资源文件。但我无法解压缩 Assets 。 有人可以帮忙吗? 最佳答案 使用 apktool。它将对所有布局、值、 Ass
我正在尝试解码由 Android instagram 应用程序发送到 graph.instagram.com 的帖子数据。该问题与此处发现的问题类似: Reverse Engineer HTTP re
我想查明用 C/C++ 编写的应用程序究竟在哪里失败。我无法直接调试应用程序,既不使用 gdb/lldb 也不使用 IDE,因为应用程序是由程序启动的(它是 webots 机器人模拟软件的机器人 Co
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是
我有一个最初用 VS2005 编写的小实用程序。 我需要做一点小改动,但是其中一个 dll 的源代码在某处丢失了。 是否有免费或价格合理的工具将 dll 反向工程回 C++ 代码。 最佳答案 Hex-
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我想知道是否有人知道如何对 Access 数据库进行逆向工程。我希望能够生成用于创建数据库表并将所有记录插入表中的 SQL 代码。换句话说,我想创建类似于 MySQL 转储文件的内容。 任何想法都会很
String.GetHashCode 的行为取决于程序架构。所以它将在 x86 中返回一个值,在 x64 中返回一个值。我有一个必须在 x86 上运行的测试应用程序,它必须预测必须在 x64 上运行的
我是一名优秀的程序员,十分优秀!