Python kodu ne işe yarıyor?

no.name.nb

Hectopat
Katılım
15 Ocak 2021
Mesajlar
212
Merhabalar. Böyle bir kod çalıştırdım yanlışlıkla ne işe yarıyor bu?
 

Dosya Ekleri

  • d.PNG
    d.PNG
    95,1 KB · Görüntüleme: 96
Son düzenleyen: Moderatör:
Merhabalar. Böyle bir kod çalıştırdım yanlışlıkla ne işe yarıyor bu?
os.path.join(), () içersine yazılan parametrelere yol oluşturuyor.
os.getenv(), () içersine yazılan parametrenin adresini veriyor gibi düşünebiliriz. terminalde kullanılan cd komutu gibi düşünlebilir.

for döngüsündeki file değişkeni, tuple olarak belirlenen yani bildiğimiz normal parantezler içerisindeki değerlerde dolaşan bir döngü kuruluyor.
Tuple ifadenin içerisindeki döngü ise şöyle: os.listdir() biz bir liste döndürüyor. İlk paragrafta dilimin döndüğünce söylemeye çalıştığım işlemi cache_path adındaki değişkene atadığından burada da os.listdir(cache_path) olarak yazıyor ki değerler bir liste niteliğine dönüşsün. Bu işlemin ardından, for döngüsünde tanımdalığı x değişkeni bu listenin içerisindeki elemanlarda dolaşıyor bunu tuple olarak tutuyor. (yani orada yazılan şey alt yalta yazılsa idi bi tane daha değişken oluşturup bu oluşturulan değişkene boş bir tuple yani içi boş liste gibi düşünebileceğiniz bir normal parantez aç kapa yapılarak atanırdı. Bunu yazan eleman bundan tasarruf için böyle bir yönteme başvurmuş hiç sevmem daha zor anlarım böyle yazılan kodları) Ardından yanında yazdığı koşul ifadesinde ise o listenin içinde dolanan x değişkeninin uğradığı elemanın başlangıç harfi veya kelimesi "f_" ise true değeri döndür demiş.

with satırına geliyorum. open fonksiyonun ilk parametresine yine os.path.join() diyerek ilk parametresine en başta oluşturduğu değişkeni ikinci parametresi olarakta ilk for döngüsünün değişkenini atıyor. böylece adres belirlenmiş oluyor. "C://Users//Falanca//Şu_klasör" gibi. Bunu okuma kipinde okuyor şayet şöyle bir farkla bunu byte formatında açıyor. Yani byte formatında okuyor. Çünkü kodun en başında byte formatında yazdığı * ifadelerinden oluşan benimde anlamadığım bir değişken tanımlamış.. Bu işlemi fd ile isimlendirmiş. Sonra bunu buf adını verdiği değişkene atayarak okuma işlemini gerçekleştirmiş.

Eğer bu en baştaki değişken yani DELIMITER buf ın içerisinde var ise yani okunduğunda içerisinde DELIMITER değişkenine atanan değer var ise (rindex in ne olduğunu bilmiyorum :) ) sanrım integer bir değer döndürüyor ki DELIMITER'in uzunluğu ile toplamış. Bu değeri payload değişkeni oluşturup buf değişkeninin ilk (atıyorum 5 harfi orada ne denk geliyorsa kodu da test etmediğimden birşey diyemiyorum o açıdan ) o kadar ki harfini payload değişkenine atıyor. exec kısmı ise aslında biraz tuhaf içerisinde matematik işlemi yapıldığı sıra(string olarak) bunun işlemini veriyor. Ee sonunda da tabi döngüden çıkmak için break anahtar kelimesini kullanıyor

Elimden geldiğince daha doğrusu dilim döndüğünce buna paralel bilgimin yettiği kadarıyla anlatmaya çalıştım. Umarım anlaşılmıştır.

Edit: İlgili bilgilere gitmek için linkler bıraktım daha faydalı olur
 
Son düzenleme:
Appdata/Discord/Cache içerisindeki f_ ile başlayan dosyaları binary formatta okuyup son ayraçtan itibaren sonraki kısmı ayırıp execute ediyor.

Bariz şekilde Remote Code Execution için yazılmış bir kod.
 
Son düzenleme:

Yeni konular

Geri
Yukarı