Кто-нибудь уже занимался трафиком wot? Я вчера начал, пошёл сначала по ветке sendto и наткнулся там на функцию
Код:
int __stdcall sub_883A60(int a2, int a3, int length)
{
char check_; // zf@1
int v4; // eax@5
unsigned int step_count; // ebx@6
int a2_a3; // ebp@6
int a3_2; // esi@6
int a2_2; // edi@7
int first_int; // edx@8
int second_int; // eax@8
int result; // eax@11
int err_buf; // [sp+8h] [bp-8h]@4
int err_code; // [sp+Ch] [bp-4h]@4
check_ = (length & 0x80000007) == 0; // len check
if ( (length & 0x80000007) < 0 )
check_ = (((length & 0x80000007) - 1) | 0xFFFFFFF8) == -1;
if ( !check_ )
{
err_buf = 0;
err_code = 6;
sub_5AE540(&err_buf, "EncryptionFilter::encrypt: Input length (%d) is not a multiple of block size (%d)\n", length);
}
v4 = 0;
if ( length <= 0 )
{
result = length;
}
else
{
a3_2 = a3;
a2_a3 = a2 - a3;
step_count = ((unsigned int)(length - 1) >> 3) + 1;
do
{
a2_2 = a3_2 + a2_a3;
if ( v4 ) // Other steps
{
first_int = *(_DWORD *)a2_2 ^ *(_DWORD *)v4;
second_int = *(_DWORD *)(a2_a3 + 4 + a3_2) ^ *(_DWORD *)(v4 + 4);
*(_DWORD *)a3_2 = first_int;
*(_DWORD *)(a3_2 + 4) = second_int;
}
else // First step
{
*(_DWORD *)a3_2 = *(_DWORD *)a2_2;
*(_DWORD *)(a3_2 + 4) = *(_DWORD *)(a2_a3 + 4 + a3_2);
}
sub_ADA3FE();
a3_2 += 8;
--step_count;
v4 = a2_2;
}
while ( step_count );
result = length;
}
return result;
}
Но тут либо косяк ида, либо я чего-то не понимаю) Причём я хукнул функцию, длины сообщений совпадают с тем что на sendto идёт в итоге, но судя по всему само сообщение хранится не по адресу a2.. )
Интересно было бы видеть другие наработки, может кто-то уже всё разобрал, а я тупо велосипед заново изобретаю.