Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion) PURE;Затем вызываем BeginScene, рисуем, вызываем EndScene и наконец вызываем оригинальный Present.//----- (00000CBC) --------------------------------------------------------
int __fastcall kEncode(int a1, int a2, int a3, int a4)
{
int v4; // r3@2
if ( a1 == 1 )
v4 = crc((const char *)a2, (const char *)a3, (char *)a4);
else
v4 = 1;
return v4;
}
//----- (00000D0C) --------------------------------------------------------
int __fastcall crc(const char *a1, const char *a2, char *a3)
{
size_t v3; // r3@10
char *v5; // [sp+4h] [bp-28h]@1
const char *v6; // [sp+8h] [bp-24h]@1
const char *v7; // [sp+Ch] [bp-20h]@1
signed int v8; // [sp+10h] [bp-1Ch]@1
size_t v9; // [sp+14h] [bp-18h]@1
unsigned int v10; // [sp+18h] [bp-14h]@12
char *s; // [sp+1Ch] [bp-10h]@1
signed int v12; // [sp+20h] [bp-Ch]@1
unsigned int n; // [sp+24h] [bp-8h]@12
v7 = a1;
v6 = a2;
v5 = a3;
v8 = -1;
v9 = -1;
s = 0;
v12 = 0;
while ( v12 <= 2 )
{
if ( (signed int)v9 <= 0 )
{
++v12;
if ( v12 == 1 )
{
s = (char *)v7;
v9 = strlen(v7);
}
else if ( v12 == 2 )
{
s = (char *)v6;
v9 = strlen(v6);
}
}
else
{
s += v9;
}
if ( v12 <= 2 )
{
v3 = v9;
if ( (signed int)v9 >= 20480 )
v3 = 20480;
n = v3;
memcpy(byte_4004, s, v3);
v10 = n;
while ( v10 )
{
--v10;
if ( !(v10 & 1) )
byte_4004[v10] = ~byte_4004[v10];
}
v8 = make_crc(v8, (int)byte_4004, n);
v9 -= n;
}
}
sprintf(v5, (const char *)&unk_25FC, v8);
return 0;
}
//----- (00000EE4) --------------------------------------------------------
int make_crc32_table()
{
unsigned int v1; // [sp+4h] [bp-10h]@2
signed int i; // [sp+8h] [bp-Ch]@1
signed int j; // [sp+Ch] [bp-8h]@2
for ( i = 0; i <= 255; ++i )
{
v1 = i;
for ( j = 0; j <= 7; ++j )
{
if ( v1 & 1 )
v1 = (v1 >> 1) ^ 0xEDB88320;
else
v1 >>= 1;
}
crc32_table[i] = v1;
}
return 0;
}
// EE4: using guessed type int make_crc32_table(void);
//----- (00000FC4) --------------------------------------------------------
int __fastcall make_crc(int a1, int a2, unsigned int a3)
{
unsigned int v4; // [sp+4h] [bp-20h]@1
int v5; // [sp+8h] [bp-1Ch]@1
int v6; // [sp+Ch] [bp-18h]@1
unsigned int i; // [sp+14h] [bp-10h]@3
v6 = a1;
v5 = a2;
v4 = a3;
if ( !initcrc )
{
initcrc = 1;
make_crc32_table();
}
for ( i = 0; i < v4; ++i )
v6 = crc32_table[(unsigned __int8)(*(_BYTE *)(v5 + i) ^ v6)] ^ ((unsigned int)v6 >> 8);
return ~v6;
}
// EE4: using guessed type int make_crc32_table(void);
недетектируемые способы напакостить в win-процессеЧерез hardware breakpoint-ы, например?
CONTEXT, которую можно получить несколькими путями. Самый очевидный — GetThreadContext(), чтобы задетектить отладку, и SetThreadContext(), чтобы ее снять. Второй способ — спровоцировать SEH-исключение, посмотреть CONTEXT *ContextRecord в _except_handler() и поменять при необходимости.KiDispatchException и просто возвращать копию контекста вместо самого контекста, с которой потом поступать по усмотрению.OutputDebugString, но это тоже, в принципе, просто обходится.
Пишем бота для MMORPG с ассемблером и дренейками. Часть 0