Сейчас на форуме: ut2004, vsv1 (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Изменить определенную процедуру из DLL
Посл.ответ Сообщение

Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 августа 2006 20:11
· Личное сообщение · #1

Расковырял я одну DLLку и обнаружил там функцию из kernel32.dll - GetFullPathName, как можно переопределить эту функцию к примеру на GetWindowsDirectory.
Я пробовал в Hiew изменить не получилось, не хватает бит, в IDA поменять смог не смог собрать dll обратно, когда попытался добавить пару бит все посдвигалось и получилось черт знает что.

P.S. Все статьи, что я прочитал (ну или почти все) сводятся к написанию кейгена и исследованию алгоритмов.
А мне надо именно кое что изменить.
Может кто подскажет?



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 07 августа 2006 23:01
· Личное сообщение · #2

Если не хватает бит почитай эту тему http://exelab.ru/f/action=vthread&forum=2&topic=5912



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 08 августа 2006 04:51
· Личное сообщение · #3

честно говоря из невнятного объяснения не понял что и где нужно изменить




Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 08 августа 2006 07:59 · Поправил: Maximus
· Личное сообщение · #4

Henry_12
1. Можно подправить таблицу импорта
2. Можно поcтавить хук.

-----
StarForce и Themida ацтой!




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 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

Короче, напиши чётко, что да как.

-----
Всем привет, я вернулся




Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 августа 2006 19:13
· Личное сообщение · #6

Все спасибо за ответы:
2Bitfry: Вызов этой функции тока в одном месте, если бы он был в разных местах я бы спросил как добавить функцию в список импортов.
Нужной мне функции в импорте нет
Способы вызова я знаю, и как устроен код тоже имею представление (возможно не совсем полное, н овсё же)
2Veliant: Эта статейка немного не подходит Мне надо импорт поменять (или добавить)


 eXeL@B —› Вопросы новичков —› Изменить определенную процедуру из DLL
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати