| 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 | 




 Для печати