Vmprotect nasıl unpack edilir?

Tabii ki imkansiz degil ancak imkansiza yakin, cok cok zor. Daha guncel orneklerle deneyip ayni sonucu alamazsin. Bu sekilde konusmayi sevmem ancak bariz bir sekilde yalan soyluyorsun. Nuitka’yi bile cozmus birisi olmak ne demek? Nuitka zaten acik kaynak kodlu, bunu cozmekte ne var? Singapurlu birinin IDA scriptini alip guncellemissin tum crediti kendi uzerine aliyorsun, etik degil. Eski VMProtect kaynak kodlari ciktiginda o surumu kullanan uygulamalari cozmek de kolaydi ancak bu artik soz konusu degil. Dragon blabla repolarinda guncel vmpyi unpack edebilecek bir kod yok. Dilersen son surum vmp ile koruyup sample atayim kendin gor :) PE sectionlarda .vmp0 .vmp1 kontrol etmek cok bayat bir yontem. Gecerli degil. Guncel VMProtect surumunde PE sectionlar bu sekilde birakmiyor orayi :)
 
Tabii ki imkansiz degil ancak imkansiza yakin, cok cok zor. Daha guncel orneklerle deneyip ayni sonucu alamazsin. Bu sekilde konusmayi sevmem ancak bariz bir sekilde yalan soyluyorsun. Nuitka’yi bile cozmus birisi olmak ne demek? Nuitka zaten acik kaynak kodlu, bunu cozmekte ne var? Singapurlu birinin IDA scriptini alip guncellemissin tum crediti kendi uzerine aliyorsun, etik degil. Eski VMProtect kaynak kodlari ciktiginda o surumu kullanan uygulamalari cozmek de kolaydi ancak bu artik soz konusu degil. Dragon blabla repolarinda guncel vmpyi unpack edebilecek bir kod yok. Dilersen son surum vmp ile koruyup sample atayim kendin gor :) PE sectionlarda .vmp0 .vmp1 kontrol etmek cok bayat bir yontem. Gecerli degil. Guncel VMProtect surumunde PE sectionlar bu sekilde birakmiyor orayi :)
Ee peki DetecItEasy tarafından VMProtect[new ile başlayan imzaları neden çözebiliyor o zaman? Özellikle C# ise.
 
Ee peki DetecItEasy tarafından VMProtect[new ile başlayan imzaları neden çözebiliyor o zaman? Özellikle C# ise.
Sig patternleri neden bulamasin? Unpacked executable elde etmek ile sig eslestirmek birbirinden cok farkli seyler. Dotnet ile calismiyorum, direkt native platform executable’lari koruyorum (vmp kullananlarin %99’u gibi) veya analiz ediyorum.

DiE != Unpacker

Daha onceden de belirttigim gibi, son surum vmp ile korunmus uygulamalari unpacklemek cok ama cok zor, dunya uzerinde makul bir zaman icerisinde basarabilecek kisi sayisi epey az diye tahmin ediyorum.

DiE VMProtect ile ultra seviye virtualization eklenmis bir malware’in icerigini bulamiyor, sadece VMP ile packlendigini belirtiyor. VMP ile packlendigini bilmek zaman kazandirir ancak okunabilir sekilde sonuc verecek unpack islemini kolaylastirmaz. dinamik olarak kernel space’de (usermode olmaz cunku vmp kernelmode protection var, hypervisor tercih edilebilir) memory dump alip pe sectionlari incelenebilir ancak bu sefer de virtualized instructionlar ile karsi karsiya kaliyorsun. (devirt etmeden oku okuyabiliyorsan…)

IDA Pro bile analiz ederken hata veriyor, duzeltilebiliyor ama disasm sonucu hep yanlis.

Umarim anlattiklarim aciklayici olmustur.
 
Sig patternleri neden bulamasin? Unpacked executable elde etmek ile sig eslestirmek birbirinden cok farkli seyler. Dotnet ile calismiyorum, direkt native platform executable’lari koruyorum (vmp kullananlarin %99’u gibi) veya analiz ediyorum.

DiE != Unpacker

Daha onceden de belirttigim gibi, son surum vmp ile korunmus uygulamalari unpacklemek cok ama cok zor, dunya uzerinde makul bir zaman icerisinde basarabilecek kisi sayisi epey az diye tahmin ediyorum.

DiE VMProtect ile ultra seviye virtualization eklenmis bir malware’in icerigini bulamiyor, sadece VMP ile packlendigini belirtiyor. VMP ile packlendigini bilmek zaman kazandirir ancak okunabilir sekilde sonuc verecek unpack islemini kolaylastirmaz. dinamik olarak kernel space’de (usermode olmaz cunku vmp kernelmode protection var, hypervisor tercih edilebilir) memory dump alip pe sectionlari incelenebilir ancak bu sefer de virtualized instructionlar ile karsi karsiya kaliyorsun. (devirt etmeden oku okuyabiliyorsan…)

IDA Pro bile analiz ederken hata veriyor, duzeltilebiliyor ama disasm sonucu hep yanlis.

Umarim anlattiklarim aciklayici olmustur.
Ben unpack edince kaynak kodu gözüküyor VMProtect 3.94'de

1757108009656.png

3.9.4 ile denedim aynı sonuç ve DIE VMProtect'li demedi buna.
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.
1757108110104.png


Kısacası sende İngilizce tabiriyle "skill issue" var. İyi bir tersine mühendisçi değilsin.
 
Son düzenleme:
Ben unpack edince kaynak kodu gözüküyor VMProtect 3.94'de

Eki Görüntüle 2569692
3.9.4 ile denedim aynı sonuç ve DIE VMProtect'li demedi buna.
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.
Eki Görüntüle 2569694

Kısacası sende İngilizce tabiriyle "skill issue" var. İyi bir tersine mühendisçi değilsin.


1757165109290.png

^ Tam olarak "I know everything" asamasindasin.

1757167406751.png


1. Ben denedim stringleri koruyor hem de cok iyi.
2. Cok fazla tespit etme faktoru var DiE icinde de gozuktugu uzere. Ana faktor stringler degil.
3. Olay stringlerde degil zaten, fonksiyonlarda.
4. VMP dogru kullanildiginda birak statik analizi, dinamik analizde bile stringleri rahatca bulamazsin.

C# .NET 9 projesi icin VMProtect 3.9.6 kullanildi ve sozde kolay bir sekilde unpackleyen unpackerin calismadi.

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.


denemek istersen discord adini iletebilirsin, sample gondereyim durumu anlayacaksin.

Tabii ki VMP basilan bir yazilimi unpackleyememem bir skill issue ancak bunu sadece ben degil, sen dahil dunyadaki reverse engineerlarin neredeyse hicbiri yapamiyor. Basarabilecek kisinin epey fazla zaman harcamasi ve kafayi kirmasi gerek. Bu kadar zaman harcamasi unpacker yazacagi anlamina gelmez sadece uzerinde ugrastigi yazilimi unpack edebilmesi anlamina gelir ve belirttigim gibi bunu yapabilecek insan sayisi cok az.

Ben her gun IDA basindayim isim ve meslegim geregi. Bilgi birikimimle bunlari belirtiyorum.
 
Eki Görüntüle 2569940
^ Tam olarak "I know everything" asamasindasin.

Eki Görüntüle 2569974

1. Ben denedim stringleri koruyor hem de cok iyi.
2. Cok fazla tespit etme faktoru var DiE icinde de gozuktugu uzere. Ana faktor stringler degil.
3. Olay stringlerde degil zaten, fonksiyonlarda.
4. VMP dogru kullanildiginda birak statik analizi, dinamik analizde bile stringleri rahatca bulamazsin.

C# .NET 9 projesi icin VMProtect 3.9.6 kullanildi ve sozde kolay bir sekilde unpackleyen unpackerin calismadi.

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.


denemek istersen discord adini iletebilirsin, sample gondereyim durumu anlayacaksin.

Tabii ki VMP basilan bir yazilimi unpackleyememem bir skill issue ancak bunu sadece ben degil, sen dahil dunyadaki reverse engineerlarin neredeyse hicbiri yapamiyor. Basarabilecek kisinin epey fazla zaman harcamasi ve kafayi kirmasi gerek. Bu kadar zaman harcamasi unpacker yazacagi anlamina gelmez sadece uzerinde ugrastigi yazilimi unpack edebilmesi anlamina gelir ve belirttigim gibi bunu yapabilecek insan sayisi cok az.

Ben her gun IDA basindayim isim ve meslegim geregi. Bilgi birikimimle bunlari belirtiyorum.

Kardeşim bu dediğin I know everything aşaması şeyi yani Dunning-Kruger efekti. Birde bu program stringleri koruyamıyorsa antivirüslerden nasıl kaçacak ve nasıl webhook'u gizleyecek Hala saçmalıyorsun. Kendini bir şey bilmiş sanıyorsun ve bu arada discord'u seve seve vererim ama modlar silebilir yazıyı. O yüzden github Hydra Dragon Antivirus'e bak derim. Stringleri normalde koruyor ama çok zayıf şekilde koruyor ayrıca bu duruma itiraz eden tek ben değilim bir adam daha sanıldığı kadar zor değil diyor bu Technopat yazıda hatta bu konuda. Fakat karşı taraf vermediği için öyle kalmış. Bende eskiden imkansız falan diye kafamda büyütüyordum hatta yazılımcı çevrem bu yazılımı kullanmayı düşünmüştü. Fakat bir süre sonra string koruması gidince şaşırdılar. String koruması en önemlisidir obfuscator'da çünkü virüs imzası eşleşmemesi için gereklidir. Fonksiyon isimlerini değiştirmek kolay fakat stringleri obfuscate etmekte mümkün. İyi bir yazılımcı için kıramayacağı bir şey yoktur. Birde tek bunu keşfetmedim. user32.dll sembollerden seçip sonrasında programı biraz ileri alıp çalıştırıp x64dbg ile. Sonrasında MessageBoxW'yi bulup oraya breakpoint atınca kodun her yerinde olan ve anti patchleme yazısı çıkıyor. Bayraklara falan her şeye bakıyor bu.
1757169609444.png
Bunları tek tek elinle değiştirirsen aşama kat ediyorsun.
 
Kardeşim bu dediğin I know everything aşaması şeyi yani Dunning-Kruger efekti. Birde bu program stringleri koruyamıyorsa antivirüslerden nasıl kaçacak ve nasıl webhook'u gizleyecek Hala saçmalıyorsun. Kendini bir şey bilmiş sanıyorsun ve bu arada discord'u seve seve vererim ama modlar silebilir yazıyı. O yüzden github Hydra Dragon Antivirus'e bak derim. Stringleri normalde koruyor ama çok zayıf şekilde koruyor ayrıca bu duruma itiraz eden tek ben değilim bir adam daha sanıldığı kadar zor değil diyor bu Technopat yazıda hatta bu konuda. Fakat karşı taraf vermediği için öyle kalmış. Bende eskiden imkansız falan diye kafamda büyütüyordum hatta yazılımcı çevrem bu yazılımı kullanmayı düşünmüştü. Fakat bir süre sonra string koruması gidince şaşırdılar. String koruması en önemlisidir obfuscator'da çünkü virüs imzası eşleşmemesi için gereklidir. Fonksiyon isimlerini değiştirmek kolay fakat stringleri obfuscate etmekte mümkün. İyi bir yazılımcı için kıramayacağı bir şey yoktur. Birde tek bunu keşfetmedim. user32.dll sembollerden seçip sonrasında programı biraz ileri alıp çalıştırıp x64dbg ile. Sonrasında MessageBoxW'yi bulup oraya breakpoint atınca kodun her yerinde olan ve anti patchleme yazısı çıkıyor. Bayraklara falan her şeye bakıyor bu.Eki Görüntüle 2570018 Bunları tek tek elinle değiştirirsen aşama kat ediyorsun.
Dunning kruger efekti yazarak bu gorseli buldum zaten :) I know everything asamasindasin dedim ki oradasin.

Github hesaplarini ve commitlerini inceledim bastan sona pastersin. Github bile dogru kullanamiyorsun.

x64dbg ile analiz etmek bile asiri zor. Antidebugger sistemi oyle basit bir sey degil, kernelde calisiyor.

Simdi baslarsin titanhide falan diye, hayir son surumu debuglayamazsin titanhide ile.

debuglayabilsen bile x64dbg ile her instructionu tek tek gecemezsin cunku vm ceviriyor kendi asm instruction setini. inceleyemezsin kisaca arada cok fazla layer var. Yazdigimi tekrar oku, imkansiz demedim imkansiza yakin dedim. MessageBoxW (veya MessageBoxA) syscall hooklasan bile ise yaramayacak ne alaka? MessageBoxW kullanmiyor veya import etmiyor ki uygulama? Ezbere konusuyorsun ne dedigini bilmiyorsun. Importlari fixlemeden neye gore HWBP yapacaksin? incele diyorsun oraya breakpoint falan koyamazsin dostum cunku nerde oldugunu bilmiyorsun direkt winapi fonksiyonuna koyarsan bile breakpointi retaddr spooflandigi icin fayda saglamayacak. relocs fix + import table rebuild gerekiyor dedigin sey icin ama bu bile cok yetersiz. Sen saniyorsun ki direkt fonksiyon isimlerini degistiriyor. Fonksiyon isimlerini degil assembly instructionlarini degistiriyor.

Bunları tek tek elinle değiştirirsen aşama kat ediyorsun.
Reverseleme bilgin cok zayif. Uzgunum.
 

Technopat Haberler

Yeni konular

Geri
Yukarı