Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
20
Cevap
895
Tıklama
1
Öne Çıkarma
Şifrelenmiş bir Executable'ı şifresini açmadan çalıştırmak.
G
5 yıl
Yüzbaşı
Konu Sahibi

Teorik olarak yapmak mümkün müdür ?

Şifrelenmiş bir executable'ı şifresini açmadan çalıştıracağım fakat şifrelendiği için çalıştırılamıyor.

Algoritma önerisi : Sistemi yanıltıp executable'ı processlere sokup ondan sonra şifresini çözersem başarılı bir şekilde çalışabilir mi ?

Bu olabilir ise yeni bir crypting yöntemi olabilir.

Şuana kadar Scantime ve Runtime Crypterları araştırdım.

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





< Bu mesaj bu kişi tarafından değiştirildi Guest-8F0924900 -- 14 Şubat 2020; 20:5:46 >

R
5 yıl
Yarbay

quote:

Orijinalden alıntı: Guest-8F0924900

Bahsettiğim şey programın kırılması değil. Program benim tarafımdan Runtime Crypter kullanılarak şifrelendi.

Runtime Crypter çalıştıralacağı anda bunu belleğe yazarak çalıştırıyor.

Fakat ben bundan farklı bir şey yapmak istiyorum.

Tarafımdan şifrelenmiş program şifrelendiği için açılmıyor. Ve ben bu şifreyi çözmeden onu açmak istiyorum. C++ ile CreateProcess çağrısında bulundum ve birden programınız 16 bit bu sistemde çalıştırılamaz dedi.

Eskiden çalışan bir program nasıl da şifrelendikten sonra 16 bit oluyor ?

Şifrelediğim programın kodlarına baktım ve tüm şifrelenmiş dataları dosyaya yazdığını gördüm.
Runtime crypter'ı duyunca anladım galiba. Exe dosyasının şifrelenmiş olmasından bahsediyorsun. Yani programı açmak için, runtime crypter üzerinden belirlediği şifre ile decrypt etmen gerekiyor. Tabi sen bu standart yöntemle değilde, başka bir yöntemden bahsediyorsun.

Bu konu üzerinde pek bilgim yok ama createprocess üzerinden olmaması normal. Oluyorsa, decrypt edilmeden düz açılır zaten.





< Bu mesaj bu kişi tarafından değiştirildi requizm -- 15 Şubat 2020; 13:35:45 >

< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
G
5 yıl
Yüzbaşı
Konu Sahibi

Evet aynen öyle. Decyrpt etmeden açmaya uğraşacağım ama bunun içinde farklı bir crypting yöntemi gerekiyor sanırsam.

Fakat mantıken scantime crypter bana göre.Hem şifreliyor ve farklı bir program olarak gösteriyor ve de açılabiliyor.

Bu arada amacım av-bypass etmek. Anti-virüslerin sınırlarını araştırıyorum. (Tabii ki de etik dışı bir şey yapmayacağım sadece bu konuya merakımdan araştırıyorum.)

Piyasadaki bypass araçlarının çoğu birbirinin aynısı bu yüzden farklı bir şey yapmak istedim.




Bu mesajda bahsedilenler: @Requizm
O
5 yıl
Onbaşı

bahsettiğin olayı delphi ile yapmıştım, process resourcedeki veya netten yüklediği crypt binary yi string olarak yükledikden sonra decrypt edip kendi belleğinde çalıştırıyor idi,
istersem uzakdaki process in bellek alanındada çalıştırtabilirim bende bu bahsettiği olayları yakşalık 10 yil kadar önce denemiştim testleri kaspersky ile yapmıştım, ancak anti virüs motorları zamanında processlerin çalıştırılan makine kodu üzerinde(bellekdeki) makine kodları üzerinde pattern ararlardı,

şimdi ise artık davranış analizi yapıyorlar yani bunlarla hiç uğraşmayip direk uygulamanı valid bir şekilde sertifika ilede işaretlersen uygulaman nt tarafından çalıştırılmadan önce valid edildikden sonra çalışır, ancak antiler davranış analizi yaptığı için, penceresiz bir uygulama kalkıpda hklm run a bişi yazarsa, servis eklersen sistem dosyalarına müdehale edersen windows içinde binary extract edersen gibi tonlarca değerleme yaparlar ve sandbox bunları emule ettiği için geride alır, hatta gerçek sisteme yansıtmaz.

