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

 eXeL@B —› Вопросы новичков —› Редактирование DLL игрушки
Посл.ответ Сообщение

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

Создано: 16 апреля 2010 21:52
· Личное сообщение · #1

Делаю мод для одной игрушки. Взялся за редактирование клиентской DLL, но т.к. в этом полный профан, столкнулся с проблемами. Если буксую в очевидном, сразу не пинайте

Code:
  1. .text:100CC601                 push    0               ; int
  2. .text:100CC603                 push   102A9748h ; "SmartgunSet"
  3. .text:100CC608                 lea     ecx, [ebp+var_170]
  4. .text:100CC60E                 call    sub_1020F210 ; Проверяем наличие "SmartgunSet"
  5. .text:100CC613                 test    eax, eax
  6. .text:100CC615                 jl      short loc_100CC62C ; Если нету, проверяем наличие других
  7. .text:100CC617                 push    3 ; id = 3
  8. .text:100CC619                 mov     ecx, [ebp+var_1FC]
  9. .text:100CC61F                 add     ecx, 2600h
  10. .text:100CC625                 call    sub_10107DF0 ; Наделяем игрока свойствами "SmartgunSet"
  11. .text:100CC62A                 jmp     short loc_100CC695 ; Н
  12. .text:100CC62C ; ---------------------------------------------------------------------------
  13. .text:100CC62C
  14. .text:100CC62C loc_100CC62C:                           ; CODE XREF: sub_100CB4F0+1125j
  15. .text:100CC62C                 push    0               ; int
  16. .text:100CC62E                 push    102A973Ch ; "IRVision" ; Проверяем наличие "IRVision"
  17. .text:100CC633                 lea     ecx, [ebp+var_170] ; Далее тоже самое
  18. .text:100CC639                 call    sub_1020F210
  19. .text:100CC63E                 test    eax, eax
  20. .text:100CC640                 jl      short loc_100CC657 ; И так еще парочка проверок
  21. .text:100CC642                 push    2
  22. .text:100CC644                 mov     ecx, [ebp+var_1FC]
  23. .text:100CC64A                 add     ecx, 2600h
  24. .text:100CC650                 call    sub_10107DF0
  25. .text:100CC655                 jmp     short loc_100CC695


Вопрос таков. Хотелось бы впихнуть еще одну такую проверочку для некого "NightVision" (строчка присутствует)
Возможно ли это?

Я вынес проверку на "SmartgunSet" в конец дллки (секции всмысле, как я понял. там 800h байтов равных 0). Скопировал код, добавил проверку на "NightVision", соединил джампами. Но новая строчка в коде..

push 102A9730h ; "NightVision"

когда начинаю отладку то этот всегда оффсет остается постоянным, а остальные оффсеты строчек меняются в зависимости от начального адреса (как я понял так и должно быть). Поэтому я загружаю далеко не "NightVision"...



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 16 апреля 2010 23:49 · Поправил: NikolayD
· Личное сообщение · #2

codevx пишет:
Возможно ли это?

если это нечитал --> cracklab.ru <--, то почитай.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 17 апреля 2010 09:23
· Личное сообщение · #3

codevx
Это релокация. Создайте фиксап.



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

Создано: 17 апреля 2010 13:39
· Личное сообщение · #4

Где можно почитать про создание фиксапа и релокацию? Гугл не рулит...

И еще такой вопрос. Если я на месте какого-нить push 102A973Ch я запишу например джамп, то релокация тоже подействует? Тогда это будет далеко не джамп ?



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 17 апреля 2010 14:23
· Личное сообщение · #5

codevx
Джамп останется, только ссылка изменится, так как образы выравниваются в памяти, то при пересчёте первый опкод не изменится. Вобщем да, фиксапы могут менять код. Но применяется это только для данных, ибо дельта заранее не может быть вычислена.




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 18 апреля 2010 02:08
· Личное сообщение · #6

codevx
В ассемблерном коде, есть такое понятие, как абсолютные и относительные адреса
комманда JMP SHORT - относительный, так как адрес на который будет произведён прыжок считается по количеству байт, начиная со второго байта комманды.
Но комманда PUSH 101000 будет являться асолютной, и при изменении адреса образа, эта комманда будет указывать в "левый" участок памяти. Для этого были сделаны "релокации". Релокации представляют собой таблицу RVA смещений, по которым находятся базозависимые константы(адреса), которые надо править в случае необходимости. Этим занимается системный загрузчик.
Следует помнить, что даже если удалить базозависиную ассемблерную комманду(например, вписать комманду NOP), и если образ будет пересчитан на другой, на месте этой ассемблетрой комманды будет произведёт пересчёт и комманда NOP будет искажена, что может вызвать ошибку. Поэтому не стоит забывать про это при работе с библиотеками

-----
Research For Food



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


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