[英]C++ Detour on winsock recv hooking - custom packet
我正在嘗試在MyRecv
函數中添加其他數據包,但我不知道為什么它不起作用。 我試圖解析傳入的數據包,並且功能正常。 因此,我將自定義數據包發送到應用程序的方式可能不正確。
一般而言,我只想將准備好的數據包發送給應用程序。 我從WPE PRO收到了這個數據包。
使用MyRecv函數的代碼:
INT WINAPI MyRecv(SOCKET sock, CHAR* buf, INT len, INT flags) {
CHAR buffer[256];
char msg2[] = { 0x1B, 0, 0x04, 0x06, 0, 0x5A, 0x65, 0x6E, 0x74, 0x61,
0x78, 0x06, 0, 0x5A, 0x65, 0x6E, 0x74, 0x61, 0x78, 0x05, 0x07, 0,
0x66, 0x61, 0x6A, 0x6E, 0x69, 0x65, 0x65 };
int ret = precv(sock, buf, len, flags);
if (ret <= 0) {
return ret;
}
if (fake_recv) {
char tmp[256];
fake_recv = false;
printf("Fake1-> Lenght:%d Size:%d", len, strlen(buf));
strcat(buf, msg2);
printf("Fake2-> Lenght:%d Size:%d", len, strlen(buf));
return ret;
}
return ret;
}
msg2
不是以null終止的字符串。 實際上,它具有內部null。 因此,將strlen()
和strcat()
與它一起使用永遠不會起作用。
同樣,您既不知道也不關心buf,
已經存在的內容buf,
因此在其上調用strcat()
和strlen()
既毫無意義又很危險:如果它根本不包含任何空值,則將超出它的長度,並且最多會過度報告其長度,並且發生最嚴重的崩潰。
而且您不會針對添加到緩沖區中的額外數據調整ret
。
聲明未使用的tmp[]
變量並沒有實現任何有用的目的。
嘗試這個:
if (fake_recv) {
fake_recv = false;
printf("Fake1-> Length:%d Received:%d", len, ret);
int len2 = min(len-ret, sizeof msg2);
memcpy(&buf[ret], msg2, len2);
ret += len2;
printf("Fake2-> Length:%d Received:%d", len, ret);
return ret;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.