Самораспаковывающийся архив - это просто программа для извлечения, но вместо того, чтобы брать данные из файла архива, он берет их из констант, определенных в самой программе. Это действительно что-то очень простое на концептуальном / алгоритмическом уровне.
Если вам не важен размер, у вас может быть что-то простое, как показано ниже (для простоты приведите пример на python, реальный разархиватор, вероятно, будет скомпилированной программой из источника C или C ++):
hello_prog = """print "Hello, World"\n""";
f = file("./hello.py", "w");
f.write(hello_prog);
f.close();
когда вы запускаете его, он создает файл hello.py
, который также является исполняемым файлом Python.
Но при создании самораспаковывающегося архива обычно требуется сжатие внутренних данных, чтобы сделать весь архив как можно меньшим. Вы также хотите, чтобы программа-экстрактор была как можно меньше и как можно более независимой от того, что уже доступно в целевой системе ... и именно здесь действительно начинаются проблемы.