Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   суперклей от Хакера (непонятки) (https://forum.antichat.xyz/showthread.php?t=65074)

EST a1ien 22.03.2008 20:01

суперклей от Хакера (непонятки)
 
Кто может обяснить одну весчь.
В статье криса от (Журнал Хакер #101 май 2007 суперклей от Хакера Статья ) был описан очень интересный метод. Дак вот пару вопросов по статье.
Почему если мы в функцию 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

Цитата:

Сообщение от -=HAKER_HIP_HOP=-
код на "си плюс плюс":
Код:

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

Цитата:

Сообщение от -=HAKER_HIP_HOP=-
код на "си плюс плюс":
Код:

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 метода. И какой в каких условиях лучше использовать.
+ как вызывать функции чужого приложения из своей длл если она к нему подгружена.


Время: 21:56