Qiling: Keine Schreibberechtigung nach der EmulationPython

Python-Programme
Anonymous
 Qiling: Keine Schreibberechtigung nach der Emulation

Post by Anonymous »

Ich erstelle mit PyQT ein Tool mit GUI, sodass die Qiling-Emulation in einem QThread-Objekt ausgeführt wird. Ich verwende RootFS Sandbox Env ​​mit dem Qiling. Jetzt kann ich eine Datei erstellen, bevor die Emulation beginnt, aber sobald die Emulation gestartet ist, kann ich auch nach der Emulation nicht mehr an einen Speicherort schreiben. Dieses Verhalten tritt nicht auf, wenn ich das PE direkt ohne die PyQt-GUI emuliere.
Ich weiß nicht, was dieses Problem verursacht. Kann mir jemand sagen, ob es eine Lösung dafür gibt oder nicht? Oder was könnte ein besserer Ansatz für die Implementierung sein?
Der Fehler-Traceback

Code: Select all

Traceback (most recent call last):
File "f:\Studies\University\FYP\DARTS-Final\Qiling\emulator.py", line 24, in save_json
with open(json_out, "w") as f:
PermissionError: [Errno 13] Permission denied: 'F:/Studies/University/FYP/DARTS-Final/Qiling/jsons'

[!] Error writing JSON output: [Errno 13] Permission denied: 'F:/Studies/University/FYP/DARTS-Final/Qiling/jsons'
Hier ist reproduzierbarer Code

Code: Select all

import sys, json
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QTextEdit
from PyQt5.QtCore import QThread, pyqtSignal

from qiling import Qiling

class QilingWorker(QThread):
log_signal = pyqtSignal(str)

def __init__(self, target_path, rootfs):
super().__init__()
self.target_path = target_path
self.rootfs = rootfs

def run(self):
try:
self.log_signal.emit("Starting Qiling emulation...\n")

# Example Qiling run (safe placeholder)
ql = Qiling([self.target_path], self.rootfs)

# Execute until finish
ql.run()

self.log_signal.emit("\nEmulation finished.")
except Exception as e:
self.log_signal.emit(f"[Error] {str(e)}")
with open('dummy.json', 'w') as f:
json.dump({"Test":"Test"}, f)

class MainWindow(QWidget):
def __init__(self):
super().__init__()

self.setWindowTitle("Qiling + PyQt Example")
self.resize(500, 400)

self.log_box = QTextEdit()
self.log_box.setReadOnly(True)

self.btn_start = QPushButton("Run Emulation")
self.btn_start.clicked.connect(self.start_emulation)

layout = QVBoxLayout()
layout.addWidget(self.log_box)
layout.addWidget(self.btn_start)
self.setLayout(layout)

self.worker = None

def start_emulation(self):
# Adjust target and rootfs based on your environment
target = "./test_bin"     # sample binary
rootfs = "./rootfs"       # Qiling rootfs

self.worker = QilingWorker(target, rootfs)
self.worker.log_signal.connect(self.append_log)
self.worker.start()

self.log_box.append("Thread started...\n")

def append_log(self, text):
self.log_box.append(text)

if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post