Я использую программу (upx.exe), которая сжимает и извлекает упакованные исполняемые файлы. Когда я распаковываю исполняемый файл, единственным вариантом является запись файла. Я не хочу, чтобы извлеченный код касался жесткого диска.
Итак, я подумал о написании оболочки python, которая запускает исполняемый файл и читает декомпрессированный код из именованного канала.
Я хотелВыход программы Python для именованной трубы
- создать именованный канал в питоне,
- пусть внешняя программа использовать эту трубу в качестве выходного файла и
- читать содержимое, которое было написано в эту трубу в строку ,
Я попытался следующие:
import win32pipe, win32file
import win32file
p = win32pipe.CreateNamedPipe(r'\\.\pipe\upx',
win32pipe.PIPE_ACCESS_DUPLEX,
win32pipe.PIPE_TYPE_MESSAGE | win32pipe.PIPE_WAIT,
1, 65536, 65536,300,None)
os.system("upx -d -o\\\\.\\pipe\\upx nbtscan-1.0.35.exe")
win32pipe.ConnectNamedPipe(p, None)
fileHandle = win32file.CreateFile(r'\\.\pipe\upx',
win32file.GENERIC_READ | win32file.GENERIC_WRITE,
0, None,
win32file.OPEN_EXISTING,
0, None)
data = win32file.ReadFile(fileHandle, 4096)
print data
Это то, что происходит:
У меня нет опыта работы с именованными каналами и чувствовать себя очень отчаянный прямо сейчас. Возможно, у вас есть идея или учебник, чтобы привести мне пример. (Ссылка MSDN мне очень не помогла)
Мой код основан на this code, но когда я использую функцию «ConnectNamedPipe» перед «системным» вызовом, программа просто зависает и ждет или какое-то действие на этом канале.
Пожалуйста, помогите.