【发布时间】:2018-02-28 05:49:34
【问题描述】:
假设我有一个这样的函数(完全随机,例如,我只是在 30 秒内写出来)
bool exampleAuthetnication(char *a, char *b)
{
bool didAuthenticate = false;
if(strcmp(a, b) == 0)
{
didAuthenticate = true;
}
if(didAuthenticate)
{
return true;
}
else
{
stopExecutable();
return false;
}
}
如何读取这个函数的前几个字节?
我想出了这个
int functionByteArray[10];
for (int i = 0; i < 10; i++)
{
functionByteArray[i] = *(int*)(((int)&exampleAuthetnication) + (0x04 * i));
}
其背后的逻辑是我们获取函数的内存地址(在本例中为exampleAuthetnication()),然后我们转换为 int 指针,然后取消引用以获取我们尝试读取的当前字节行的值,然后存储在functionByteArray,但它似乎无法正常工作。我究竟做错了什么?我正在努力实现的目标可能吗?
【问题讨论】:
-
"但它似乎无法正常工作" 为什么?结果是什么,你期待什么结果?
-
@tkausl 结果似乎只是一些随机数,它们不符合在 IDA 中查看函数的基础
-
这可能是因为您将 32 位读取为 LittleEndian,而 IDA 将数据显示为字节。
-
@tkausl 也是,即使我更改了此函数的前几行(exampleAuthetnication),存储在 functionByteArray 中的字节也不会改变?
-
你没有解释为什么要获取代码的前几个字节,以及你想在哪台机器和操作系统(和 ABI)上这样做
标签: c++ security assembly memory tampering