eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме:
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

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

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

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

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



{ Атач доступен только для участников форума } - 1.gif

Ранг: 617.3 (!)
Статус: Участник

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

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

Ранг: 245.5 (наставник)
Статус: Участник

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

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

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

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

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

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

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

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

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

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

Ранг: 617.3 (!)
Статус: Участник

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

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

релоки.

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

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

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

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

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


Ранг: 334.1 (мудрец)
Статус: Участник
born to be evil

Создано: 20 июля 2013 16:02 · Поправил: ajax New!
Цитата · Личное сообщение · #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 (!)
Статус: Участник

Создано: 20 июля 2013 16:03 · Поправил: Vovan666 New!
Цитата · Личное сообщение · #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 (гость)
Статус: Участник

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

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

Ранг: 617.3 (!)
Статус: Участник

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

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




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

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

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


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

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

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

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

Ранг: 617.3 (!)
Статус: Участник

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

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

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

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

Спасибо за помошь, вроде разобрался.
Тему пока не закрывайте, может появятся сопутствующие вопросы чуть позже
 eXeL@B —› Вопросы новичков —› Ощибка при вызове MessageBoxA в модифицированном exe

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS