Иногда бывает надо изменить экзешник (*.exe) без компиляции, так как исходников нет и собственно нечего компилировать.
И тут посещает мысля, а может декомпилировать файл, потом сделать правки и обратно скомпилировать. Поиска в инете информацию, вы можете найти что декомпиляцией занимается программа IDA. Вроде все просто, но проблема состоит в том что после декомпиляции вы никогда не получите тот код что написал разработчик, а получите код интерпретированный в ассемблер, и обратная компиляция вызывает много проблем.
Если надо подправить код чучуть, например, в коде есть переменная со значением «127.0.0.1»
и надо исправить на «127.5.5.1», тоесть вы не добавляете и не удаляете символы а только заменяете на другие, то это легко можно сделать без декомпиляции.
Для начала вспомним что процесс компиляции — это преобразование кода программиста написанного в кокой-нибудь среде программирования, например Delphi в исполняемый файл понятный системе, и по сути это бинарный файл, а бинарный файл надо править в соответствующем редакторе чтоб не нарушить его структуру.
Для этого надо открыть бинарный файл в шестнадцатеричном редакторе, например «Hex Editor Neo», затем найти там нужные символы и заменить их на свои, сохранить и все.
Для наглядности я написал программу на Delphi, внутри которой есть следующий кусок кода
procedure TForm1.Button1Click(Sender: TObject); var s,s1: string; begin s := Edit1.Text; s1 := '127.0.0.1'; // дополнительная козявочка Edit2.Text := s+' '+s1; end;
Теперь откроем исполняемы файл в IDA и посмотрим что он нам покажет
Вкладка Hex View в IDA
Тоесть то значение что заложено в программе видно.
На этой же вкладке можно изменить символы, для этого надо нажать F2 и делать правки, а после опять нажать F2 и применить изменения, но они не применятся в исполняемому файлу.
Теперь откроем исполняемый файл в редакторе «Hex Editor Neo»
Обратите внимание что номер строки в IDA не совпадает с номером строки в Hex Editor Neo, но это одно и тоже место, по этому тут надо заново искать место где делать изменения. Изменения можно делат как в шестнадцатеричном поле так и текстовом.
Сделал изменения и сохранил. Все, файл готов и работает нормально после изменений.