Внедрение X кода в PE файл.

Тема в разделе "WASM.RESEARCH", создана пользователем HikkaRU1337, 10 ноя 2018.

  1. HikkaRU1337

    HikkaRU1337 New Member

    Публикаций:
    0
    Регистрация:
    10 ноя 2018
    Сообщения:
    4
    Коничива.
    Жму CFF Explorer >> Import Adder >> там добавляю нужную мне dll. >> добавляю секцию где будет мой код >> меняю EP.

    Иду в отладчик, прописываю нужный мне код, делаю call на функцию из dll, готово.
    Вопрос: Работать работает, но виснет на инструкции movzx edx, byte ptr ds:[eax]
    Код который идет в dll:
    Код (C++):
    1. #include <windows.h>
    2.  
    3. constexpr bool Cmp(const char *p1, const char *p2) {
    4.     return *p1 == *p2 && (!(*p1) || Cmp(p1+1, p2+1));
    5. }
    6.  
    7. int main(int argc, char **argv) {
    8.     if (argc <= 1)
    9.         return 0;
    10.  
    11.     if (Cmp(argv[1], "--hello"))
    12.         MessageBox(0, "Hello", "World!", 0);
    13.    
    14.     return 0;
    15. }
    Пациент ; DLL

    p.s если например добавлять обычный MessageBox то работает без проблем.
    В кратце, хочу чтобы по работало только при передачи X аргумента из командой строки, может есть вариант проще?

    p.s.s учусь.

    Там я как понял, регистр какой-то побитый, но т.к только учусь не знаю что конкретно починить.
     
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    Не виснет, а необрабатываемое исключение вызывает. По всей видимости тут
    Код (ASM):
    1. .text:67381AF8             _Z3CmpPKcS0_    proc near
    2. .text:67381AF8 55                          push    ebp
    3. .text:67381AF9 89 E5                       mov     ebp, esp
    4. .text:67381AFB 83 EC 18                    sub     esp, 18h
    5. .text:67381AFE 8B 45 08                    mov     eax, [ebp+arg_0]
    6. .text:67381B01 0F B6 10                    movzx   edx, byte ptr [eax]
    Первым аргументом функции какую-то шляпу отдаешь.
    Код (ASM):
    1. .text:673812D0 8D 4C 24 04                 lea     ecx, [esp+4]
    2. ...
    3. .text:673812E2 89 CB                       mov     ebx, ecx
    4. ...
    5. .text:673812F5 8B 43 04                    mov     eax, [ebx+4]
    6. .text:673812F8 83 C0 04                    add     eax, 4
    7. .text:673812FB 8B 00                       mov     eax, [eax]
    8. .text:673812FD C7 44 24 04+                mov     dword ptr [esp+4], offset aHello ; "--hello"
    9. .text:67381305 89 04 24                    mov     [esp], eax
    10. .text:67381308 E8 EB 07 00+                call    _Z3CmpPKcS0_
    Получается в main функции dll ты берешь аргумент 2, прибавляешь к нему 4, берешь по этому адресу дворд и отдаешь функции первым аргументом.
    Код (Text):
    1. BOOL WINAPI DllMain(
    2.   _In_ HINSTANCE hinstDLL,
    3.   _In_ DWORD     fdwReason,
    4.   _In_ LPVOID    lpvReserved
    5. );
    Это какая-то дичь вобщем. DllMain это немного не сишная main(), верней совсем не она. А если аргументы хочешь обрабатывать, есть апи GetCommandLine.
     
    Последнее редактирование: 11 ноя 2018
    HikkaRU1337 нравится это.
  3. HikkaRU1337

    HikkaRU1337 New Member

    Публикаций:
    0
    Регистрация:
    10 ноя 2018
    Сообщения:
    4
    Да я можно сказать ничего и не сделал, лишь добавил при помощи CFF Explorer, а это он наверное сам подставил. (я обычно руками прописываю инструкции, но в этот раз решил пойти по другому пути)
    На C++ не пишу, предпочитаю другие языки.
    Попробую GetCommandLine.
    --- Сообщение объединено, 11 ноя 2018 ---
    GetCommandLine хорошо зашел, благодарю, то что и хотел.
    Код (C++):
    1. #include <windows.h>
    2.  
    3. constexpr bool Cmp(const char *p1, const char *p2) {
    4.     return *p1 == *p2 && (!(*p1) || Cmp(p1+1, p2+1));
    5. }
    6.  
    7. int mainEP() { // Сюда делаю прыжок.
    8.     LPWSTR* argv = NULL;
    9.     int argc = 0;
    10.     argv = CommandLineToArgvW(GetCommandLineW(), &argc);
    11.    
    12.     if (argv == NULL)
    13.         ExitProcess(0);
    14.    
    15.     if (argc > 1) {
    16.         char str[256];
    17.         wcstombs(str, argv[1], sizeof(str));
    18.        
    19.         if (Cmp(str, "--hello"))
    20.             MessageBox(0, "Hello", "World!", 0);
    21.     } else
    22.         ExitProcess(0);
    23.  
    24.     LocalFree(argv);
    25.     ExitProcess(0);
    26. }
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    HikkaRU1337,

    Сформулируйте задачу, если не можете, то вам на кряклаб, там кнопки жмут.
     
  5. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    В очередной раз Мессию там распяли ;) Смертельная обида. Всё он нормально изложил.
     
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    f13nd,

    Мне глубоко пофиг ваше мнение, для меня ценны те люди, которые способны на адекватный анализ, размышление и диалог. Ну а школьники как ты мне не интересны. У таких людей типо тебя нет никакой способности к разработкам, вы только и можите примитивные вещи из гугла говорить, никогда своей работы нет. А если есть задача, то вы голову в песок суёте - это не приемлемо. Потому что в такой голове мозга нет.
     
  7. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    А ты пришел в тему, где человек уже во всем разобрался, со своим аналитическим, располагающим к размышлению и диалогу "ты дебил и ничего не понимаешь, иди вышивай крестиком лучше". Попробуй проанализировать и поразмышлять как это для окружающих выглядит. Про задачу не понял, какая? Определение ЕР? Я крякингом не занимаюсь, это всё наверное очень интересно, но у меня других интересных задач полно.
     
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    f13nd,

    У тс я спросил формулировку задачи, кнопки которые он жал в тулзах не имеют значения. Вам же ответил отдельно, иди кури матчасть
     
    Последнее редактирование модератором: 12 ноя 2018
  9. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    А. Ну сиди жди тогда формулировку.
     
  10. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    f13nd,

    Ну ты быстрый как понос, вот только в нашем деле хорошее качество это способность ждать. У тс займёт кучу времени изучение материала.
     
  11. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    тащемта на gcc конпилите. очевидно что поинтер крив.
    DllMain к вашему сведению это совсем не main. это точка входа, у сишных прог там в основном пролог инициализации всякой пылеты типа динамических конструкторов, статичиских конструкторов итд.