forked from ReScrap/ScrapHacks
- Started implementing new parser for chunked data - Started documenting data formats - Started dissector for network protocol - Added AI-Graph renderer (converts .pth files to python data you can import into Blender) - Added Script to convert savefile to JSON - Added (old) parser for chunked data format - Added basic parser for LFVF data section (Vertex Data) - Added script to analyze and filter read trace generated with frida script - Added various Frida scripts
60 lines
1.3 KiB
Python
60 lines
1.3 KiB
Python
from __future__ import print_function
|
|
import frida
|
|
import os
|
|
import sys
|
|
import psutil
|
|
import binascii
|
|
import sqlite3
|
|
import json
|
|
import time
|
|
import msgpack
|
|
from multiprocessing import JoinableQueue
|
|
import threading
|
|
|
|
|
|
q = JoinableQueue()
|
|
|
|
|
|
def db_worker(q):
|
|
with open("dump.mp", "wb") as of:
|
|
while True:
|
|
args = q.get()
|
|
if args is None:
|
|
q.task_done()
|
|
break
|
|
msgpack.dump(args, of)
|
|
q.task_done()
|
|
|
|
|
|
db_w = threading.Thread(target=db_worker, args=(q,))
|
|
|
|
db_w.start()
|
|
|
|
|
|
def on_message(msg, data):
|
|
filename = msg.get("payload", {}).get("filename", "<UNKNOWN>").replace("\\", "/")
|
|
block_id = msg.get("payload", {}).get("block_id", "<UNKNOWN>")
|
|
print(filename,block_id,data)
|
|
msg["payload"]["data"] = data
|
|
q.put(msg["payload"])
|
|
|
|
|
|
def main():
|
|
pid = frida.spawn(sys.argv[1:])
|
|
session = frida.attach(pid)
|
|
script = session.create_script(open("frida_hook_read_trace.js").read())
|
|
script.on("message", on_message)
|
|
script.load()
|
|
frida.resume(pid)
|
|
proc = psutil.Process(pid)
|
|
proc.wait()
|
|
session.detach()
|
|
q.put(None)
|
|
q.join()
|
|
q.close()
|
|
db_w.join()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|