Сейчас на форуме: _MBK_, UniSoft, laslo (+11 невидимых)

 eXeL@B —› Программирование —› вызов чужой функции посредством dll injection
Посл.ответ Сообщение

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

Создано: 19 августа 2012 01:48
· Личное сообщение · #1

Здравствуйте! У меня есть чужая программа, в которой есть ряд функций... например мне нужно получить результат функции int myfunc(). можно ли воспользовавшись dll инжектом вызвать эту функцию? если да то как?




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 19 августа 2012 01:57 · Поправил: plutos
· Личное сообщение · #2

мне нужно получить результат функции int myfunc().

Открой программу в debugger'e (OllyDbg например), зайди в эту функцию, Executе till return, и посмотри, что содержит EAX.
Обычно там лежит return value of a function (результат функции).

-----
Give me a HANDLE and I will move the Earth.


| Сообщение посчитали полезным: Rio

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

Создано: 19 августа 2012 02:05
· Личное сообщение · #3

та проблема в том, что эту функцию нужно вызывать постоянно и получать ее результат.. если постоянно в отладчике такое делать...



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

Создано: 19 августа 2012 02:06
· Личное сообщение · #4

просто такой странный этот ехе. Эта функция находится в dll_ex.dll, но в программе я не могу найти не одного вызова этой функции с библиотеки, но эта функция экспортируется самой ехе... но вызвать ее не могу... проблемы с памятью возникают, даже когда я соблюдаю декларацию... нечего не понимаю...




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 19 августа 2012 02:15 · Поправил: plutos
· Личное сообщение · #5

Во-первых, есть кнопка "ПРАВКА" - пользуйся ею.

Во-вторых, "но эта функция экспортируется самой ехе... но вызвать ее не могу... проблемы с памятью возникают, даже когда я соблюдаю декларацию... нечего не понимаю... "

Так кто откуда экспортируется? из dll, из exe? Откуда и как ты ее вызываешь?
Если все же из dll, то напиши свою маленькую программу, которая бы динамично загружала эту dll и вызывай оттуда (если знаешь прототип функции), там увидишь и результат.

-----
Give me a HANDLE and I will move the Earth.




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

Создано: 19 августа 2012 02:22 · Поправил: frostmen
· Личное сообщение · #6

plutos пишет:
Во-первых, есть кнопка "ПРАВКА" - пользуйся ею.

извини, не увидел


plutos пишет:
Так кто откуда экспортируется? из dll, из exe? Откуда и как ты ее вызываешь?

нужная функция экспортируется самой exe, хотел вызвать со своей программы - ошибки с памятью, декларация верная




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 19 августа 2012 02:43 · Поправил: plutos
· Личное сообщение · #7

нужная функция экспортируется самой exe, хотел вызвать со своей программы - ошибки с памятью
Как же ты все это делаешь? RPC? MapViewOfFile? Любопытно было бы взглянуть...
Ты ведь осознаешь, что два процессa run each in its own virtual space? И попытка одного влезть в память другого строго карается.

-----
Give me a HANDLE and I will move the Earth.




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

Создано: 19 августа 2012 02:53
· Личное сообщение · #8

Ок, детально: есть у меня программа, пусть будет просто "ехе", у этой программы есть библиотека "dll.dll". В этой библиотеки есть функция int func(). Я знаю, что в программе ехе эта функция вызывается, но, используя, например, Ida Pro 6 прямого вызова из модуля dll.dll этой функции нету. Тогда копаю дальше, открываю через ида нужную нам длл, смотрю в таблицу экспорта: нужная функция присутсвует. Ок, делаю проект на C#:
[DllImport(dll.dll)]
public static extern int func();

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

дальше копаем: открываю в ида саму программу exe, ищу вызов нашей горе-функции, хм... нету... смотрю таблицу экспорта, именно ЭКСПОРТА, и вижу нашу функцию вместе с функцией start. Ок, думаю, попробую повторить. прописываю путь теперь не к ДЛЛ, а к exe, но ошибка та же...




Ранг: 57.7 (постоянный), 49thx
Активность: 0.070
Статус: Участник

Создано: 19 августа 2012 02:54 · Поправил: inffo
· Личное сообщение · #9

frostmen как вариант дернуть функу коде риппером (плагин к ольке) и использовать эту функу в своей программе.

add: Дык файлы у тебя все на C#? Видимо значит не правильно импорт прикручиваешь.

addd: Глянь --> СюДа <-- может поможет




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 19 августа 2012 03:12 · Поправил: plutos
· Личное сообщение · #10

Ну так смотри, какая конкретно инструкция вызывает exception. Смотри какой Exception code, etc.
Анализируй, соображай.
Для того и дадены человеку мозги и такая штука как debugger.

PS
Если твой проэкт на C#, а dll на VC++, то ты пытаешься "поженить" managed and unmanaged code.
(PInvoke?)

-----
Give me a HANDLE and I will move the Earth.




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

Создано: 19 августа 2012 03:15
· Личное сообщение · #11

inffo пишет:
Дык файлы у тебя все на C#? Видимо значит не правильно импорт прикручиваешь.

программа и длл на VC++, моя программа - на VC#

plutos пишет:
Ну так смотри, какая конкретно инструкция вызывает exception. Смотри какой Exception code, etc.
Анализируй, соображай.
Для того и дадены человеку мозги и такая штука как debugger.

ок! Буду думаю! Спасибо за ответы=)




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 19 августа 2012 03:22
· Личное сообщение · #12

а что функция прям таки без параметров? сомневаюсь,
скорее всего параметры, да еще и мало того что не правильно передаными, да еще и не проинициализироваными.
вообщем то да, IDA + разобрать данные которые приходят в функцию, и нарисовать правильный прототип для екстерн(експорта)



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

Создано: 19 августа 2012 03:26
· Личное сообщение · #13

в ида видно, что принимается аргумент CHAR *VAR, возвращается значение типа INT (исходя из псевдокода)




Ранг: 57.7 (постоянный), 49thx
Активность: 0.070
Статус: Участник

Создано: 19 августа 2012 03:31
· Личное сообщение · #14

frostmen ты иногда посты перечитывай, а то бывает информация обновляется



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

Создано: 19 августа 2012 03:38
· Личное сообщение · #15

inffo пишет:
frostmen ты иногда посты перечитывай, а то бывает информация обновляется

да, действительно туплю=) Спасибо за ссылку=)

plutos пишет:
Если твой проэкт на C#, а dll на VC++, то ты пытаешься "поженить" managed and unmanaged code.
(PInvoke?)
конечно PInvoke, это проблема? вроде и надо использовать DllImport при контакте с неуправляемым кодом



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

Создано: 19 августа 2012 04:02
· Личное сообщение · #16

Ладно, спасибо парни за ответы... по ходу разобрался.)




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 19 августа 2012 09:36
· Личное сообщение · #17

Если разобрался, дык отпиши, в чём дело было, и закрой топик.


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


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