Ну что, будем расти в наших познаниях и продолжать познавать антиотладочные приёмы. Сегодня на очереди будет функция GetThreadContext. Но сегодня не будет того что, просто вызываешь функцию и отладчик палится. Нет, сегодня будет всё сложнее. Но не так, чтобы свесить уши и другие части тела. Для начала идём в MSDN и читаем что пишут про эту функции. Если вкратце, то эта функция нужна для получения потока в контексте указанного потока. Звучит довольно мутно, но я думаю мы скоро со всем разберёмся. Если функция завершиться удачно, то нам возвратится значение всё что угодно, только не ноль. А если наоборот, то ноль. Что-то придумывать сегодня не будем, просто тупо возьмём пример из MSDN (А может и не тупо).
Листинг 1.1
#include "stdafx.h"
#include
#include
#include
void newthread(void *data)
{
// Завершаем текущей поток
TerminateThread(GetCurrentThread(),1);
}
void changeThreadState()
{
// Запускаем новый поток
HANDLE thread = (HANDLE)_beginthread(newthread, 0, NULL );
//Объявляем структуру CONTEXT
CONTEXT context;
BOOL success;
SuspendThread(thread);
// Устанавливаем флаги
context.ContextFlags = (CONTEXT_FULL | CONTEXT_CONTROL);
success = GetThreadContext(thread, &context);
// Проверяем поток на ошибки
assert(success);
//Выводим инфу
printf( "eax=%09X, ebx=%09X, ecx=%09Xn",context.Eax, context.Ebx, context.Ecx );
// Присваиваем значение EAX
context.Eax = 0x1234BBBB;
// Присваиваем значение ECX
context.Ecx = 0x2468ABCD;
// Применяем изменения
success = SetThreadContext(thread, &context);
// Снова проверка
assert(success);
// Останавливаем поток
ResumeThread(thread);
}
int _tmain(int argc, _TCHAR* argv[])
{
// Вызываем функцию
changeThreadState();
// Если нет отладчика, то вы видите это сообщение
MessageBoxA(GetForegroundWindow(), "Отладчика в системе нет", "Хорошая новость", MB_OK);
return 0;
}
Если программа отлаживается, то отладчик просто падает в процессе работы. Если отладчик не найден, то программа выполняет свою работу. Этот способ хорош тем, что в нем нет ни одного перехода и это теоретически может остановить крякеров (новичков). На более опытных это не работает.
Hi! Please e-mail me your contacts. I have a question chase@trensavto.ru» rel=»nofollow»>……
Thanks!…
Добрый день! gavin@onlylcd.ru» rel=»nofollow»>……
C наилучшими пожеланиями…