Çalışıyor [Python] Target Damage Source

5.00 yıldız(lar) 2 Değerlendirme Değerlendirenler

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

aslında yardım edebilirsin ama hazır olamaması gerekiyor fikir vermek diyebiliriz
Artık beni ilgilendirmiyor, python'da tarafında hile yapmak isteyen varsa mevcut kaynaklara baksın mevcut kaynaklar yetmiyorsa ellerini açıp Allah'tan yardım istesin benden yardım beklemesinler. Özelden bana yazmayın, Discord üzerinden bana yazmayın kimseye yardım etmeyeceğim.
 
Konudaki kod fridanin güncel sürümlerinde çalışmıyordu. Birkaç saatlik uğraş sonucunda en güncel sürümünde çalışacak şekilde düzelttim. Yeni kullanıcak arkadaşlar iki halinide deneyip kullanabilir. Ayrıca arayüz ekledim. bütün offsetleri ve processname'i arayüz üzerinden girip insert tuşuyla başlatıp durdurabilirsiniz.

[CODE title="damage"]import frida
import customtkinter as ctk
import keyboard
from tkinter import messagebox

ctk.set_appearance_mode("dark")
ctk.set_default_color_theme("blue")

class App(ctk.CTk):
def __init__(self):
super().__init__()

self.title("Target Damage Controller")
self.geometry("420x380")
self.resizable(False, False)

self.grid_columnconfigure(1, weight=1)

ctk.CTkLabel(self, text="Process Adı:").grid(row=0, column=0, padx=10, pady=(20,5), sticky="e")
self.process_entry = ctk.CTkEntry(self)
self.process_entry.grid(row=0, column=1, padx=10, pady=(20,5), sticky="we")
self.process_entry.insert(0, "1.exe")

ctk.CTkLabel(self, text="NET_POINTER_ADDRESS offset (hex):").grid(row=1, column=0, padx=10, pady=5, sticky="e")
self.net_pointer_entry = ctk.CTkEntry(self)
self.net_pointer_entry.grid(row=1, column=1, padx=10, pady=5, sticky="we")
self.net_pointer_entry.insert(0, "0x458044")

ctk.CTkLabel(self, text="BATTLE_CALL_ADDRESS offset (hex):").grid(row=2, column=0, padx=10, pady=5, sticky="e")
self.battle_call_entry = ctk.CTkEntry(self)
self.battle_call_entry.grid(row=2, column=1, padx=10, pady=5, sticky="we")
self.battle_call_entry.insert(0, "0xDF970")

ctk.CTkLabel(self, text="TARGET_BASE_ADDRESS offset (hex):").grid(row=3, column=0, padx=10, pady=5, sticky="e")
self.target_base_entry = ctk.CTkEntry(self)
self.target_base_entry.grid(row=3, column=1, padx=10, pady=5, sticky="we")
self.target_base_entry.insert(0, "0x4580AC")

ctk.CTkLabel(self, text="TARGET_OFFSET (hex):").grid(row=4, column=0, padx=10, pady=5, sticky="e")
self.target_offset_entry = ctk.CTkEntry(self)
self.target_offset_entry.grid(row=4, column=1, padx=10, pady=5, sticky="we")
self.target_offset_entry.insert(0, "0x4E3E8")

self.start_button = ctk.CTkButton(self, text="Başlat", command=self.start_attack)
self.start_button.grid(row=5, column=0, padx=20, pady=20, sticky="we")

self.stop_button = ctk.CTkButton(self, text="Durdur", command=self.stop_attack, state="disabled")
self.stop_button.grid(row=5, column=1, padx=20, pady=20, sticky="we")

self.status_label = ctk.CTkLabel(self, text="Durum: Durduruldu", font=ctk.CTkFont(size=14, weight="bold"))
self.status_label.grid(row=6, column=0, columnspan=2, pady=(10, 20))

self.session = None
self.script = None

keyboard.on_press_key("insert", lambda e: self.after(0, self.toggle_attack))

self.bind('<Insert>', self.toggle_attack)

self.protocol("WM_DELETE_WINDOW", self.close)

