2016-05-15 4 views
2

Так что я недавно подключил PR_Write в Mozilla и смог записать результаты (все соединения буквально) в файл журнала, однако есть одна проблема, я предполагал, что после подключения PR_Write я смог бы захватить HTTPS, но когда я вхожу на сервер HTTPS, он не захватывает незашифрованные данные POST, я пытался использовать localhost и создавал поддельный POST, и он фиксирует сообщение localhost, учитывая, что он не зашифрован. Является ли точка подключения PR_Write не к захвату всех видов данных?PR_Write после подключения

Это прототип PR_Write, что я использую и переменная:

typedef int (*Custom_Write)(PVOID, LPVOID, INT); 
Custom_Write c_write=NULL; 

PR_Write definition by Mozilla

и в функции объезда, я называю оригинальный PR_Write, получая адрес, хранящийся в c_write с использованием GetProcAddress. Ниже, как это называется:

// 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

Уверенный - в нем есть strlen(). Связано быть неправильным. –

+0

Интересно, почему у подключенного вызова есть параметр 'int bytes'? Я уверен, что он должен быть там по какой-то причине ..... –

+0

определение PR_Write имеет те три параметра, которые указаны здесь https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSPR/Ссылка/PR_Write – demogorgon

ответ

1

'написать (buf, sizeof (char), strlen (buf), fileHandle);' - вызов strlen() является нецелесообразным и ненужным. Он не только надежно работает с указателями void, которые могут или не могут указывать на массивы символов с нулевым символом, это избыточно, потому что вы уже знаете, сколько байтов/символов писать - оно передается как параметр «int bytes» ,

Избавьтесь от вызова strlen();

fwrite(buf, 1,bytes, fileHandle); 

strlen() не требуется и не может надежно работать с двоичными данными, которые могут содержать встроенные нули.

С сетевым кодом strlen() является катастрофой в 99,9% случаев.

+0

Черт, да, как я мог не видеть, что haha ​​lemme попробуйте этот код – demogorgon