ошибка при встраивании dll в сторонний exe

Тема в разделе "WASM.RESEARCH", создана пользователем Alastor, 6 дек 2011.

  1. Alastor

    Alastor Member

    Публикаций:
    0
    Регистрация:
    23 июн 2009
    Сообщения:
    43
    Доброго времени всем. У меня такой вопрос:
    Когда внедряю свой dll в чужой exe,
    (в моем случае, программа MineSweeper (Vista), в dll кроме MessageBox ничего нет)
    в секции данных по адресу 78С7 <"Beginner> записываю имя моей dl.dll
    далее, где происходит выбор уровня сложности игры, а именно по адресу
    1АF59 правлю код на загрузку моей dll push 78С7
    адрес в вызове call правлю на адрес 6020, где хранится _stdcall LoadLibrary

    при запуске приложения, при выборе уровня сложности, нет вызова моей .dll.
    есть еще вариант, когда при запуске приложения сразу вылезает окно выбора
    сложности игры.

    До этого пробовал внедрить dll через LordPE и AppInit_DLLs - все нормально получилось

    А тут уже сижу 4 дня и все никак.
    Посмотрите пожалуйста - что делаю не так.

    https://rapidshare.com/files/4021698840/Minesweeper.rar
     
  2. Alastor

    Alastor Member

    Публикаций:
    0
    Регистрация:
    23 июн 2009
    Сообщения:
    43
    сорри, интернет совсем плох сегодня
     
  3. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Было:

    Код (Text):
    1. .0101AF59: 68C8780001              push        0010078C8 ;'Beginner'
    2. .0101AF5E: 8B4D08                  mov         ecx,[ebp][08]
    3. .0101AF61: E8E0580200              call       .001040846 --↓7
    4. .0101AF66: 8B4508                  mov         eax,[ebp][08]
    5. .0101AF69: C9                      leave
    6. .0101AF6A: C20800                    retn        8
    Стало :
    Код (Text):
    1. .0101AF59: 68C8780000             push        0000078C8 ;'     ????????
    2. .0101AF5E: 8B4D08                 mov         ecx,[ebp][08]
    3. .0101AF61: FF6020                 jmp         d,[eax][20]        ????????
    4.  
    5. .0101AF64: 0200                    add         al,[eax]
    6. .0101AF66: 8B4508                  mov         eax,[ebp][08]
    7. .0101AF69: C9                      leave
    8. .0101AF6A: C20800                  retn        8
    Промахнулись вы батенька со своей правкой. Испортили push и call где? Вместо него нечто невразумительное.
    Нужный call dword[1006020] не влезет тут. Относительный адрес ссылки на LoadLibrary возможно и 6020,
    но почему-то мне кажется что надо задать 1006020 и возможно еще релоки исправить.
     
  4. Alastor

    Alastor Member

    Публикаций:
    0
    Регистрация:
    23 июн 2009
    Сообщения:
    43
    valterg Cпасибо за старание донести до меня ошибки. Но огорчу вас - тщетно. Перелопатил весь ехе-шник сапера, уже дописывал в нулевые биты в конец в файла:
    Код (Text):
    1. push 0D3A20                   ;разместил dll
    2. call 601C                        ;вы оказались правы, LoadLibrary лежит немного по другому смещению
    3. push 0D5617                   ;имя функции
    4. push eax
    5. call 6018                        ;GetProcAdr
    потом вызываю это изменением адреса джампа функции PostQuitMessage по адресу 2E3CE

    Вроде все нормально, приложение запускается, работает. и в момент выхода из него, где по идее должен вызваться dl.dll, аварийно завершается. Прикрепляю его. (для запуска нужна еще родная длл-ка. еще доступна там же https://rapidshare.com/files/4021698840/Minesweeper.rar)

    Успокойте мою душу - подскажите, подробно куда и что писать.





    похоже что все-таки лыжи-то едут... а вот дело во мне
     
  5. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Alastor
    Господи, ну откуда ты эти адреса берешь : 6018 и т.д. В экзе-файле у тебя стоят 1006018
    (HIEW конечно выдает с коррекцией, но я смотрел хекс-вьювером и там тоже 1000000+adr).
    На днях еще раз проверю.
    И уж никак не call адрес, а именно то что я написал.