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

 eXeL@B —› Вопросы новичков —› Добавить свой код в DLL
Посл.ответ Сообщение


Ранг: 73.2 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 29 октября 2006 07:15
· Личное сообщение · #1

у меня такая проблема не могу определить смешения в файле для ссылки на этот участок кода, который дописал в конец программы (там где были нули)

такой код:

01093de5...MOV DWORD PTR DS:[109B1E0],2
...................NOP
...................RETN

а ссылка как: CALL 01093de5

вычислял смешения но в олке оказывается что к смешению (A6F60000) такое должно быть, добавляется A6F608F1.

Это скринсейвер matrix3D rapidshare.com/files/1160852/MATRIX3D.7z.html который сделан как DLL



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

Создано: 29 октября 2006 07:48
· Личное сообщение · #2

А ты после того как подправишь нажми правой кнопкой мышки на код и выбери Copy to executable->all modification потом закрой появившееся окно он тебя спросит куда сохранять ты ему укажи файл




Ранг: 73.2 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 29 октября 2006 09:50
· Личное сообщение · #3

Veliant спасибо, работает

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

в windasm10 мой call ваще указывает куда не понятно, за пределы программы.



Ранг: 115.1 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 29 октября 2006 09:54
· Личное сообщение · #4

ShEriF пишет:
в windasm10 мой call ваще указывает куда не понятно, за пределы программы.


не учел релоки




Ранг: 73.2 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 29 октября 2006 10:20
· Личное сообщение · #5

__ пишет:
не учел релоки
если бы знал чего это такое, я с правкой кода программы впервые столкнулся(

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



Ранг: 115.1 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 30 октября 2006 03:52
· Личное сообщение · #6

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


по-разному в разных дизассемлерах не могут
используй IDA



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

Создано: 30 октября 2006 05:50
· Личное сообщение · #7

ShEriF пишет:
01093de5

ShEriF пишет:
но в олке оказывается что к смешению (A6F60000

По жизни ( это windasm показывает) DLL обычно(!) загружается по адресу 1000000.
Олли использует loaddll.exe и грузит по адресу A6...... Метода патча экзе(когда на релоки можно забить) не годится. Вроде hiew умеет релоки добавлять/править, но не уверен. Спроси hellspawn - он его капитально знает.




Ранг: 73.2 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 01 ноября 2006 07:23 · Поправил: ShEriF
· Личное сообщение · #8

Вот так выглядит код в WinDASM

Exported fn(): DisplayDialog - Ord:0001h
:100096D0 8B4C2404______mov ecx, dword ptr [esp+04]
:100096D4 8B542408______mov edx, dword ptr [esp+08]
:100096D8 8B44240C______mov eax, dword ptr [esp+0C]
:100096DC 6A00__________push 00000000
:100096DE 68704D0010____push 10004D70
:100096E3 51____________push ecx
:100096E4 68D3070000____push 000007D3
:100096E9 52____________push edx
:100096EA E8F5A60000____call 10013DE4 ------ это мой CALL
* Reference To: USER32.DialogBoxParamA, Ord:0000h
|
:100096EF FF153C420110__Call dword ptr [1001423C]
:100096F5 B801000000____mov eax, 00000001
:100096FA C3____________ret

а это из Олли

010896E9 52 PUSH EDX
010896EA E8 F5A608F1 CALL F2113DE4 ------ таже сама я процедура
010896EF FF15 3C420901 CALL DWORD PTR DS:[<&USER32.DialogBoxPar>; USER32.DialogBoxParamA

не пойму, почему добавляются 08F1 байты

и скринсавер не хочет грузить эту DLL



Ранг: 115.1 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 01 ноября 2006 11:13
· Личное сообщение · #9

ShEriF пишет:
не пойму, почему добавляются 08F1 байты


из-за релоков, потому что адрес загрузки не обязан равняться ImageBase



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

Создано: 01 ноября 2006 11:30
· Личное сообщение · #10

Довольно странный релок. Судя по командам
100096EF FF153C420110__Call dword ptr [1001423C]
и
010896EF FF15 3C420901 CALL DWORD PTR DS:[<&USER32.DialogBoxPar>; USER32.DialogBoxParamA
поправка составляет 80000h и как там могло 8f1 появиться х.з.

А какие команды там до правки были?.



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

Создано: 01 ноября 2006 12:08
· Личное сообщение · #11

ну поставь JMP, какая разница?

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





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 01 ноября 2006 20:12
· Личное сообщение · #12

Ну так пиши базонезависимый код, типа

call @get_base
@get_base:
pop eax
mov dword ptr [eax+DELTA],2
retn

-----
Yann Tiersen best and do not fuck




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

Создано: 01 ноября 2006 21:42
· Личное сообщение · #13

Да не люди, вы, наверно, не поняли. У него бьётся call, который он вставляет для перехода на свой код. Возможно из-за релоков.
ShEriF
Можно попробовать:
1.убить все релоки, может заработает. Если откажется загружаться, то сделать ребазировку и попробовать снова.
2.вставить на ЕР заглушку, которая будет динамически создавать твой call. Только учти, что dll получает управление не только при старте




Ранг: 73.2 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 02 ноября 2006 01:40
· Личное сообщение · #14

asd пишет:
А какие команды там до правки были?.
было это - mov dword ptr [1001B1E0], eax

в eax нужно поместить byte 02 для того, что бы прог. была зарегистрированна.



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

Создано: 02 ноября 2006 04:05 · Поправил: tundra37
· Личное сообщение · #15

ShEriF
С рапиды мне долго ждать, да и неинтересно пустяками заниматься.
Решение пришло внезапно. Тебе элементарно не хватает 1 байта. Видим опять другое место, где его(1 байта) не хватает
:100096D8 8B44240C______mov eax, dword ptr [esp+0C]
Но если заменить на
xor eax,eax
mov al,2
, то все будет чики-пуки. И опять типичная ошибка. Написал бы оригинальные команды и что хочешь сделать, уже бы давно все сделали. А ты нарисовал, что сделал и ....




Ранг: 73.2 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 02 ноября 2006 08:00 · Поправил: ShEriF
· Личное сообщение · #16

tundra37 спасибо, работает.

Мне просто было не понятно, почему мне не удалось добавить ссылку на свой CALL, оказалось что здесь не все так просто.

Скажите где можно почитать про релоки?, и наверное тему можно считать закрытой, раз проблема решена


 eXeL@B —› Вопросы новичков —› Добавить свой код в DLL
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати