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

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by EST a1ien, 22 Mar 2008.

  1. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Кто может обяснить одну весчь.
    В статье криса от (Журнал Хакер #101 май 2007 суперклей от Хакера Статья ) был описан очень интересный метод. Дак вот пару вопросов по статье.
    Почему если мы в функцию dummy добавляем вызов любой другой функции то приложение падает с ошибкой. Тоесть :

    Code:
    // создаем фиктивную экспортируемую функцию,
    // которую потом будет импортировать дрозофила
    __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 вызвать(как это на асме выглядит + как я понял ее тоже надо будут в импорт прописывать)
     
    1 person likes this.
  2. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    Для вызова функции из dll смотри следующие WinAPI:
    LoadLibrary, GetProcAddress
    Ну или через импорт.

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

    x0man Elder - Старейшина

    Joined:
    24 Feb 2006
    Messages:
    33
    Likes Received:
    13
    Reputations:
    0
    -----------------

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

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    хук в ядре с обходом аутпоста. однозначно зачет!
     
  5. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Блин ребята. Вы о чем мне надо в уже существующий exe добавить другую DLL и вызывать оттуда функции
     
  6. FoX's

    FoX's Дохлый

    Joined:
    26 Dec 2004
    Messages:
    169
    Likes Received:
    29
    Reputations:
    0
    Code:
    extern "C" __declspec(dllexport) int dummy(){
         MessageBox(NULL,"test msg","TEST",MB_OK);
         return 0;
    }
    
    GetProcAddress(LoadLibrary("this.dll"),"dummy");
    
    или подключай либу от dll...
     
  7. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Подгружаем свою длл

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

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

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