这就是我想要实现的目标;我正在连接 HttpSendRequest 函数(在 Xbox 上是 XHttp)并尝试转储 pcszHeaders 中大小为 0x1F0E 的证书。
现在的问题;它似乎只写了 4 个字节,我什至尝试分配额外的内存并将每个位设置为 0 以查看它是否是 Headers 的大小,并且它继续只写 4 个字节。我已经能够远程转储 pcszHeaders,因为我在调试时获得了地址,但我需要在运行时转储它。
我在调试时注意到的东西 - pcszHeaders 的地址仅在本地显示,直到它到达;
printf("XHttpSendRequest: %s\n", "Creating Certificate.bin...");
一旦它到达 printf() 上面的地址更改为 0x00000000(坏 ptr),但它仍然正确写入 pcszHeaders 正确数据的第一个字节,但仅此而已。
这是整个钩子;
BOOL XHTTP_SEND_REQUEST_HOOK(
HINTERNET hRequest,
const CHAR *pcszHeaders,
DWORD dwHeadersLength,
const VOID *lpOptional,
DWORD dwOptionalLength,
DWORD dwTotalLength,
DWORD_PTR dwContext)
{
if(pcszHeaders != XHTTP_NO_ADDITIONAL_HEADERS)
{
printf("XHttpSendRequest: %s\n", "Creating Certificate.bin...");
// Setup expansion
doMountPath("Hdd:", "\\Device\\Harddisk0\\Partition1");
//create our file
HANDLE fileHandle = CreateFile("Hdd:\\Certificate.bin", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
//does file exist?
if(GetLastError()!=ERROR_ALREADY_EXISTS
||fileHandle!=INVALID_HANDLE_VALUE)
{
printf("XHttpSendRequest: %s\n", "Writing to file...");
DWORD wfbr;
//write to our file
if(WriteFile(fileHandle, pcszHeaders, 0x2000, &wfbr, NULL))
{
printf("XHttpSendRequest: %s\n", "File written!");
printf("%s\n", "Request has ended.");
CloseHandle(fileHandle);
return XHttpSendRequest(hRequest, pcszHeaders, dwHeadersLength, lpOptional, dwOptionalLength, dwTotalLength, dwContext);
}
}
}
}
编辑:我稍微更改了代码,并将 pcszHeaders 数据复制到我创建的另一段内存中,我的指针似乎具有所有正确的数据,我尝试将其写入文件,但它仍然只写入4字节。我什至使用 sizeof() 而不是硬编码的 0x2000。