Сейчас на форуме: asfa, _MBK_, Adler, bartolomeo (+8 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Расчет статического адреса строки |
Посл.ответ | Сообщение |
|
Создано: 28 августа 2012 16:34 · Личное сообщение · #1 Привет всем ![]() Я за последнее время себя чуток поднатаскал уже на реверс-инженеринг, поэтому осмелился еще раз выложить вопрос данный. Есть строка в программе, которая задается через WM_SETTEXT. Все попытки придти к источнику строки заканчивались на секции стека. При изменении данных стека изменялась и строка, что подтвердило правильность моих мыслей. Но как строка оказывается в стеке? Чтобы я мог пропатчить ее и внести эти изменения в ехе. Также известно, что он использует VirtualAlloc для выделения себе огромного (скажем так) размера памяти. Вполне вероятно что там и находятся строки, но откуда он их берет? Теперь приведу фрагменты кода: 1) Процедура, которая транслирует сообщения и изменяет текст формы: Code:
В lparam хранятся строки которые задаются элементу. В принципе на этом участке кода сейчас все и сосредоточено. ![]() |
|
Создано: 28 августа 2012 16:44 · Личное сообщение · #2 |
|
Создано: 28 августа 2012 16:49 · Личное сообщение · #3 |
|
Создано: 28 августа 2012 16:53 · Личное сообщение · #4 |
|
Создано: 28 августа 2012 16:56 · Личное сообщение · #5 |
|
Создано: 28 августа 2012 17:36 · Личное сообщение · #6 |
|
Создано: 28 августа 2012 18:11 · Личное сообщение · #7 |
|
Создано: 28 августа 2012 18:38 · Личное сообщение · #8 |
|
Создано: 28 августа 2012 20:33 · Личное сообщение · #9 ghaiklor Строка берется из какого-то объекта, который передается на стеке. Или из массива, так не угадаешь. Потом вызывается DefWindowProc, то, что она вернула, пишется обратно в объект. Больше тут ничего не происходит. Иногда тут проходит WM_SETTEXT, иногда не он, но логики тут никакой, связанной со строкой, нет. Ищи, где делается SendMessage с WM_SETTEXT. И да, гадать по куску кода, который ни о чем, бесполезно. Выкладывай прожку. ![]() |
|
Создано: 28 августа 2012 20:35 · Личное сообщение · #10 |
|
Создано: 28 августа 2012 20:46 · Личное сообщение · #11 |
|
Создано: 28 августа 2012 21:31 · Поправил: tomac · Личное сообщение · #12 |
|
Создано: 29 августа 2012 00:48 · Личное сообщение · #13 |
|
Создано: 29 августа 2012 14:17 · Личное сообщение · #14 Функция DefWindowProc вызывается оконной процедурой по умолчанию, чтобы обеспечить обработку по умолчанию любого сообщения окна, которые приложение не обрабатывает. Эта функция гарантирует то, что обрабатывается каждое сообщение. Функция DefWindowProc вызывается с теми же самыми параметрами, принятыми оконной процедурой. Это что же означает. Что названия окон задается не программой, а системой? Потому что в ресурсах не было названия программы. Попросту говоря, мне нужно изменить Title приложения. Чтобы в панели задач и на главной форме отображалось переведенное название. ![]() |
|
Создано: 29 августа 2012 17:01 · Поправил: tomac · Личное сообщение · #15 ghaiklor Функция DefWindowProc поменяет название заголовка с того, что было указано при CreateWindow или в ресурсах при создании DialogBox из ресурсов. При получении WM_SETTEXT. То, что есть в этом коде, не интересно совершенно. Здесь никакая строка ни откуда не грузится. Она приходит в качестве одного из параметров в функцию. Параметры для функции приходят в оконную процедуру из сообщения при DispatchMessage. Сообщение приходит из GetMessage. В GetMessage оно появляется после того, как кто-то туда его отправит по SendMessage или PostMessage. Тебе надо смотреть, откуда посылается этот самый WM_SETTEXT. Кроме того, посмотри вызов CreateWindow, там один из параметров - заголовок окна. ![]() |
|
Создано: 29 августа 2012 17:15 · Личное сообщение · #16 |
|
Создано: 29 августа 2012 17:58 · Поправил: ghaiklor · Личное сообщение · #17 Итак, вот такая ситуация. Две строки (одна в панели задач), а другая в главной форме. Первое сообщение: Code:
И вот второе: Code:
Из этого я смотрю и понимаю, что все-таки он его где-то меняет. Сначала идет этот переименованный вроде, а потом чудом уже другой. UPD: И как выставить в ольке, чтобы он бряки запоминал после перезапуска? А то делал, а теперь не помню. ![]() |
|
Создано: 29 августа 2012 23:09 · Поправил: tomac · Личное сообщение · #18 ghaiklor Слушай, это ж делфи. В ресурсах в RCData переименовал всё? Ты пиши, что на что должно поменяться-то. Окно нельзя изменить вызовом CreateWindow[Ex]. Только создать новое. Тебе какую строку надо изменить? "Gps object manager"? Тогда иди по адресу 006EE448, если это, конечно, адрес вызова апи. И смотри, откуда такое вызвали. В делфи это будет что-то в стиле TForm.Create(). Могут вызывать SetWindowText, это чтобы установить новый заголовок, она посылает WM_SETTEXT. Про бряки не знаю, олю не использую. UPD: давай переходить в ЛС, а то что-то ветка форума ICQ напоминает. Вряд ли это будет кому-то полезно в будущем. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Расчет статического адреса строки |