Это невозможно, если только ваши строки не изменятся в позиции и длине.
Итак, чтобы сделать это возможным: сделайте «размер», в вашем примере, URL, который используется для получения обновлений, довольно большим (представьте: 512 символов, заполненных нулями в конце). Таким образом, у вас есть место для обновления строки.
Почему нельзя использовать строки переменного размера? Ну, я могу объяснить это с помощью небольшого фрагмента ассемблера x86:
PUSH OFFSET test.004024F0
Скажем так; со смещением test.004024F0
- строка переменного размера. Теперь рассмотрим изменение:
Я хочу вставить строку, которая длиннее исходной строки и хранится перед строкой в 004024F0
: это переводит 004024F0
в новое значение, скажем: 004024F5
(новая строка, до этой записи, на 5 символов длиннее оригинала).
Вы думаете, что это просто: найти все 004024F0
и заменить его на 004024F5
? Неправильный . 004024F0
также может быть обычной «инструкцией» (если быть точным: ADD BYTE PTR DS:[EAX+24],AL; LOCK ...
). Если эта инструкция окажется в вашем коде, она будет заменена чем-то неправильным.
Ну, вы можете подумать, а как насчет поиска этой PUSH
инструкции? Неправильно : есть практически неограниченные способы «НАЖАТЬ». Например, MOV EAX, 004024F0; MOV ESP, EAX; ADD ESP, 4
. Существует также вероятность того, что поле рассчитывается: MOV EAX, 00402000; ADD EAX, 4F0; ...
. Так что это делает его «практически неограниченным».
Однако, если вы используете поля статического размера; вам не нужно менять код, ссылающийся на строки. Если вы зарезервировали достаточно места для определенного поля, то вы можете легко написать «более длинную» строку, чем оригинал, потому что размер строки рассчитывается путем нахождения первого «нулевого байта»; заполнить остальную часть поля нулями.
Если вы используете поля статического размера, однако, очень трудно найти «позицию в файле» во время компиляции. Учитывая много времени, потраченного на взлом вашего собственного приложения; Вы можете написать код, который изменяет .exe
и сохраняет новое значение String с указанным смещением. Это смещение файла не известно во время компиляции, и вы можете исправить это смещение файла позже, используя инструмент, подобный OllyDbg . Это позволяет исполняемому файлу залатать себя: -)