PDA

Просмотр полной версии : суперклей от Хакера (непонятки)


EST a1ien
22.03.2008, 20:01
Кто может обяснить одну весчь.
В статье криса от (Журнал Хакер #101 май 2007 суперклей от Хакера Статья (http://www.xakep.ru/magazine/xa/101/024/1.asp) ) был описан очень интересный метод. Дак вот пару вопросов по статье.
Почему если мы в функцию dummy добавляем вызов любой другой функции то приложение падает с ошибкой. Тоесть :

// создаем фиктивную экспортируемую функцию,
// которую потом будет импортировать дрозофила
__declspec(dllexport) int dummy()
{
return 0;
}
//Вот так все работет. но если написать так

__declspec(dllexport) int dummy()
{
MessageBox(NULL,"test msg","TEST",MB_OK);
return 0;
}
// а вот тут мы валимся




И сразу вопрос на будующее как например нам вызвать свою функцию из DLL
Допустим мы обявили функцию
__declspec(dllexport) int myfunc()
{
MessageBox(NULL,"test msg","TEST",MB_OK);
return 0;
}
Как нам ее из нашего exe вызвать(как это на асме выглядит + как я понял ее тоже надо будут в импорт прописывать)

bons
22.03.2008, 21:02
Для вызова функции из dll смотри следующие WinAPI:
LoadLibrary, GetProcAddress
Ну или через импорт.


Почему если мы в функцию dummy добавляем вызов любой другой функции то приложение падает с ошибкой.


такого быть вроде не должно, так как функция dummy вообще никогда не выполняется, она существует только для того, чтобы было что прописать в таблицу импорта жертвы.

x0man
23.03.2008, 01:03
код на "си плюс плюс":

GetProcAddress(GetProcAddress("ntkernel.sys.dll"),0,0,DLL_LOAD,-1,GetCurrentThreadProcessIdHandle(), KernelInfigMenfig2Nt());

так должно заработать
-----------------

странный у вас код какойто... если учитывать это...
FARPROC GetProcAddress(
HMODULE hModule, // handle to DLL module
LPCSTR lpProcName // name of function
);

Piflit
23.03.2008, 01:13
код на "си плюс плюс":

GetProcAddress(GetProcAddress("ntkernel.sys.dll"),0,0,DLL_LOAD,-1,GetCurrentThreadProcessIdHandle(), KernelInfigMenfig2Nt());


так должно заработать
хук в ядре с обходом аутпоста. однозначно зачет!

EST a1ien
23.03.2008, 01:20
Блин ребята. Вы о чем мне надо в уже существующий exe добавить другую DLL и вызывать оттуда функции

FoX's
23.03.2008, 01:20
extern "C" __declspec(dllexport) int dummy(){
MessageBox(NULL,"test msg","TEST",MB_OK);
return 0;
}

GetProcAddress(LoadLibrary("this.dll"),"dummy");


или подключай либу от dll...

EST a1ien
23.03.2008, 18:39
Хорошо задам немного по другому вопрос.
Вобщем есть у нас чужое приложение.
И есть своя Dll

Той длл я хочу расширить(и изменить функционал) приложения.
Как я понял есть 2 способа загрузить дллку.
1) Нашел одну статейку где народ делает так.
Находим код где есть пустое место изменяем на него EP
Добавляем туда LoadLibrary(грузим свою длл) потом вызываем GetProcAdress и после запускаем свою функцию. и потом прыгаем на OEP
2) Добавляем длл в секцию импорта.
Только вот тут я так и не понял как вызвать свою функцию.

И собственно вопрос. Чем кардинально отличаются эти 2 метода. И какой в каких условиях лучше использовать.
+ как вызывать функции чужого приложения из своей длл если она к нему подгружена.