Я пытаюсь узнать, как создать шеллкод, и мне нужно ввести целую кучу шестнадцатеричных кодов. Тем не менее, когда я предоставляю моей программе вход с шестнадцатеричными кодами, шестнадцатеричные коды обрабатываются как обычные символы ASCII, а обратная косая черта просто просто лишена.Обработать ввод как шестнадцатеричные значения
Пример:
./a.out "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ x35 \ x85 \ x04 \ x08"
В этом случае шестигранные коды (\ x35 \ x85 \ x04 \ x08) рассматривается как отдельные символы - то есть х = 0x75 и т.д.
путь моя программа обрабатывает ввод похож на следующее:
int authentication(char *pass){
char password_buffer[16];
strcpy(password_buffer, pass);
return 1;
}
int main(int argc, char *argv[]){
if(authentication(argv[1])){
//access
}
return 1;
}
дамп из памяти после зЬгсра():
0xbffff260: 0x41414141 0x41414141 0x41414141 0x41414141
0xbffff270: 0x78353378 0x30783538 0x38307834 0x08048400
Как можно видеть, по адресу 0xbffff270 значение памяти является 0x78353378, что соответствует x35x и, таким образом, три первых букв в вводе гекса-коде. Я бы хотел, чтобы эти четыре байта были 0x08048535.
Как я могу отформатировать свой ввод, чтобы сделать это?
Извините, но Я не совсем понимаю ваш ответ. Что такое «♦»? – user1090614
Это то, что Windows показывает для символа 4 (т. Е. Ввод Alt и 4 на цифровой клавиатуре). Это немного сложнее, если вы на * nix, чтобы набрать^D. – tabstop
в порядке, так что в основном вы говорите, что мне нужно вводить команды клавиатуры с соответствующими шестнадцатеричными значениями? что, если, как и в моем случае, я хотел бы ввести «\ x08», который является «backspace» в ASCII - как это возможно? – user1090614