Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

По поводу "исправления" программы защищенной ASProtect 2.xx

Обсудить статью на форуме

Массу крэкерских инструментов, видеоуроков и статей вы сможете найти на видеокурсе от нашего сайта. Подробнее здесь.

Автор: Life <it_my_life@rambler.ru>

Попалась программка, защищенная ASProtect как отучить ее от проверки при помощи исправления кода обнаружилось, быстро:
- есть некоторая процедура CALL которой возвращает в AL=0 – Если мы пушистые и лицензионные и не 0 если нет.
Но проблема в том как внести исправления в код. т.е. распаковать. Я прочитал почти все, что есть на CrackLab по этому поводу и восхитился как глубоко и качественно люди умеют копать чужие коды. Но я поседею, если все эти шаги проделаю по подобию, того, что они «наизучали». Поэтому решил воспользоваться трюком, которым пользуюсь, если не могу распаковать программу, но могу подменить любую DLL. Да способ не красив, но он работает.
Для этого в EXE файле меняем имя экспортируемой DLL например kernel32.dll на xernel32.dll. (Иногда правда приходится переименовывать функции в DLL и EXE.)
Далее создаем экспорт на необходимые функции. Функции экспортируемые моим DLL переадресуют вызовы к настоящей DLL с возможностью обработки параметров если нужно.
В моём случае понадобилось 4-ре вызова
GetProcAddress
GetModuleHandleA
LoadLibraryA
RaiseException
я создал пустышки, прописал в них int 3 (хотел просто проверить), изменил EXE и откомпилировал DLL. Все сложил в одну папку.
Запустил программу и очень удивился, она работала, но ни одна из моих функций не вызвалась, такого еще со мной никогда не было :). Но в данном случае мне это все равно, хотя очень интересно почему?
Для того чтобы пробиться за защиту мне пришлось создать поток который каждые 100 мс смотрел не распаковалась ли программа если да, то подправим код программы. Если все распаковалось, то мы правили, а поток прекращал свою жизнь.
Ну и на последок пришлось при запуске и завершении восстанавливать подпорченный код иначе происходило крушение защиты.
Вот собственно и вся «защита»
В качестве дополнения привожу код DLL и DEF файл.
Может не красиво, но работает. Да лишний файл, но быстро сделано.

С уважением © LIFE 2006.
---------------------------------------------------------------------------------------------------------------------
xernel32.cpp
// xernel32.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "xernel32.h"
#include<process.h>
#pragma comment(linker, "/export:accept=kernel32.RaiseException")
HMODULE Krnl;
void TestTest( void *dummy )
{
int ex=0; // завершение поиска если 1
while(1)
{
_asm
{
mov eax,4388b0h


// Уже расспаковались, т.е. код mov al,[xxxx]
// ret
cmp [eax],8f1bdda0h
jnz waitmy
;// Да заменим на xor eax,eax
;// ret
;// nop
mov dword ptr [eax],90c3c033h
mov [ex],1 // Выходим
waitmy:
}
if(ex) break; // Выходим ли?
Sleep(100); // Ждем 100 мс
}
}


BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
Krnl=LoadLibrary("kernel32.dll"); //На всякий случай загрузим,
// хотя уже наверника загружена
_asm // Востановим код защиты
{
mov eax,4388b0h
mov dword ptr [eax],7306ac74h
}
_beginthread(TestTest, 0, NULL );
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
_asm // Востановим код защиты
{
mov eax,4388b0h
mov dword ptr [eax],7306ac74h
}
break;
}
return TRUE;
}
// Пустышки
void GetProcAddress(void){
_asm int 3
}


void GetModuleHandleA(void){
_asm int 3
}

void LoadLibraryA(void){
_asm int 3
}

void RaiseException(void){
_asm int 3
}
--------------------------------------------------------------------------------------------------------------------
xernel32.def

LIBRARY xernel32.dll

EXPORTS
GetProcAddress
GetModuleHandleA
LoadLibraryA
RaiseException




Обсуждение статьи: По поводу "исправления" программы защищенной ASProtect 2.xx >>>


Комментарии к статье: По поводу "исправления" программы защищенной ASProtect 2.xx

PE_Kill 18.03.2006 10:15:08
Можно сделать еще проще. ASProtect по дефолту просит винду дать ему LoadLibrary. Меняем начало ASProtect'а на:
push offset MyDll
call LoadLibrary
jmp EP

В Dll перехватываем MapViewOfFile и GetModuleHandleA (GetVersion,CreateDialogInderect...) ну а дальше патчим, фиксим, режем...

---
NoName 18.06.2007 01:17:59
Зы а как подпатчить если нужная инструкция находится в динамической (выделеной памяти )
---

Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS