Автор вопроса: freeloader | Web-сайт:freeloader.folder-pro.net | ICQ: 50804884
Сейчас пытаюсь исследовать программу Zamok, определено, она написана на Delphi, также известно куда она пишет пароли, но про подмену паролей следует забыть по определенным причинам, известно что программа нередко обращается к АПИ функциям, в частности к RegQueryValueEX, вопрос в том, что я немогу определить то место где это вызывается, ставлю бряк в OllyDbg вот так: "bp RegQueryValueEx", а она мне в ответ "Unknown identifier", я что то нетак делаю?
Следующий вопрос, допустим получится определить то место, как это место можно будет пропатчить? чем пользоваться? и каким образом можно будет собрать это все в старый добрый EXE, но уже поменявший немножечко свою структуру?
cresta, помню ты говорил, что таким не занимался, но также помню, что ты как то занимался программой на VC++, так что отзовись HELP :)
Вообще-то я делал так: загрузил в Olly программу, далее давишь правой мышью на левом верхнем окне (где написано CPU - Main Thread) и в менюшке выбираю Search for > Name in all modules. Появится окошко со всеми ф-циями которые вызываются в программе. Найди там RegQueryValueEX , которая вызывается из твоего модуля, выдели эту строку и правой мышью выбери в меню Toggle BreakePoint или нажми F2. И когда из твоего модуля будет вызываться эта ф-ция, программа будет останавливаться.
Чтобы пропатчить место, которое нужно изменить, в том же окне CPU - Main Thread двойной клик на строке, которую хочешь изменить. Выскочит окошко, введёшь туда свою замену и дави Assemble.
Только смотри, длина заменяемого куска должна равняться длине заменяющего, иначе нарушится вся адресация.
Потом опять правой мышью вызывай меню и выбери Copy to executable > All modifications. там тебе предложат переписать существующий модуль и т.д. и т.п. Думаю дальше разберёшься.
2. Либо переписывать экзешник, либо размеры операнда в экзешнике и значения для патча должны иметь одинаковую длину. А что конкретно ты собираешся патчить? По какому адресу и что там находится?
Конкретно мне интересует место, где будет сравниваться пароль введенный мной с паролем который выдернут из ***, я так понимаю что там будет использоваться условный переход, возможно стоит попробовать сделать его безусловным(думаю адресация не будет нарушена).
Зы разобрался в чем была прошлая проблема я не дописал Ansi, писал RegQueryValueEx, а надо бы: RegQueryValueExA
теперь мне надо определить когда он будет сравниваться, есть в голове мысля, поставить БрейкПоинт на GetWindowTextA, но блин вся проблема, то что в той проге вызовов этой функции дохрена и больше и у меня не хватило терпения дождаться конца, есть более простой способ? (хотя с другой стороны куда уже проще...)
Всем спасибо за ответы
Ну там может быть ещё и GetDlgItemText...
А вообще, ставь сначала брейкпоинты на вызовы ф-ции, которые из твоего модуля идут. А то GetWindowText может вызываться не только из твоего кода, но и из модулей, которые программа подгрузила (ну там разные dll, к которым программа обращается при своей работе)