decrypt etmeden çalıştıramazsın çünkü çalıştırılabilecek bir makine kodu yok ortada, ancak eğerki bir debuggeri ana uygulamana gömer, ve bu crypt edilmiş sitring içindeki
makine kodlarını ufak kısımlar olarak misal 1kb gibi ufak ufak açıp çalıştırıp string i imha edersen söylediğine ulaşırsın ancak bu sadece uygulamanı çalıştırmanı sağlar,

uygulaman çalışma döngüsüne devam edebilmesi için tüm binary op kodlarının dallanacak pointer adresleri ile birlikde sanal bellekde olması gerekir, diğer türlü jmp jnz vs gibi kodların cpu tarafından çalıştırılamayacakdır, e bu çalıştırılmazsa ortada çalışan bir programda kalmaz, kısacası uygulama çalışacaksa binary belleğe yüklenmiş olması gerekir.
debugger yazar


Bu mesaja 1 cevap geldi.
G
5 yıl
Yüzbaşı

Dinamik bellek sorun çıkartmaz.
unsigned char *buf = new unsigned char[size];



Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @codforc
G
5 yıl
Yüzbaşı

Hocam scantime falan hiç karıştırma, yapacaklarını sırasıyla yazayım öncelikle dosyayı şifrelemeden çalıştır daha sonra şifrelersin

1: file.exe yi stub.exe ismiyle kopyala CopyFile("file.exe", "stub.exe", 0);
2: stub.exe nin sonuna bir string yaz "fStart"
3: şifrelemek istediğin dosyayı oku (calc.exe) stub.exe nin sonuna calc.exe verisini yaz (şifrelemeden).
4: stub.exe yi çalıştır ve kendini okut, daha sonra yazdığın stringi arat

char *p = NULL;
for(int i=0;i<stubsize;++i) //strcmp, strstr ile aratma
if(stubdata[i] == 'f' && stubdata[i+1] == 'S' && stubdata[i+2] == 't' && stubdata[i+3] == 'a' && stubdata[i+4] == 'r' && stubdata[i+5] == 't')
p = stubdata + i + strlen("fStart");
if(p)
{
runPE rp;
GetModuleFileNameA(0, LPSTR(szFilePath), 1024);
rp.run(szFilePath, p);
}


Test etmedim sadece mantığı yazmaya çalıştım.

Size önerim linkteki ekitabı okuyunhttps://gofile.io/?c=47BrVf

Temelde bazı problemler gördüm bende sizin gibi amatörüm yanlış anlamayın linkteki e-kitap kafanızdaki bir çok soruyu cevaplayacak.

Edit: for döngüsünün yanında uyarı yapmıştım kendim aynı hataya düşmüşüm strlen("fStart"); //"strcmp, strstr ile aratma"

Sebep şu; dosyada "fStart" stringini ararken ilk bulacağı p = stubdata + i + strlen("fStart"); daki "fStart" olacak bunun yerine (strlen("fStart");) string boyutunu el ile yaz p = stubdata + i + 6;





< Bu mesaj bu kişi tarafından değiştirildi Guest-4D62BFE91 -- 23 Şubat 2020; 1:34:50 >


Bu mesajda bahsedilenler: @codforc
R
5 yıl
Yarbay

Burada bahsettiğin şey, herhangi bir programın kırılması değil mi? Yanlış anlamadıysam şöyle örnek vereyim. Bir executable programda şifre olduğunu varsayalım. Programın şifre kontrolü de şöyle basit bir şey olsun.
//////
if(input() == password)
start();
else
exit(1);
//////
Yani burada yapılması gereken tek şey, disassembly yaptıktan sonra instruction pointer'ı değiştirmek veya şifre kontrolüne geldiğimizde jnz/jng/jne yazan yeri jz/jg/je yapmak. Tam tersi de olabilir.



İ
5 yıl
Yüzbaşı

cracklemekten bahsediyorsun sanki, binary hacking bilsen yeter, ters mühendislik vakit alır.



< Bu ileti mobil sürüm kullanılarak atıldı >

G
5 yıl
Yüzbaşı
Konu Sahibi

Bahsettiğim şey programın kırılması değil. Program benim tarafımdan Runtime Crypter kullanılarak şifrelendi.

Runtime Crypter çalıştıralacağı anda bunu belleğe yazarak çalıştırıyor.

Fakat ben bundan farklı bir şey yapmak istiyorum.

Tarafımdan şifrelenmiş program şifrelendiği için açılmıyor. Ve ben bu şifreyi çözmeden onu açmak istiyorum. C++ ile CreateProcess çağrısında bulundum ve birden programınız 16 bit bu sistemde çalıştırılamaz dedi.

