Carregar ficheiros para "/"
This commit is contained in:
106
main.py
Normal file
106
main.py
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
import tkinter as tk
|
||||||
|
from tkinter import filedialog, ttk, scrolledtext, messagebox
|
||||||
|
import re
|
||||||
|
import json
|
||||||
|
|
||||||
|
class PatternFinderGUI:
|
||||||
|
def __init__(self, root):
|
||||||
|
self.root = root
|
||||||
|
self.root.title("PSA EDC17 PIN Finder")
|
||||||
|
self.root.geometry("680x300")
|
||||||
|
|
||||||
|
# File Selection Frame
|
||||||
|
file_frame = ttk.LabelFrame(root, text="File Selection", padding=10)
|
||||||
|
file_frame.pack(fill=tk.X, padx=5, pady=5)
|
||||||
|
|
||||||
|
self.file_path = tk.StringVar()
|
||||||
|
ttk.Entry(file_frame, textvariable=self.file_path, width=60).pack(side=tk.LEFT, padx=5)
|
||||||
|
ttk.Button(file_frame, text="Browse", command=self.browse_file).pack(side=tk.LEFT, padx=5)
|
||||||
|
ttk.Button(file_frame, text="About", command=self.show_about).pack(side=tk.RIGHT, padx=5)
|
||||||
|
ttk.Button(file_frame, text="Search PIN", command=self.search_patterns).pack(side=tk.RIGHT, padx=5)
|
||||||
|
|
||||||
|
|
||||||
|
# Results Frame
|
||||||
|
results_frame = ttk.LabelFrame(root, text="Results", padding=10)
|
||||||
|
results_frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
|
||||||
|
|
||||||
|
self.results_text = scrolledtext.ScrolledText(results_frame, width=80, height=10)
|
||||||
|
self.results_text.pack(fill=tk.BOTH, expand=True)
|
||||||
|
|
||||||
|
def find_repeated_patterns(self, filepath):
|
||||||
|
try:
|
||||||
|
target_content = ""
|
||||||
|
bytes_per_line = 16
|
||||||
|
|
||||||
|
# Define search ranges
|
||||||
|
ranges = [
|
||||||
|
(0x50, 0x150), # First range
|
||||||
|
(0x10050, 0x10150) # Second range (10050-10150)
|
||||||
|
]
|
||||||
|
|
||||||
|
with open(filepath, 'rb') as file:
|
||||||
|
# Search in both ranges
|
||||||
|
for start_offset, end_offset in ranges:
|
||||||
|
file.seek(start_offset)
|
||||||
|
data = file.read(end_offset - start_offset)
|
||||||
|
|
||||||
|
for i in range(0, len(data), bytes_per_line):
|
||||||
|
line = data[i:i + bytes_per_line]
|
||||||
|
ascii_line = ''.join(chr(b) if 32 <= b <= 126 else '.' for b in line)
|
||||||
|
target_content += ascii_line.upper()
|
||||||
|
|
||||||
|
pattern = r'[A-Z0-9]{4}'
|
||||||
|
matches = re.findall(pattern, target_content)
|
||||||
|
|
||||||
|
results = {}
|
||||||
|
for match in matches:
|
||||||
|
count = target_content.count(match)
|
||||||
|
if count == 2:
|
||||||
|
results[match] = count
|
||||||
|
|
||||||
|
return results
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error: {e}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
def browse_file(self):
|
||||||
|
filepath = filedialog.askopenfilename(
|
||||||
|
title="Select file",
|
||||||
|
filetypes=[("Binary files", "*.bin"), ("All files", "*.*")]
|
||||||
|
)
|
||||||
|
if filepath:
|
||||||
|
self.file_path.set(filepath)
|
||||||
|
|
||||||
|
def search_patterns(self):
|
||||||
|
filepath = self.file_path.get()
|
||||||
|
if not filepath:
|
||||||
|
self.results_text.insert(tk.END, "Please select a file first\n")
|
||||||
|
return
|
||||||
|
|
||||||
|
results = self.find_repeated_patterns(filepath)
|
||||||
|
self.results_text.delete(1.0, tk.END)
|
||||||
|
|
||||||
|
if results:
|
||||||
|
self.results_text.insert(tk.END, "Found PIN that appear exactly twice:\n\n")
|
||||||
|
for pattern, count in results.items():
|
||||||
|
self.results_text.insert(tk.END, f"Pattern: {pattern}\n")
|
||||||
|
else:
|
||||||
|
self.results_text.insert(tk.END, "No matching PIN found or error occurred\n")
|
||||||
|
|
||||||
|
def show_about(self):
|
||||||
|
messagebox.showinfo(
|
||||||
|
"Sobre",
|
||||||
|
"EDC17C10 PIN Decoder\n"
|
||||||
|
"Versão 1.0\n\n"
|
||||||
|
"Programa para decodificar PINs de EDC17C10 E2PROM\n"
|
||||||
|
"Created by: @Godax"
|
||||||
|
)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
root = tk.Tk()
|
||||||
|
app = PatternFinderGUI(root)
|
||||||
|
root.mainloop()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
28
version_info.txt
Normal file
28
version_info.txt
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
VSVersionInfo(
|
||||||
|
ffi=FixedFileInfo(
|
||||||
|
filevers=(1, 0, 0, 0),
|
||||||
|
prodvers=(1, 0, 0, 0),
|
||||||
|
mask=0x3f,
|
||||||
|
flags=0x0,
|
||||||
|
OS=0x40004,
|
||||||
|
fileType=0x1,
|
||||||
|
subtype=0x0,
|
||||||
|
date=(0, 0)
|
||||||
|
),
|
||||||
|
kids=[
|
||||||
|
StringFileInfo(
|
||||||
|
[
|
||||||
|
StringTable(
|
||||||
|
u'040904B0',
|
||||||
|
[StringStruct(u'CompanyName', u'Godax'),
|
||||||
|
StringStruct(u'FileDescription', u'PSA EDC17C10 PIN Decoder'),
|
||||||
|
StringStruct(u'FileVersion', u'1.0.0'),
|
||||||
|
StringStruct(u'InternalName', u'pin_decoder'),
|
||||||
|
StringStruct(u'LegalCopyright', u'Copyright (c) 2025'),
|
||||||
|
StringStruct(u'OriginalFilename', u'PinDeocder_EDC17C10.exe'),
|
||||||
|
StringStruct(u'ProductName', u'PIN Decoder'),
|
||||||
|
StringStruct(u'ProductVersion', u'1.0.0')])
|
||||||
|
]),
|
||||||
|
VarFileInfo([VarStruct(u'Translation', [1033, 1200])])
|
||||||
|
]
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user