Вопрос про патчинг процесса
От: LazyBob  
Дата: 04.09.07 00:23
Оценка:
Здраствуйте! Помогите пожалуйста мне чайнику..
Суть вопроса:
Лежит у меня на диске файл prog.exe
Мне надо сделать
1. Найти строку с текстом
2. Найти в коде prog.exe место которое использует эту строку
3. Поменять в коде prog.exe адрес этой строки (т.е. надо подменить дефолтную строку на мою)

ввиду того что я пока ламер я делал так
искал прям в файле на диске строку (файл не упакован ничем)
к её оффсету(в хексе) прибавлял Некое_Число(которое я высмотрел в Олли)
искал в прям в файле на диске последовательность байт 68h(push)+адрес строки
потом запускал prog.exe
подгружал в процес ДЛЛ со своей строкой
c помощью WriteProcessMemory подменял адрес строки на свой

НО тут появилась такая версия prog.exe в которой Некое_Число другое..

ВОПРОСЫ:
1. Как вообще это Некое_Число называется?
2. Гдебы про него почитать.
3. Как его найти? И можно ли его найти не запуская prog.exe?
4. Очень ли я криво всё делал? И как делать лучше?

Заранее спасибо!
Re: Вопрос про патчинг процесса
От: Leonidze  
Дата: 04.09.07 13:36
Оценка:
Здравствуйте, LazyBob, Вы писали:

LB>Здраствуйте! Помогите пожалуйста мне чайнику..

LB>Суть вопроса:
LB>Лежит у меня на диске файл prog.exe
LB>Мне надо сделать
LB> 1. Найти строку с текстом
LB> 2. Найти в коде prog.exe место которое использует эту строку
LB> 3. Поменять в коде prog.exe адрес этой строки (т.е. надо подменить дефолтную строку на мою)

LB>ввиду того что я пока ламер я делал так

LB> искал прям в файле на диске строку (файл не упакован ничем)
LB> к её оффсету(в хексе) прибавлял Некое_Число(которое я высмотрел в Олли)
"Олли не в дымке, — сказал он, — дымок берет тебя туда, где находится олли, а когда ты станешь с олли одним целым, то тебе больше не понадобится курить. С этих пор ты сможешь призывать своего олли по желанию и заставлять его делать все, что пожелаешь." (С) Кастанеда
фраза спровоцировала
LB> искал в прям в файле на диске последовательность байт 68h(push)+адрес строки
LB> потом запускал prog.exe
LB> подгружал в процес ДЛЛ со своей строкой
LB> c помощью WriteProcessMemory подменял адрес строки на свой
последовательность шагов наверное правильная, если это работает

LB>НО тут появилась такая версия prog.exe в которой Некое_Число другое..

"уважаемые ученые! который год у меня в подвале происходит подземный стук! пожалуйста, объясните что делать..." (с) не помню
боюсь, приведенное вами описание не содержит главного — смысла. пожалуйста, опишите более подробно, телепаты в отпуске.

LB>ВОПРОСЫ:

LB> 1. Как вообще это Некое_Число называется?
...о-о, как оно называется — знает только великий дух!
LB> 2. Гдебы про него почитать.
смотря к чему относится это Некое_Число. Читать рихтера, харта, описание pe-формата. определиться, что же это за число такое. задать более конкретный вопрос.
LB> 3. Как его найти? И можно ли его найти не запуская prog.exe?
LB> 4. Очень ли я криво всё делал? И как делать лучше?
...без комментариев.

...хотя для того чтобы заменить одну строку на другую часто достаточно прямо в модуле подменить строку.
Re: Вопрос про патчинг процесса
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 04.09.07 14:52
Оценка:
Здравствуйте, LazyBob, Вы писали:

LB>ВОПРОСЫ:

LB> 1. Как вообще это Некое_Число называется?
Это называется ImageBase+SectionVirtualAddress. ImageBase находится по смещению 34h от начала PE заголовка, но для EXE он постоянный.
SectionVirtualAddress — находтся по смещению 0Ch от начала заголовка секции.

В Platform SDK есть заголовочгый файл WINNT.H, в котором определены нужные тебе структуры. В частности IMAGE_OPTIONAL_HEADER (поле ImageBase), IMAGE_SECTION_HEADER (поле VirtualAddress). А также стоит посмотреть IMAGE_FILE_HEADER и IMAGE_DOS_HEADER

LB> 2. Гдебы про него почитать.

Google по формату PE

LB> 3. Как его найти? И можно ли его найти не запуская prog.exe?

Можно

LB> 4. Очень ли я криво всё делал? И как делать лучше?

С пивком пойдет.
Re[2]: Вопрос про патчинг процесса
От: Leonidze  
Дата: 04.09.07 18:44
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, LazyBob, Вы писали:


LB>>ВОПРОСЫ:

LB>> 1. Как вообще это Некое_Число называется?
G>Это называется ImageBase+SectionVirtualAddress. ImageBase находится по смещению 34h от начала PE заголовка, но для EXE он постоянный.
G>SectionVirtualAddress — находтся по смещению 0Ch от начала заголовка секции.
неправда ваша (С) толстой.
не вводите человека в заблуждение. VA!=BASE+SECTION+offset. и никогда не являлось. ибо offset — смещение от начала файла, а не в памяти. ок?

и про постоянный BASE для PE — где вы такое нашли? в микрософте, я думаю сильно бы удивились. примеры? посмотрите проги запакованные аспротектом, подверсия от версия 1.33, номер не помню. сильно удивитесь. и ведь работают...
Re[3]: Вопрос про патчинг процесса
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 05.09.07 03:05
Оценка:
Здравствуйте, Leonidze, Вы писали:

L>не вводите человека в заблуждение. VA!=BASE+SECTION+offset. и никогда не являлось. ибо offset — смещение от начала файла, а не в памяти. ок?

Точно, не сразу врубился в исходное сообщение. Тогда еще надо отнять PointerToRawData.

L>и про постоянный BASE для PE — где вы такое нашли? в микрософте, я думаю сильно бы удивились. примеры? посмотрите проги запакованные аспротектом, подверсия от версия 1.33, номер не помню. сильно удивитесь. и ведь работают...


Я имею ввиду что для конкретного файла ImageBase не будет меняться.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.