DragonForce
-
Постов
11 -
Зарегистрирован
-
Посещение
-
Победитель дней
1
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные DragonForce
-
-
2 часа назад, Xipho сказал:
Всегда проще обвинить кого-то, чем признать, что допустил оплошность в формулировке вопроса )))
То-есть я должен был написать - "Дайте мне готовое решение как вызывать WINAPI функции в AutoAsm"?)
-
8 часов назад, Xipho сказал:
Вопрос был "есть ли возможность". Ответ был "есть". Каков вопрос, таков ответ...
Ну я же говорю, очень информативный ответ, на одном уровне с популярностью данного форума.
-
7 часов назад, Xipho сказал:
Есть.
Очень информативно, спасибо.🥲
-
Есть ли возможность в Auto assemble вызывать WINAPI - RegDeleteKeyW?
То-есть сделать что-то типа
push *Первый параметр*
push *Второй параметр*
call RegDeleteKeyW
-
2 часа назад, Garik66 сказал:
может поможет пример
Спасибо Вам всем. Такой вопрос, Вы создали метку example и прописали туда через db слово - Text. Но сама память для этого слова выделяется где-то в рандомном месте или хранится в выделенной памяти newmem? Просто я не вижу чтобы персонально для метки example выделялось память через alloc.
-
56 минут назад, Xipho сказал:
записать свой текст в память, и в EDI записать адрес твоего текста.
Нужно по идее выделить память через alloc, прописать туда байты нужно текста, а потом написать "mov edi, NameAllocMemory", но я не совсем знаю как правильно написать это в Auto Assembler`e, подскажите пожалуйста.
-
Доброго времени суток.
Такой вопрос, как изменить текст который хранится в регистре EDI.К примеру:
push edi - edi:"TEST"
call eax
MessageBox выводит сообщение - "TEST".
Как изменить текст который хранится в EDI перед вызовом call eax?
-
15 минут назад, Xipho сказал:
Тебе следует разобраться с указателями в С++, и как хранятся константные строки в памяти, при использовании их с С++. Но вкратце - да, конструкцией
lpBuffer = (LPVOID)"TEST1234"
ты создаешь в памяти новый кусок, куда кладешь строку TEST1234, и затем адрес начала этого куска ты записываешь в lpBuffer. Только это локальный для функции lpBuffer, а не внешний. А далее в коде используешь оригинальный адрес
Видимо для меня это пока не совсем понятно... Я думал достаточно в хук функции присвоить другое значение lpBuffer, а далее все что читает в оригинале этот буфер(после вызова ReadFile), будет получать уже новое значение lpBuffer`a(то, которое я присвоил в хуке)... Если у меня в собственной программе(в которой 30 строк кода-_-), которую я сделал для примера, не получается изменить lpBuffer, то о чем тогда еще речь...?
-
19 минут назад, Xipho сказал:
Попробуй подменять буфер уже после того, как отработает оригинальная функция, а не наоборот. Ну и плюс ты в коде хука подменяешь адрес буфера, а в мейне читаешь из старого адреса, в котором, разумеется, пустота.
Сделал как Вы подсказали, сперва вызвал TrueReadFile, а только потом указал lpBuffer = (LPVOID)"1234", но щас не работает, выводит все равно - "TEST".
Из-за того что я в коде хука lpBuffer присваиваю другое значение(1234), я изменяю адрес самого lpBuffer? -
Спойлер
void ReadFromFile(LPVOID Buff) { HANDLE FileHandle; DWORD R; DWORD Size; char Line[256]{}; FileHandle = CreateFileA("C:\\123.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); Size = GetFileSize(FileHandle, &Size); if (Size > 255) Size = 255; ReadFile(FileHandle, Buff, Size, &R, NULL); *(Line + R) = 0; CloseHandle(FileHandle); } void main() { getchar(); LPVOID Line[256]{}; ReadFromFile(Line); std::cout << (LPCSTR)Line << std::endl; }
Для теста был написан код выше. Выводит в консоль текст - "TEST" из текстового документа 123.txt.
Пытаюсь поставить хук на ReadFile, чтобы подменять считанный результат, допустим вместо "TEST" чтобы выводило "TEST1234".СпойлерBOOL(WINAPI * TrueReadFile)( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped) = ReadFile; __declspec(dllexport) BOOL WINAPI MyReadFile( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped) { lpBuffer = (LPVOID)"TEST1234"; return TrueReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped); }
Но в итоге просто пустое поле появляется и все, может ли кто-нибудь помочь?
Разбор защиты и обход примитивных анти-реверс техник
in Статьи для продвинутых
Опубликовано
ИНИЦИАЛИЗАЦИЯ ЗАЩИТЫ
Перед тем как выводить какое либо приветствие на экран, таск проверяет флаг NtGlobalFlag из структуры PEB:
Обойти это можно как изменением PEB структуры, так и просто пропатчить jne на NOP
Далее идет следующий трюк, создается поток с проверкой где в цикле вызывается функция IsDebuggerPresent:
Обойти можно разными путями, начиная от проNOPить создание потока, изменить пролог функции с push на ret или просто изменить логику внутри патчем cmp или jne\je
Далее идет последний трюк, который так же будет выполняться в отдельном потоке как и предыдущий:
Используются следующие функции:
CreateToolhelp32Snapshot - Делает снимок процессов Process32Next - Получает информацию о следующем процессе Process32First - Получает информацию о первом процессе
Я думаю многие уже догадались в чем заключается данный трюк, а если нет, вот подсказка:
В цикле, как и в предыдущем трюке, будут искаться процессы, которые указаны выше, при детекте которых таск будет закрываться.
АЛГОРИТМ
Разбирать алгоритм нет никакого смысла(и желания), ибо сгенерированный ключ по имени палится в регистре перед сравнением.