- 7 Şub 2022
- 51
- 11
Yaklaşık %30'unu chatGPT'den alıp %70ini kendim yazdığım pyinstaller ile .py'den .exe'ye dönüştürülmüş dosyaların kaynak kodlarını bulmayı, yani bi nevi otomatik şekilde tersine mühendislik yapan bir pythom scripti.
kod sayesinde sadece .exe dosyasının yolunu girerek dosyanın kaynak kodlarına ulaşabilirsiniz.
.exe dosyasını parçalamak için pyinstxtractor kullandım, parçalarına ayrılan .exe dosyasının içinden ana .pyc uzantılı dosyayı bulup decode etmek için ise pydumpck kullandım.
Script;
eğer hata alırsanız dm'den ulaşabilirsiniz.
!!!DİKKAT!!! SADECE .PY DOSYASINDAN .EXE'YE DONUSTURULMUS DOSYALAR ICIN GECERLIDIR .NET GIBI FRAMEWORKLERDE ISE YARAMAZ.
kod sayesinde sadece .exe dosyasının yolunu girerek dosyanın kaynak kodlarına ulaşabilirsiniz.
.exe dosyasını parçalamak için pyinstxtractor kullandım, parçalarına ayrılan .exe dosyasının içinden ana .pyc uzantılı dosyayı bulup decode etmek için ise pydumpck kullandım.
Script;
Kod:
#burda da kullanacagim kutuphaneleri import ediyorum.
import os
import shutil
import time
import fnmatch
import requests
import subprocess
os.system("pip install requests")
os.system("pip install pydumpck")
username = os.getlogin() #burda bilgisayar kullanicisinin username'sini appdata yolunu bulurken kullanmak uzere aliyorum...
#program yolu girildiginde programi alan fonksiyon..
def get_program_name(file_path):
program_name = os.path.basename(file_path)
return program_name
#benzer dosyalari bulan fonksiyon bunu pyinstxtractorun cikti verdigi dosyayi bulmak icin kullaniyorum..
def find_and_move_similar_files(base_path, keyword, target_path):
for root, dirs, files in os.walk(base_path):
for file_name in files:
if fnmatch.fnmatch(file_name, f"*{keyword}*"):
source_file = os.path.join(root, file_name)
source_file_extension = os.path.splitext(file_name)[1]
if source_file_extension in (".pyc"):
target_file = os.path.join(target_path, file_name)
shutil.move(source_file, target_file)
print(f"{source_file} dosyası {target_file} yoluna taşındı.")
#burda pyintxtractor indiriyom bu kadardi tsk...
file_url = "https://raw.githubusercontent.com/extremecoders-re/pyinstxtractor/master/pyinstxtractor.py" #burda pyinstxtractoru sahibinden indiriyorum yani indirme baglantisini giriyorum
save_path = "C:\\Users\\"+username+"\\AppData\\Local\\Temp\\pyins.py" #burdada indirecegim pyinstxtractorun kaydedilme yolunu giriyorum...
response = requests.get(file_url) #burda indirme islemi gerceklesiyor..
with open(save_path, 'wb') as file:#burdada kaydolma islemi...
file.write(response.content)
pyinstxtractor_yolu = r"C:\\Users\\"+username+"\\AppData\\Local\\Temp" #pyinstxtractorun yolunu veriyorum burada kullabilsin diye...
os.chdir(pyinstxtractor_yolu) #scriptin calistigi yolu degistiriyorum burda cmd'deki "cd" komudu gibi dusunulebilir..
veri = input("exe dosyasinin yolunu giriniz: ") #burda exe dosyasinin yolunu aliyorum kullanicimdan
program_isim = get_program_name(veri) #yukaridaki yazdigim fonksiyonu cagiriyorum burda program ismini almak icin...
os.system(f"python pyins.py {veri}") #burda pyinxtractora exe dosyamizi veriyoruz "veri" adli degiskenimizin icinde .exe dosyamizin adi var...
time.sleep(3)
#burda sey yapiliyo .exe uzantisini siliyo slice islemi yapiliyo yani sonra dosyayi bulmasi icin keyword'e .exe uzantisiz bir dosya adi veriyor bu kadardi tsk...
base_path = r"C:\\Users\\"+username+"\\AppData\\Local\\Temp\\"+program_isim+"_extracted" #bu dosyayi asagidaki konuma tasiyo buda
target_path = r"C:\\Users\\"+username+"\\AppData\\Local\\Temp" #buda tasidigi konum tsk...
program_isim=program_isim[:-4]
keyword = program_isim
find_and_move_similar_files(base_path, keyword, target_path)
#try catch icinde de pydumpck kullanarak pyintxtractorun vermis oldugu .pyc uzantili dosyayi .py uzantısına geri ceviriyorum yani decode islemi birazcik...
try:
cmd = "C:\\Users\\"+username+"\\AppData\\Local\\Programs\\Python\\Python310\\Lib\\site-packages\\pydumpck\\pyc_checker\\lib_pycdc\\pycdc.exe"
pyc_file = "C:\\Users\\"+username+"\\AppData\\Local\\Temp\\"+program_isim+".pyc"
#subprocess.run fonksiyonuna dosya yollarini verip calistiriyorum burda olan seyin cmd kodu acikca su;
#python pycdc.exe ehehe.pyc
#tamamen bu bu kadardi..
subprocess.run([cmd, pyc_file], check=True)
input("")
except:
#hata yakaliyo bu arkadas
input("")
!!!DİKKAT!!! SADECE .PY DOSYASINDAN .EXE'YE DONUSTURULMUS DOSYALAR ICIN GECERLIDIR .NET GIBI FRAMEWORKLERDE ISE YARAMAZ.