Eskiden çalışan bir program nasıl da şifrelendikten sonra 16 bit oluyor ?

Şifrelediğim programın kodlarına baktım ve tüm şifrelenmiş dataları dosyaya yazdığını gördüm.





< Bu mesaj bu kişi tarafından değiştirildi Guest-8F0924900 -- 15 Şubat 2020; 10:5:45 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @imammmm , @Requizm
G
5 yıl
Yüzbaşı
Konu Sahibi

Çok teşekkürler bilgi verdiğiniz için. Çok işime yarayacak.

Peki anti virüsler dkom(Direct Kernel Object Manipulation) yönteminde process kernelden çalıştırıldığında ve EPROCESS listesine eklendiğinde bunun davranış analizini yapabiliyorlar mı?

Yani diyelim kernel process olarak çalışan bir virüs var. Kaskpersky bunun davranış analizini yapabilir mi ?





< Bu mesaj bu kişi tarafından değiştirildi Guest-8F0924900 -- 17 Şubat 2020; 22:18:6 >


Bu mesajda bahsedilenler: @okoca55
O
5 yıl
Onbaşı

diyorsunki ring0 da çalışan bir rootkit var işletim sistemi nt apilerini hook ediyor,
elbetteki, normalde os nin versiyonuna göre apilerinin bellek adresleri sabittir, bunu sanal bellek mantığı sağlıyor, evet sen bir api yi hook ettiğin an bu tespit edilebilir pointer adresi değişiyor çünkü ancak esas olan şudur,

ring0 seviyesinde ilk kancayı atan yetkiyi elinde bulundurur kendini koruyabilirse antivirüsün ona müdehalesini engeller, yeterince ileri seviye yazılmışsa kendinide gizleyebilir, ancak tespit de anti rootkit bulundu mesajını kullanıcıya gösterir,
en üst seviye driver olarak çalışabilmek için os başlangıcında veya os dende önce
devreye girmek gerekir, buralardada güvenli os boot yönetimi uhfi vs devreye giriyor.


https://www.google.com.tr/search?q=ring0&client=opera&source=lnms&tbm=isch&sa=X&ved=2ahUKEwjorNiMqtnnAhUlxMQBHdEODKkQ_AUoAXoECA8QAw&biw=1511&bih=682#imgrc=mWQkBHng9w4yjM





< Bu mesaj bu kişi tarafından değiştirildi okoca55 -- 17 Şubat 2020; 22:35:27 >
Bu mesaja 1 cevap geldi.
G
5 yıl
Yüzbaşı
Konu Sahibi

Şuan yapmak istediğimi yaptıktan sonra kapsamlı win32, KMDF konularını araştıracağım.

İmzasından dolayı her anti-virüse yakalandığı için bir miner(xmrig) indirdim.

Amacımda miner'i crypter ile şifreleyip her sistem başlangıcında kernel driver ile başlatmaktı.

*Şimdi miner'ı driver'a load ediyorum ve sonra miner'ın load edildiği driver'ı başarılı bir şekilde "sc delete Rootkit" diye silebiliyorum. Bunu sildirmemek de dediğiniz gibi yine driver'ın elinde mi ?


*Sizce bu ne kadar güçlü bir yöntem (crypter-exe -- load kernel driver)? Bunun gibi daha güçlü yöntemler var mı ? Miner'ı av görecek illa ki o yüzden şifreli olması gerek diye düşünüyorum executablenin.





< Bu mesaj bu kişi tarafından değiştirildi Guest-8F0924900 -- 18 Şubat 2020; 8:29:50 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @okoca55
O
5 yıl
Onbaşı

< Resime gitmek için tıklayın >

sana windows servislerinden örnek vereyim,
windows hizmet yöneticisindeki her servis esasında registerydeki
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services altında bir anahtardır,
sen çalışan servisi durdur yaptığında servisine durdurma mesajı gider, servis isterse durdurmaya red vererek
bunu bloklayabilir ancak kullanıcı servis durumunuda disabled e çekebilir bu durumda servis durduğunda bir daha çalışmayacakdır, eğer servis kendi registery anahtarını monitor ediyor ise,
start, type gibi anahtarlarını HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\servisabc\start|type vs tekrar yazarak sistem başlangıcındaki durumunu 0 layabilir, otomatiğe çekebilir, kullanıcı disabled yapmıştır ancak o ekranı kapatıp açtığında tekrar otomatik görür vs, veya process windows handlerdan pencereye müdehale eder o listbox u disabled e çeker anında.. veya servis usermodda registry fonksiyonlarını regquery regdelete vs hook ediyordur, geriye mmc.exe ye sahte sonuc döndürür, veya process sürekli bellekdeki bildiği adresleri monitor ediyordur, sonuçda biliyorsun tüm ayarlar herşey ramda duran 1 0 ve yazılardan stringden ibaret, direk ram a müdehale eder anında
read,writeprocessmemory vs ile gibi hepside aynı kapıya çıkar.

