![]() |
eXeL@B —› Вопросы новичков —› Изменить определенную процедуру из DLL |
Посл.ответ | Сообщение |
|
Создано: 07 августа 2006 20:11 · Личное сообщение · #1 Расковырял я одну DLLку и обнаружил там функцию из kernel32.dll - GetFullPathName, как можно переопределить эту функцию к примеру на GetWindowsDirectory. Я пробовал в Hiew изменить не получилось, не хватает бит, в IDA поменять смог не смог собрать dll обратно, когда попытался добавить пару бит все посдвигалось и получилось черт знает что. P.S. Все статьи, что я прочитал (ну или почти все) сводятся к написанию кейгена и исследованию алгоритмов. А мне надо именно кое что изменить. Может кто подскажет? ![]() |
|
Создано: 07 августа 2006 23:01 · Личное сообщение · #2 |
|
Создано: 08 августа 2006 04:51 · Личное сообщение · #3 |
|
Создано: 08 августа 2006 07:59 · Поправил: Maximus · Личное сообщение · #4 |
|
Создано: 08 августа 2006 08:31 · Поправил: Bitfry · Личное сообщение · #5 Henry_12 пишет: когда попытался добавить пару бит Да уж объяснение ещё то. Henry_12. 1. Минимально адресуемая единица в «современных» компах – это байт. Значит, и изменения ты делаешь на уровне байта (даже если меняешь значение всего лишь одого бита). 2. Ты, похоже, не представляешь, как устроен код вообще и уж тем более не представляешь, как устроен PE-файл. Функции импорта (в данном случае WinAPI) вызываются через таблицу адресов импорта, которую настраивает загрузчик. Самые распространённые способы вызова внешних (импортных) функций: call 12345678 ; где вместо «12345678» загрузчик вставляет правильное смещение функции в адресном пространстве процесса call [12345678] ; где в dword ячейке памяти 12345678 находится адрес перехода, настраиваемы загрузчиком И вот так: call 12345678 ... 12345678: jmp [87654321] ; где в dword ячейке 87654321 загрузчик также поместит адрес функции (разумеется цифры от балды =) ). Henry_12 пишет: Расковырял я одну DLLку и обнаружил там функцию из kernel32.dll - GetFullPathName, как можно переопределить эту функцию к примеру на GetWindowsDirectory. Я так понял, ты пытаешься переправить имя функции в импорте, а не сам вызов. Так делать не стоит. Во-первых, вызовов этой функции может быть много а тебе видимо нужен только один, а во-вторых таблицу импорта перестраивать ради одного вызова – глупо. Но если хочется именно так – ImpRec в руки и вперёд. По-умному нужно заменить вызов одной функции на другую и добавлять байты здесь не нужно (если обе функции есть в импорте). Если нет, то всё равно лучше добавить эту функцию в импорт, чем перестраивать всё. Когда руками разберёшься, полезную утилиту можно взять здесь: wasm.ru/toollist.php?list=4 Короче, напиши чётко, что да как. ----- Всем привет, я вернулся ![]() |
|
Создано: 08 августа 2006 19:13 · Личное сообщение · #6 Все спасибо за ответы: 2Bitfry: Вызов этой функции тока в одном месте, если бы он был в разных местах я бы спросил как добавить функцию в список импортов. Нужной мне функции в импорте нет ![]() Способы вызова я знаю, и как устроен код тоже имею представление (возможно не совсем полное, н овсё же) 2Veliant: Эта статейка немного не подходит ![]() ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Изменить определенную процедуру из DLL |