挂钩

时间:2016-05-15 08:47:53

标签: c post https hook mozilla

所以我最近在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数据时,它会失败。它最终写出了胡言乱语。

1 个答案:

答案 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%的时间内都是灾难。