minerinin cpu gpu kullanımınıda gizliyeceksin öyleyse systemqueryperformanceinformation muydu öyle bir api idi
process kullanımını gösteren uygulamarın taskmngr gibi kullandığı hatırlamıyorum bakmak gerekir, sen driver inda bunları yaptığında, olurda bir hata çıkarsa mavi ekran gelirse, sistem yeniden başlarsa kullanıcı f8 ekranında basitce bilinen en son yapılandırmayı yükle dediğinde senin bu servisler driver lar hepsi geçersiz olur silinirler.

zaman harcadığın konu pek mantıklı işler değil normal kişiler için, devlet için veya mit için çalışmıyorsan,
boşa zaman harcama bunlarla boş işler.
https://0x00sec.org/
şurası sana göre incele güzel konular vardır.

< Resime gitmek için tıklayın >
https://www.youtube.com/watch?v=bSnMNxiLbqU





< Bu mesaj bu kişi tarafından değiştirildi okoca55 -- 18 Şubat 2020; 14:53:43 >


Bu mesajda bahsedilenler: @codforc
G
5 yıl
Yüzbaşı

Anahtar kelime "Run time crypter" eskiden hobi amaçlı ilgilenirdim en tehlikeli virüsleri bile bu yöntemle fud yapardım


Bu mesaja 1 cevap geldi.
G
5 yıl
Yüzbaşı
Konu Sahibi

Elimde bir runtime crypter src'si var ve bu exe'yi şifreliyor ve shellcode.h diye şifrelenmiş byteları içeren bir header dosyası oluşturuyor. Fakat nedense bunu derlerken stack overflow oluyor ve bu hatayı nasıl çözeceğimi bilemiyorum bir kaç yöntem denedim fakat olmadı.


src :https://github.com/jozemberi/PE-Crypter

usage :


1 - *compile xtea.cpp

run xtea.exe path

2 - *compile shellcode_generator.c

run shellcode_generator.exe path


3 - *compile file.cpp

Sorun burada başlıyor. shellcode_generator.c shellcode.h oluşturdu ve file.cpp'nin içinde "shellcode.h" include edilmiş. Fakat file.cpp'yi derlediğimde maalesef stack overflow hatası alıyorum.


not : asm kodu benim değil file.cpp'yi derlediğimde karşıma o geliyor.

< Resime gitmek için tıklayın >





< Bu mesaj bu kişi tarafından değiştirildi Guest-8F0924900 -- 18 Şubat 2020; 21:49:9 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @vonderplanitz , @Requizm , @okoca55 , @Determinist
G
5 yıl
Yüzbaşı

Bende sorun çıkmadı. Önce xtea.cpp ve shellcode_generator.c yi derledim şifrelemek istediğim dosyayı(calc.exe) xtea.exe üzerine bıraktım calc.exe şifrelendi, şifrelenmiş calc.exe yi shellcode_generator.exe nin üzerine bıraktım shellcode.h dosyası oluştu son olarak file.exe yi çalıştırdım hesap makinesi çalıştı.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @codforc
G
5 yıl
Yüzbaşı
Konu Sahibi

Ne ile derlediniz ?


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Determinist
G
5 yıl
Yüzbaşı

Devc++ ile derledim sendeki hata bellek hatası olabilir çünkü yöntem biraz problemli, bu yöntemle şifrelemek istediğin prgram büyük boyutta olursa derleyici bellek oluşturamayabilir bunun yerine şifrelenecek dosya file.exe ye yazılır çalıştığında okuyup şifre çözülür.


Bu mesaja 2 cevap geldi.

Bu mesajda bahsedilenler: @codforc
G
5 yıl
Yüzbaşı
Konu Sahibi

File.exe'ye şifrelenecek dosyanın verisini okuması için bir buffer oluştursam shellcode'u okuması için de yeniden shellcode.h'ın içindeki char kadar alan gerekmez mi buffer için ?

O sayede yeniden bellek hatası alınır mantıken. C6262 warning


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Determinist