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

 eXeL@B —› Вопросы новичков —› Ощибка при вызове MessageBoxA в модифицированном exe
Посл.ответ Сообщение

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

Создано: 20 июля 2013 13:44 · Поправил: Kadet89
· Личное сообщение · #1

Модифицирую exe по инструкции с Xaker. Весь добавленный мною код на прикрепленном скриншоте. Программа запускается, но когда доходит до строки 00AAD6FF CALL <&USER32.MessageBoxA> вылетает с ошибкой, подскажите, если кто этим занимался, где моя ошибка.
Для упрощения я точку входа заменил на адрес 00AAD6F1 и затем делаю jmp на старую точку входа, но ошибка вылезает даже если этот момент выполнять по инструкции.
Программа http://rghost.ru/47546795 , там 2 экзешника, тот что orig - без модификации.



0c6d_20.07.2013_EXELAB.rU.tgz - 1.gif



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 20 июля 2013 13:57
· Личное сообщение · #2

CALL 00AAE6B4->CALL DWORD PTR DS:[AAE6B4]



Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 20 июля 2013 14:00 · Поправил: TryAga1n
· Личное сообщение · #3

Вместо
00AAD6FF E8 B00F0000 call <&USER32.MessageBoxA>

Надо
00AAD6FF FF15 B4E6AA00 call dword ptr ds:[<&USER32.MessageBoxA>; USER32.MessageBoxA

Вован первый)



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

Создано: 20 июля 2013 14:23
· Личное сообщение · #4

Ок, спасибо, щас попробую, тему пока не закрывайте



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

Создано: 20 июля 2013 15:03 · Поправил: Kadet89
· Личное сообщение · #5

Не получается, делаю как вы сказали и не помогает.
http://rghost.ru/47546795
orig.exe запускается (только его надо переименовать чтоб без orig было) и запускается патченный экзешник если call заменить нопами. Может я чтото упустил?



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 20 июля 2013 15:09 · Поправил: Vovan666
· Личное сообщение · #6

Kadet89 пишет:
Может я чтото упустил?

релоки.

На 7 без правки релоков такой код работать не будет.

Вот примерно как должно быть
http://rghost.ru/47547121



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

Создано: 20 июля 2013 15:40 · Поправил: Kadet89
· Личное сообщение · #7

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




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 20 июля 2013 16:02 · Поправил: ajax
· Личное сообщение · #8

Kadet89
можно в хидере отключить "is image can be relocated" или типа того, и прибить секцию релоков. будет проще. но, если Vovan666 если объяснит - больше знаний

added: есть еще метод: текущий оффсет + дельту до мессбокса. потом типа call [eax], релоки тогда пофик

added2: Vovan666: как вариант - call $+5; pop eax; add eax,delta; call [eax] - как-то так, тоже по дельте инкрементим, тогда PEB не трогаем. ASLR - ничего особо не несет, кроме как показатель правильности кода, imho

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 20 июля 2013 16:03 · Поправил: Vovan666
· Личное сообщение · #9

Что за инструкция? какого года? инструкция небось была написана еще до 7 с ее долбаным ASLR.

Code:
  1.          PUSHAD ; \сохраняем регистры
  2.          PUSHFD ; /
  3.          MOV ESI,DWORD PTR FS:[30h] ; получаем адрес TEB (Thread Environment Block )
  4.          MOV ESI,DWORD PTR DS:[ESI+8h] ; получаем ImageBase текущего процесса
  5.          PUSH 0h ; uType
  6.          LEA EAX,DWORD PTR DS:[ESI+$$36973Ch] ; считаем адрес строки lpCaption относительно ImageBase
  7.          PUSH EAX ;lpCaption
  8.          LEA EAX,DWORD PTR DS:[ESI+$$369730h] ; считаем адрес строки lpText относительно ImageBase
  9.          PUSH EAX ;lpText
  10.          PUSH 0h ;hWnd
  11.          LEA EAX,DWORD PTR DS:[ESI+$$36A694h] ; считаем адрес MessageBoxA относительно ImageBase
  12.          CALL DWORD PTR DS:[EAX] вызываем MassageBoxA
  13.          POPFD ; \восстанавливаем регистры
  14.          POPAD ; /
  15.          JMP $$3D9C36h ; идем взад




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

Создано: 20 июля 2013 16:36
· Личное сообщение · #10

У меня есть несколько вопросов. Первая страка фак с восклицательными знаками, а вторая восклицательные знаки? если так, то вопрос такой, как вы посчитали 36973Ch и 369730h ? Они никак не соотносятся с реальными адресами, даже расстояния между ними другое.
И второй вопрос - в точке входа программы код без изменения, как происходит вызов кода месенжбокса? Если этот способ проще изменения точки входа, яб хотел его знать.



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 20 июля 2013 16:49
· Личное сообщение · #11

Kadet89 пишет:
Первая страка фак с восклицательными знаками, а вторая восклицательные знаки?




Kadet89 пишет:
как вы посчитали 36973Ch и 369730h ?

VA-адрес строки минус ImageBase

Kadet89 пишет:
И второй вопрос - в точке входа программы код без изменения, как происходит вызов кода месенжбокса?


OEP:
call xxxxxxxx
jmp xxxxxxxx - отсюда, а оригинальный jmp в конце "патча"



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

Создано: 20 июля 2013 17:01 · Поправил: Kadet89
· Личное сообщение · #12

Гдето я ошибась, у меня выходит 01989730 - 00400000 = 01589730, а должно выйти 0076973C,




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 20 июля 2013 17:09
· Личное сообщение · #13

А то что у тебя софтина в ольке грузится по базе 01620000, ни на что не наводит?



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

Создано: 20 июля 2013 17:36
· Личное сообщение · #14

Спасибо за помошь, вроде разобрался.
Тему пока не закрывайте, может появятся сопутствующие вопросы чуть позже


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


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