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

 eXeL@B —› Вопросы новичков —› Пишу dll инjection. Есть Вопросы.
Посл.ответ Сообщение

Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 01 июня 2007 11:30
· Личное сообщение · #1

Вопрос 1:
Допустим я загружаю dll все дела, потом из нескольких мест моей проги надо вызывать разные функции этой dll типа func1 func2 и т.п.
Непонятно одно, dll грузиться все время по разным адресам т.е чтобы адреса функций не портились их надо как-то в таблицу иморта проги прописать чтоли?

2. Пишу на visual c++ пользуясь __asm вставка

в vс++ такой код:

[code]
#include "stdafx.h"

DWORD num1 = 0x10;


BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

__declspec(dllexport) void SetNumber()
{
__asm
{
cmp ecx, num1
je a
cmp ecx,0x12D
retn

a:
mov eax, 0x100
retn 4
}
}
[/code]

В закомпиленом виде он так выглядит:

[code]
1000100C >/$ 55 PUSH EBP
1000100D |. 8BEC MOV EBP,ESP
1000100F |. 53 PUSH EBX
10001010 |. 56 PUSH ESI
10001011 |. 57 PUSH EDI
10001012 |. 3B0D 30500010 CMP ECX,DWORD PTR [10005030]
10001018 |. 74 07 JE SHORT rm3944.10001021
1000101A |. 81F9 2D010000 CMP ECX,12D
10001020 |. C3 RETN
10001021 |> B8 00010000 MOV EAX,100
10001026 \. C2 0400 RETN 4
10001029 . 5F POP EDI
1000102A . 5E POP ESI
1000102B . 5B POP EBX
1000102C . 5D POP EBP
1000102D . C3 RETN
[/code]

Т.е сохраняются регистры в стек, потом идет мой код, но они не восстанавливаются, точнее на место popов регистров я не попадаю никогда. В чем ошибка?

3. Я первый раз dll пишу. Поэтому не понял мой код малюсенький а dll 28kb (release). Откеда там столько мусора и нафиг он нужен?



Ранг: 200.3 (наставник)
Активность: 0.090
Статус: Участник

Создано: 01 июня 2007 16:14 · Поправил: DrFits
· Личное сообщение · #2

10001020 |. C3 RETN и 10001026 \. C2 0400 RETN 4 - это выход из функции, т.е. надо без этого сделать функцию
10001026 \. C2 0400 RETN 4 - это неверная впринципе запись и программа упадёт, надо ставить просто RET,
Я бы написал так
__asm
{
cmp ecx, num1
je a
cmp ecx,0x12D
JMP END_F

a:
mov eax, 0x100

END_F:
}
А мусор чтоб урезать - надо компилятору инструкции писать. Например
# pragma comment(linker, "/ENTRY:xDllEntry")
Подробнее читай в MSDN

-----
Само плывет в pуки только то, что не тонет.




Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 01 июня 2007 16:27
· Личное сообщение · #3

Ну Retn 4 у меня же не просто так стоит, просто там функция напр func2 со switchем
типа
0055FEEB > \B8 F4010000 MOV EAX,100 ; Cases 4,7,D of switch 0055FED8
0055FEF0 . C2 0400 RETN 4
0055FEF3 > B8 E8030000 MOV EAX,200 ; Cases 5,8,10,12 of switch 0055FED8
0055FEF8 . C2 0400 RETN 4
0055FEFB > B8 DC050000 MOV EAX,300 ; Cases 6,9,11,13 of switch 0055FED8
0055FF00 . C2 0400 RETN 4


func1->func2->моя функция, т.е через retn 4 мы просто выпрыгиваем из моей сразу в func1 минуя func2.

Я так понял в __asm вставке принципиально не должно быть returnoв ? Странно это.



Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 01 июня 2007 16:37
· Личное сообщение · #4

А ну понял, перед retn 4 чтобы не упала надо add esp,4 писать. Можно вручную все POP регистров прописать но что-то странно это все.



Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 03 июня 2007 10:13
· Личное сообщение · #5

Народ, главный вопрос осталься без ответа. Нежоли никто не знает как добавить функции своей dll,ки в основную прогу, ну что бы твоя dll грузилась сразу же без loadlibrarya и чтобы в таблице иморта адреса всех функций своей dllки правились в зависимости от области куда она загрузилась так же как они правятся для всех api и функций dll которые изначально прога использует.
Можно самому черех LoadlibrayA а потом getprocadress и перезаписать где надо но это не эстетично!
Где спецы по таблицам импорта и pe форматам? АУ.



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 03 июня 2007 12:00
· Личное сообщение · #6

sliderZ пишет:
что бы твоя dll грузилась сразу же без loadlibrarya

Берёшь Petools/LordPE и добавляешь. Если сам хочешь - кури формат - там ничего сложного.



Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 04 июня 2007 14:17
· Личное сообщение · #7

Ага, берешь и добавляешь...

1. LordPE - добавлять можно только по одной и нужно полностью писать название функции, не просто func1 а ?func1@@YXXZ...

2. PeTools - вобще не горит опция контекстного меню add imports. Ни на одном файле не горит.

3. Pe_Stud/IIKing - после добавления функций Olly почему-то перестает находить собственные функции EXEшника (Library функции)...

Не везет Ж)
Кто-нибудь по поводу 2. и 3. что-нибудь знает?



Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 04 июня 2007 14:23
· Личное сообщение · #8

После LordPE оказывается тоже Library функции в Olly теряются, что за напасть...



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 04 июня 2007 14:57
· Личное сообщение · #9

На счёт 2 DrFits уже всё сказал.
На счёт 3 - ты что хочешь? Готовый код увидеть? Если поверхностно - берёшь таблицы импорта - и перетаскиваешь их куда-нибудь, где посвободнее. Остальные записи(имена ф-ий, библиотек и т.д.) трогать не надо. Так же не надо менять ничего в самих таблицах. Потом добавляешь ещё 1 запись о своей dll. Формат этой записи - в доках по пе. Есть и на русском. Потом меняешь указатель на таблицу импорта в заголовке.



Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 04 июня 2007 15:37
· Личное сообщение · #10

Я имел ввиду по поводу этих 2 и 3...

2. PeTools - вобще не горит опция контекстного меню add imports. Ни на одном файле не горит.

3. Pe_Stud/IIKing - после добавления функций Olly почему-то перестает находить собственные функции EXEшника (Library функции)...



Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 05 июня 2007 15:32
· Личное сообщение · #11

Опишу последнюю проблему подробнее.

В проге есть функции с именами (видимо с каким-то ключом скомпилина чтобы имена остались), в Olly эти функции видно нажав CTRL+N среди остальных, тип у них Library.

После того как я с помощью любой проги peLord/PeStud/IIDKing добавляю в прогу в таблицу импорта свою dll и соответствующие функции то Olly перестает находить эти Library функции, т.е жмешь CTRL+N а там только Import функции, хотя сами функции конечно остались и их имена находятся в exe hex редактором.
У кого-нибудь есть хоть малейшая догадка или предположение с чем может быть связан этот БАГ? Имена Library функций необходимо сохранить в окне ctrl+n т.к с прогой еще очень долго работать..


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


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