У меня есть небольшой пример программы на С:
#include <stdio.h>
#define CIAO 0x15151515;
#define PROVA 0x14141414;
int main(){
unsigned char *ptr = (unsigned char *)CIAO;
long int nbytes = PROVA;
long int i;
int cpt = 0;
char key[] = { 'a','b','a','b','a','b','a','b','\0' };
int keyLength = 8;
for (i = 0; i < nbytes; i++){
ptr[i] = ptr[i] ^ key[cpt];
cpt = cpt + 1;
if (cpt == keyLength)
cpt = 0;
}
return 0;
}
Моя цель - скомпилировать его, а затем с помощью HexEditor найти конкретные значения 0x15151515
и 0x14141414
и заменить их другим значением.
Я пробовал с другой программой меньшего размера, мне удалось сделать это действительно легко. Используя это вместо этого у меня возникли некоторые проблемы. 0x15151515
написано как 0x16151515
, и я искал 0x14141414
, но мне не удалось найти ничего подобного.
Вот соответствующий шестнадцатеричный вид exe: https://pastebin.com/dLi4tfU5
Есть ли у вас какие-либо понятия о том, почему иногда написанное значение меняется?
Есть ли способ избежать этого и быть уверенным, что всякий раз, когда я пишу "CIAO", в exe, который рассматривается как hex, я всегда найду 0x15151515
?
p.s. Я знаю, что это не то, что вы обычно должны делать, и, конечно, я знаю, что редактирование exe может привести к неожиданному поведению программы. Я просто делаю это для удовольствия