MERCURY127
Platinum Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору //----- (00011000) -------------------------------------------------------- int __stdcall sub_11000(int a1, int a2) { __int16 v2; // bx@1 int v3; // ebp@1 void *v4; // edx@1 int v5; // eax@2 LARGE_INTEGER CurrentTime; // [sp+10h] [bp-8h]@3 FastMutex.Count = 1; FastMutex.Contention = 0; KeInitializeEvent(&FastMutex.Event, SynchronizationEvent, 0); P = 0; KeInitializeTimer(&Timer); v2 = word_14038; v3 = dword_14034; v4 = &unk_140CC; do { memset((char *)v4 - 4, 0, 0x64u); qmemcpy(v4, &unk_1400C, 0x1Cu); v5 = (int)v4 + 52; v4 = (char *)v4 + 100; *(_DWORD *)v5 = dword_14028; *(_DWORD *)(v5 + 4) = dword_1402C; *(_DWORD *)(v5 + 8) = dword_14030; *(_DWORD *)(v5 + 12) = v3; *(_WORD *)(v5 + 16) = v2; } while ( (signed int)v4 < (signed int)&qword_14D48 + 4 ); KeQuerySystemTime(&CurrentTime); dword_14D7C = ~CurrentTime.LowPart; sub_12140(); sub_11EC0(); sub_12040(); return 0; } она это //----- (00012040) -------------------------------------------------------- char sub_12040() { __int64 v0; // rax@1 unsigned __int64 v1; // rax@3 unsigned int v2; // esi@4 _DWORD *v3; // eax@4 int v4; // edi@4 int v5; // ecx@4 unsigned __int64 v6; // rax@7 int v7; // ebx@7 unsigned __int64 v8; // rax@8 int v9; // esi@9 unsigned __int64 v10; // rax@12 unsigned __int64 v11; // rax@13 LOBYTE(v0) = dword_14D8C; if ( dword_14D8C & 4 ) { if ( !(dword_14D8C & 1) ) { v1 = __readmsr(0x1Bu); LODWORD(v1) = v1 | 0x800; __writemsr(0x1Bu, v1); } v2 = sub_12600(0x2540BE400ui64, dword_140A0, dword_140A4); v3 = BaseAddress; v4 = *((_DWORD *)BaseAddress + 200); v5 = *((_DWORD *)BaseAddress + 200) & 0x10000; if ( v5 ) { *((_DWORD *)BaseAddress + 200) = 15; *((_DWORD *)BaseAddress + 248) = 8; v3 = BaseAddress; } else { dword_14D8C |= 2u; } v3[224] = -1; v6 = __rdtsc(); v7 = v6; do v8 = __rdtsc(); while ( (signed int)v8 - v7 < v2 ); v9 = -1 - *((_DWORD *)BaseAddress + 228); if ( v5 ) *((_DWORD *)BaseAddress + 200) = v4; if ( !(dword_14D8C & 1) ) { v10 = __readmsr(0x1Bu); LODWORD(v10) = v10 & 0xFFFFF7FF; __writemsr(0x1Bu, v10); } v11 = sub_125C0((unsigned int)v9, 1000000i64); v0 = sub_12600(v11, 0x2710u, 0); qword_14D48 = v0; } return v0; } и в точке присвоения v11 = sub_125C0((unsigned int)v9, 1000000i64); иногда случается пагефолт... //----- (000125C0) -------------------------------------------------------- unsigned __int64 __stdcall sub_125C0(__int64 a1, __int64 a2) { unsigned __int64 result; // rax@2 if ( HIDWORD(a1) | HIDWORD(a2) ) result = a2 * a1; else result = (unsigned int)a2 * (unsigned __int64)(unsigned int)a1; return result; } |