def build_script_code(self, process_name, net_ptr_offset, battle_call_offset, target_base_offset, target_offset):
return f'''
const base = Process.getModuleByName("{process_name}").base;

const NET_POINTER_ADDRESS = base.add({net_ptr_offset});
const BATTLE_CALL_ADDRESS = base.add({battle_call_offset});
const TARGET_BASE_ADDRESS = base.add({target_base_offset});
const TARGET_OFFSET = {target_offset};

var running = false;

function getTargetVID() {{
try {{
var basePtr = TARGET_BASE_ADDRESS.readPointer();
if (basePtr.isNull && basePtr.isNull()) {{
return 0;
}}
var targetAddress = basePtr.add(TARGET_OFFSET);
if (typeof targetAddress.readInt !== "function") {{
return 0;
}}
var targetId = targetAddress.readInt();
return (typeof targetId === "number" && targetId > 0) ? targetId : 0;
}} catch (e) {{
return 0;
}}
}}

function sendBattleAttack(targetId) {{
if (targetId <= 0) return false;
try {{
var netPointer = NET_POINTER_ADDRESS.readPointer();
if ((typeof netPointer.isNull === "function" && netPointer.isNull()) || netPointer.equals(ptr('0x0'))) {{
return false;
}}
var codeSize = 64;
var codePtr = Memory.alloc(codeSize);
Memory.patchCode(codePtr, codeSize, function(code) {{
var writer = new X86Writer(code);
writer.putMovRegAddress('ecx', netPointer);
writer.putPushU32(targetId);
writer.putPushU32(0);
writer.putCallAddress(BATTLE_CALL_ADDRESS);
writer.putRet();
writer.flush();
}});
var execFunc = new NativeFunction(codePtr, 'void', []);
execFunc();
return true;
}} catch (e) {{
return false;
}}
}}

function attackLoop() {{
if (!running) return;
var targetId = getTargetVID();
if (targetId > 0) {{
sendBattleAttack(targetId);
}}
setTimeout(attackLoop, 60);
}}

rpc.exports = {{
start: function() {{
if (!running) {{
running = true;
attackLoop();
return "started";
}}
return "already running";
}},
stop: function() {{
running = false;
return "stopped";
}},
isrunning: function() {{
return running;
}}
}};
'''

def on_message(self, message, data):
if message['type'] == 'send':
print("[*]", message['payload'])
elif message['type'] == 'error':
print("[!][ERROR]", message['stack'])

def start_attack(self):
if self.session:
messagebox.showwarning("Uyarı", "Zaten bir işlem bağlı!")
return

process_name = self.process_entry.get().strip()
net_ptr = self.net_pointer_entry.get().strip()
battle_call = self.battle_call_entry.get().strip()
target_base = self.target_base_entry.get().strip()
target_offset = self.target_offset_entry.get().strip()

def norm_hex(s):
return s if s.startswith("0x") else "0x" + s

net_ptr = norm_hex(net_ptr)
battle_call = norm_hex(battle_call)
target_base = norm_hex(target_base)
target_offset = norm_hex(target_offset)

try:
script_code = self.build_script_code(process_name, net_ptr, battle_call, target_base, target_offset)
self.session = frida.attach(process_name)
self.script = self.session.create_script(script_code)
self.script.on('message', self.on_message)
self.script.load()

result = self.script.exports_sync.start()
if result == "started":
self.status_label.configure(text="Durum: Çalışıyor")
self.start_button.configure(state="disabled")
self.stop_button.configure(state="normal")
else:
self.status_label.configure(text="Durum: Zaten çalışıyor")
except Exception as e:
messagebox.showerror("Hata", f"Başlatma başarısız: {e}")
self.cleanup()

def stop_attack(self):
if not self.session:
messagebox.showinfo("Bilgi", "Çalışan bir işlem yok.")
return
try:
result = self.script.exports_sync.stop()
if result == "stopped":
self.status_label.configure(text="Durum: Durduruldu")
self.start_button.configure(state="normal")
self.stop_button.configure(state="disabled")
else:
self.status_label.configure(text="Durum: Zaten durdurulmuş")
except Exception as e:
messagebox.showerror("Hata", f"Durdurma hatası: {e}")
self.cleanup()

def cleanup(self):
try:
if self.script:
self.script.unload()
if self.session:
self.session.detach()
except:
pass
self.script = None
self.session = None

def toggle_attack(self, event=None):
if self.session and self.script:
try:
running = self.script.exports_sync.isrunning()
if running:
self.stop_attack()
else:
self.start_attack()
except Exception as e:
self.after(0, lambda: messagebox.showerror("Hata", f"Durum kontrol hatası: {e}"))
else:
self.start_attack()

def close(self):
self.stop_attack()
self.destroy()

if __name__ == "__main__":
app = App()
app.mainloop()
[/CODE]
 
Son düzenleme:
Paylaşım için teşekkürler.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)