File size: 1,868 Bytes
04e6f1a
d717efb
 
 
80dd465
5ed5cfe
04e6f1a
d717efb
 
ddf7ec4
 
d717efb
 
5ed5cfe
8750a82
5fa614e
1048349
d717efb
 
 
a41bb55
d717efb
 
 
 
 
 
 
 
a41bb55
d717efb
 
 
 
 
 
 
a41bb55
 
d717efb
 
 
5ed5cfe
 
5ae5a27
d717efb
 
 
 
 
 
 
 
 
 
 
 
80dd465
 
 
d717efb
6de58c1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import gradio as gr
import shutil
import subprocess
import tempfile
import os
import sys

def new_binary(file):

    with tempfile.TemporaryDirectory() as TEMP_DIR, tempfile.TemporaryDirectory() as OUTPUT_DIR:
        shutil.copy2(file.name, TEMP_DIR)

        # python3 generate.py --ghidra PATH_TO_GHIDRA_ANALYZEHEADLESS -t NUM_THREADS -n [NUM_FILES|None] -b BINARIES_DIR -o OUTPUT_DIR
        print("Running DIRTY-Ghidra...", file=sys.stderr)
        subprocess.run(f"python /DIRTY/dataset-gen-ghidra/generate.py --verbose --ghidra /ghidra/support/analyzeHeadless -t 1 -b {TEMP_DIR} -o {OUTPUT_DIR}", shell=True)
        subprocess.run(f"ls -lR {TEMP_DIR}", shell=True)
        subprocess.run(f"ls -lR {OUTPUT_DIR}", shell=True)

with gr.Blocks() as demo:

    #all_dis_state = gr.State()

    gr.Markdown(
        """
    # DIRTY-Ghidra Testing
    First, upload a binary.
    """
    )

    file_widget = gr.File(label="Executable file")

    def file_change_fn(file, progress=gr.Progress()):


        if file is None:
            return {
                    #col: gr.update(visible=False),
                    #all_dis_state: None
                    }
        else:

            #fun_data = {42: 2, 43: 3}
            print("hi")
            new_binary(file)
            progress(0, desc="Decompiling binary...")
            #fun_data = get_all_dis(file.name)

            #addrs = ["%#x" % addr for addr in fun_data.keys()]

            return {
                    #col: gr.update(visible=True),
                    #fun_dropdown: gr.Dropdown.update(choices=addrs, value=addrs[0]),
                    #all_dis_state: fun_data
                    }
        
    file_widget.change(file_change_fn, file_widget)

# spaces only shows stderr..
os.dup2(sys.stdout.fileno(), sys.stderr.fileno())

demo.queue()
demo.launch(server_name="0.0.0.0", server_port=7860)