- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我听说可以通过链接函数所在的对象文件与您编写的另一个对象文件来覆盖/劫持/破解函数的实现。我一直在玩,似乎我只能在一种情况下让它工作。但是,我想知道除了所描述的情况之外,是否有可能在其他情况下实现此结果(如下所示)。
使用的编译器:TDM-GCC 4.9.2
操作系统:Windows 8 64 位
下面描述劫持“成功”的情况:
这是一个名为 sample.cpp
的示例源
#include <iostream>
int returnOne();
int main()
{
std::cout << "returnOne() returns " << returnOne();
return 0;
}
编译:
g++ -c sample.cpp -o sample.o
用nm.exe
检查目标文件后,我的函数的名称是:__Z9returnOnev
所以,进入另一个来源hack.cpp
:
extern "C" int _Z9returnOnev()
{
return 5; //rather than return 1
}
编译:
g++ -c hack.cpp -o hack.o
现在我用 hack.o
“重新创建”可执行文件文件:
g++ -Wl,--allow-multiple-definition hack.o sample.o -o sample.exe
运行时,sample.exe
产生:
returnOne() returns 5
那么劫持成功了。
现在,如果我在任何时候提供 returnOne()
的实现在原始来源中,此技术不再有效。如:
#include <iostream>
int returnOne();
int main()
{
std::cout << "returnOne() returns " << returnOne();
return 0;
}
int returnOne()
{
return 1;
}
它编译正常,但调用时,该函数每次都使用原始实现。
所以,我想知道如果函数的实现已经在原始源代码中定义,是否有可能以这种方式“劫持”一个函数的实现,或者只有当它的原型(prototype)被定义时才有可能?
编辑(2015 年 7 月 15 日):
我还编译了 w/o 优化,如:
g++ -Wl,--allow-multiple-definition,-O0 hack.o sample.o -o sample.exe
但是,问题依然存在。
编辑 2(2015 年 7 月 15 日):
好的,我清理了,然后使用 -O0 开关编译并链接了所有内容:
g++ -O0 -c sample.cpp -o sample.o
g++ -O0 -c hack.cpp -o hack.o
g++ -Wl,--allow-multiple-definition,-O0 hack.o sample.o -o sample.exe
它仍然返回 1。
最佳答案
不,在那种情况下不可能覆盖函数实现。
您的编译器在编译源文件时通常会做的是创建一个包含函数签名(标识符+参数类型)和函数地址的表。当您的代码中有函数调用时,编译器会尝试使用此签名调用该函数。这就是为什么您需要一个链接器 - #include 语句实际上在编译之前将所有声明复制到您的代码中,以便您拥有正确的签名。然后链接器添加可调用函数的地址。如果您的 main.cpp 中有函数定义,则编译器/链接器无需在其他任何地方查找定义。
关于c++ - 通过链接另一个目标文件来劫持函数的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31398000/
当一个对象被实例化时,无论是字符串/函数/等等,__proto__属性(property)包括在内。该属性似乎是由 __proto__ 生成的Object.prototype 中的访问器... Obj
我一直在寻找防止 session 劫持的方法,在这种情况下,有人会窃取 session cookie 并使用它来获得对系统的访问权限。 程序如 http://codebutler.com/firesh
某些 malware such as AVG劫持 404 页面,以便在浏览器中显示一个布满自己广告的页面。 我发现的唯一解决方法是在我的 web 应用程序中放弃自定义错误页面的 404 http 状态
大多数Web应用程序使用cookie来管理用户的 session ,即使关闭了浏览器,也允许您保持登录状态。 让我们假装我们做了书中的所有事情,以确保保存cookie本身。 加密内容 仅设置http
WinError.h中定义的错误代码是否可以被劫持并通过我自己的代码返回? 定义了一些通用 Win32 错误代码: ERROR_FILE_NOT_FOUND:“系统找不到指定的文件。” 当找不到文件时
修改文本然后单击按钮只会触发 onchange 代码 但我需要知道按钮是否被点击: 我需要更改什么才能获取点击处理程序? 最佳答案 效果很好,但 alert() 很糟糕。 我不知道它的确切细节,但
如何保护我的用户免受 session 劫持? 最佳答案 Owasp Top 10 for 2010 中包含三个部分你应该阅读。 1: (!!) A3:“损坏的身份验证和 session 管理。” (!
我有一个问题。我试图在音频元素发生变化时立即获取它的来源,而不是让它连接到服务器。让我详细说明一下:服务器只允许一个请求(随机生成的内容 url),我正在尝试获取该请求,显然我不希望使用新源重新加载音
我需要一种 JavaScript/jQuery 方法来“劫持”不基于类或 ID 的 CSS 定义。 CSS 示例: input { border: 1px solid red; } 如果我有一
一位黑客联系我说他们会使用 session 劫持来关闭我的网站,他说我的文本框存在 session 劫持漏洞。 有没有办法保护文本框免受 session 劫持我用它来逃避和防止 sql 注入(inje
我一直在研究一套安全的登录/门户类型的工具,通用代码没有 SQL 注入(inject)、XSS 等,我有很多东西可以阻止 session 劫持。 为每个页面重新生成 session ID 将用户的IP
在我的 web.xml 中,我为一些资源定义了一个用户数据约束: Personal Area /personal/* U
情况 好吧,正如您在下面看到的,我有一个主应用程序,它创建了一个线程,它创建了一堆后台 worker 。当 RunWorkerCompleted 在某些 BG worker 上被触发时,我有时最终会丢
当我的 golang 应用程序崩溃时,它正在打印 go routines 堆栈跟踪并退出。我想知道是否有很好的方法来获取 panic 输出以进行进一步处理。重定向 stderr 是不够的,因为人们想在
我有一个关于PHP中 session 劫持的问题。我今天早上一直在阅读有关它的信息,我有一些问题在我阅读的文档中并未得到明确回答。 用户可以更改他们在我的网站上的 session 吗?也就是说,如果他
如何防止多个客户端使用相同的 session ID?我问这个是因为我想添加一个额外的安全层来防止我的网站上的 session 劫持。如果黑客以某种方式找出另一个用户的 session ID 并使用该
我想更多地了解 PHP Session Fixation和劫持以及如何防止这些问题。我一直在 Chris Shiflett 的网站上阅读以下两篇文章: Session Fixation Session
DNS 劫持作为最常见的网络攻击方式,是每个站长或者运维团队最为头疼的事情。苦心经营的网站受到 DNS 劫持后,不仅会影响网站流量、权重,还会让用户置身于危险之中,泄露隐私造成财产损失。 就是这样
编辑:对于那些想知道该 SDK 是什么的人来说,它是 Flurry 的中文克隆版,==>> Umeng。 编辑2:在那个奇怪的SDK中实际上有一个禁用崩溃日志处理选项,这将使我的uncaughtExc
我阅读了 Nancy Forms Authentication 的文档.据我所知,那里推荐的方法会导致终身 session ID: "The identifier is the token that
我是一名优秀的程序员,十分优秀!