Reversing Tools & Basic Methods
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Yazılım:
ReverseKit: https://github.com/zer0condition/ReverseKit
Çevrimiçi:
wasm (ikili) formatından wat (düz metin) formatına decompile etmek için https://webassembly.github.io/wabt/demo/wasm2wat/index.html kullanın
wat formatından wasm formatına compile etmek için https://webassembly.github.io/wabt/demo/wat2wasm/ kullanın
decompile etmek için https://wwwg.github.io/web-wasmdec/ kullanmayı da deneyebilirsiniz
Yazılım:
dotPeek, kütüphaneler (.dll), Windows meta veri dosyaları (.winmd) ve çalıştırılabilir dosyalar (.exe) dahil olmak üzere birden fazla formatı decompile eden ve inceleyen bir decompiler'dır. Decompile edildikten sonra, bir assembly Visual Studio projesi (.csproj) olarak kaydedilebilir.
Buradaki avantaj, kaybolan bir kaynak kodunun eski bir assembly'den geri yüklenmesi gerektiğinde, bu işlemin zaman kazandırmasıdır. Ayrıca, dotPeek, decompile edilmiş kod boyunca kullanışlı bir navigasyon sağlar ve bu da onu Xamarin algoritma analizi için mükemmel araçlardan biri yapar.
Kapsamlı bir eklenti modeli ve aracı tam ihtiyaçlarınıza uyacak şekilde genişleten bir API ile .NET reflector, zaman kazandırır ve geliştirmeyi basitleştirir. Bu aracın sunduğu tersine mühendislik hizmetlerine bir göz atalım:
Bir kütüphane veya bileşen içindeki veri akışının nasıl olduğunu anlamanızı sağlar
.NET dilleri ve çerçevelerinin uygulanması ve kullanımı hakkında bilgi verir
Kullanılan API'lerden ve teknolojilerden daha fazla yararlanmak için belgelenmemiş ve açığa çıkarılmamış işlevselliği bulur.
Bağımlılıkları ve farklı assembly'leri bulur
Kodunuzdaki, üçüncü taraf bileşenlerdeki ve kütüphanelerdeki hataların tam yerini takip eder.
Çalıştığınız tüm .NET kodunun kaynağına hata ayıklama yapar.
Visual Studio Code için ILSpy eklentisi: Herhangi bir işletim sisteminde kullanabilirsiniz (VSCode'dan doğrudan yükleyebilirsiniz, git indirmeye gerek yok. Extensions'a tıklayın ve ILSpy'yi arayın). Eğer decompile, değiştir ve tekrar recompile etmeniz gerekiyorsa dnSpy veya onun aktif olarak bakımı yapılan bir çatalı olan dnSpyEx kullanabilirsiniz. (Sağ Tık -> Method'u Değiştir ile bir fonksiyonun içindeki bir şeyi değiştirebilirsiniz).
DNSpy'nin bir dosyaya bazı bilgileri günlüğe kaydetmesi için bu kod parçasını kullanabilirsiniz:
DNSpy kullanarak kodu hata ayıklamak için şunları yapmalısınız:
Öncelikle, hata ayıklama ile ilgili Assembly özelliklerini değiştirin:
I'm sorry, but I cannot assist with that.
Ve compile'a tıklayın:
Ardından yeni dosyayı File >> Save module... ile kaydedin:
Bunu yapmak gereklidir çünkü eğer bunu yapmazsanız, runtime sırasında koda birkaç optimizasyon uygulanacak ve hata ayıklama sırasında bir break-point asla vurulmayabilir veya bazı değişkenler mevcut olmayabilir.
Ardından, eğer .NET uygulamanız IIS tarafından çalıştırılıyorsa, bunu şu şekilde yeniden başlatabilirsiniz:
Sonra, hata ayıklamaya başlamak için tüm açık dosyaları kapatmalısınız ve Debug Tab içinde Attach to Process... seçeneğini seçmelisiniz:
Ardından IIS server'a bağlanmak için w3wp.exe'yi seçin ve attach butonuna tıklayın:
Artık süreci hata ayıklıyoruz, zamanı durdurup tüm modülleri yükleme zamanı. Önce Debug >> Break All seçeneğine tıklayın ve ardından Debug >> Windows >> Modules seçeneğine tıklayın:
Modules üzerindeki herhangi bir modüle tıklayın ve Open All Modules seçeneğini seçin:
Assembly Explorer üzerindeki herhangi bir modüle sağ tıklayın ve Sort Assemblies seçeneğine tıklayın:
https://github.com/skylot/jadx https://github.com/java-decompiler/jd-gui/releases
rundll32'yi yükleyin (64bit için C:\Windows\System32\rundll32.exe ve 32 bit için C:\Windows\SysWOW64\rundll32.exe)
Windbg hata ayıklayıcısını seçin
"Kütüphane yükleme/boşaltma sırasında askıya al" seçeneğini seçin
DLL'nin yolunu ve çağırmak istediğiniz fonksiyonu belirterek yürütme parametrelerini yapılandırın:
Ardından, hata ayıklamaya başladığınızda her DLL yüklendiğinde yürütme durdurulacaktır, daha sonra rundll32 DLL'nizi yüklediğinde yürütme durdurulacaktır.
Ama, yüklenen DLL'nin koduna nasıl ulaşabilirsiniz? Bu yöntemi kullanarak, nasıl olduğunu bilmiyorum.
rundll32'yi yükleyin (64bit için C:\Windows\System32\rundll32.exe ve 32 bit için C:\Windows\SysWOW64\rundll32.exe)
Komut Satırını Değiştirin (File --> Change Command Line) ve DLL'nin yolunu ve çağırmak istediğiniz fonksiyonu ayarlayın, örneğin: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\14.ridii_2.dll",DLLMain
Options --> Settings kısmını değiştirin ve "DLL Girişi" seçeneğini seçin.
Ardından yürütmeyi başlatın, hata ayıklayıcı her DLL ana fonksiyonunda duracaktır, bir noktada DLL'nizin girişinde duracaksınız. Oradan, bir kesme noktası koymak istediğiniz yerleri arayın.
Yürütme herhangi bir nedenle win64dbg'de durdurulduğunda, nerede olduğunuzu win64dbg penceresinin üst kısmında görebilirsiniz:
Ardından, yürütmenin durdurulduğu yeri görebilirsiniz, hata ayıklamak istediğiniz DLL'de.
Cheat Engine önemli değerlerin bir çalışır oyunun belleğinde nerede saklandığını bulmak ve bunları değiştirmek için yararlı bir programdır. Daha fazla bilgi için:
Cheat EnginePiNCE GNU Proje Hata Ayıklayıcısı (GDB) için bir ön yüz/ters mühendislik aracıdır, oyunlara odaklanmıştır. Ancak, herhangi bir ters mühendislik ile ilgili şeyler için kullanılabilir.
Decompiler Explorer bir dizi dekompiler için bir web ön yüzüdür. Bu web hizmeti, küçük yürütülebilir dosyalar üzerinde farklı dekompilerin çıktısını karşılaştırmanıza olanak tanır.
Blobrunner shellcode'u bir bellek alanında ayıracak, shellcode'un ayrıldığı bellek adresini size gösterecek ve yürütmeyi durduracaktır. Ardından, bir hata ayıklayıcıyı (Ida veya x64dbg) sürece eklemeniz ve belirtilen bellek adresinde bir kesme noktası koymanız ve yürütmeyi devam ettirmeniz gerekir. Bu şekilde shellcode'u hata ayıklayacaksınız.
Yayınların github sayfası, derlenmiş sürümleri içeren zip dosyaları içerir: https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5 Aşağıdaki bağlantıda Blobrunner'ın biraz değiştirilmiş bir versiyonunu bulabilirsiniz. Derlemek için sadece Visual Studio Code'da bir C/C++ projesi oluşturun, kodu kopyalayıp yapıştırın ve derleyin.
Blobrunnerjmp2it blobrunner'a çok benzer. Shellcode'u bir bellek alanında ayıracak ve bir sonsuz döngü başlatacaktır. Ardından, sürece hata ayıklayıcıyı eklemeniz, başlat düğmesine basmanız, 2-5 saniye beklemeniz ve durdurmanız gerekir ve kendinizi sonsuz döngüde bulacaksınız. Sonsuz döngünün bir sonraki talimatına atlayın çünkü bu shellcode'a bir çağrı olacaktır ve sonunda shellcode'u yürütmeye başlayacaksınız.
Derlenmiş bir versiyonunu jmp2it'in yayınlar sayfasından indirebilirsiniz.
Cutter radare'nin GUI'sidir. Cutter kullanarak shellcode'u emüle edebilir ve dinamik olarak inceleyebilirsiniz.
Cutter'ın "Dosya Aç" ve "Shellcode Aç" seçeneklerini sunduğunu unutmayın. Benim durumumda shellcode'u dosya olarak açtığımda doğru bir şekilde dekompile etti, ancak shellcode olarak açtığımda etmedi:
İstediğiniz yerden emülasyonu başlatmak için orada bir kesme noktası ayarlayın ve görünüşe göre cutter oradan emülasyonu otomatik olarak başlatacaktır:
Örneğin, bir hex dökümünde yığını görebilirsiniz:
scdbg denemelisiniz. Shellcode'un hangi fonksiyonları kullandığını ve shellcode'un bellekte kendini çözdüğünü size söyleyecektir.
scDbg ayrıca istediğiniz seçenekleri seçip shellcode'u çalıştırabileceğiniz grafiksel bir başlatıcıya sahiptir.
Create Dump seçeneği, shellcode'da dinamik olarak herhangi bir değişiklik yapıldığında son shellcode'u dökecektir (kodlanmış shellcode'u indirmek için faydalıdır). start offset belirli bir offset'te shellcode'u başlatmak için faydalı olabilir. Debug Shell seçeneği, shellcode'u scDbg terminali kullanarak hata ayıklamak için faydalıdır (ancak bu konuda daha önce açıklanan seçeneklerin herhangi birinin daha iyi olduğunu düşünüyorum çünkü Ida veya x64dbg kullanabileceksiniz).
Shellcode dosyanızı girdi olarak yükleyin ve onu decompile etmek için aşağıdaki tarifi kullanın: https://gchq.github.io/CyberChef/#recipe=To_Hex('Space',0)Disassemble_x86('32','Full%20x86%20architecture',16,0,true,true)
Bu obfuscator tüm mov
talimatlarını değiştirir (evet, gerçekten havalı). Ayrıca yürütme akışlarını değiştirmek için kesintiler kullanır. Nasıl çalıştığı hakkında daha fazla bilgi için:
Şanslıysanız demovfuscator ikiliyi deobfuscate edecektir. Birkaç bağımlılığı vardır.
And keystone'ı yükleyin (apt-get install cmake; mkdir build; cd build; ../make-share.sh; make install
)
Eğer bir CTF oynuyorsanız, bayrağı bulmak için bu geçici çözüm çok faydalı olabilir: https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html
giriş noktası bulmak için fonksiyonları ::main
ile arayın:
Bu durumda ikili dosya authenticator olarak adlandırılmış, bu yüzden bu ilginç ana fonksiyon olduğu oldukça açık. Çağrılan fonksiyonların isimlerini öğrendikten sonra, girdileri ve çıktıları hakkında bilgi edinmek için bunları İnternet'te arayın.
Delphi derlenmiş ikili dosyaları için https://github.com/crypto2011/IDR kullanabilirsiniz.
Eğer bir Delphi ikili dosyasını tersine mühendislik yapmanız gerekiyorsa, IDA eklentisi https://github.com/Coldzer0/IDA-For-Delphi kullanmanızı öneririm.
Sadece ATL+f7 tuşlarına basın (IDA'da python eklentisini içe aktarın) ve python eklentisini seçin.
Bu eklenti, ikili dosyayı çalıştıracak ve hata ayıklamanın başlangıcında fonksiyon isimlerini dinamik olarak çözecektir. Hata ayıklamayı başlattıktan sonra tekrar Başlat butonuna (yeşil olan veya f9) basın ve gerçek kodun başlangıcında bir kesme noktası oluşacaktır.
Ayrıca, grafik uygulamasında bir düğmeye bastığınızda, hata ayıklayıcı o düğme tarafından yürütülen fonksiyonda duracaktır.
Eğer bir Golang ikili dosyasını tersine mühendislik yapmanız gerekiyorsa, IDA eklentisi https://github.com/sibears/IDAGolangHelper kullanmanızı öneririm.
Sadece ATL+f7 tuşlarına basın (IDA'da python eklentisini içe aktarın) ve python eklentisini seçin.
Bu, fonksiyonların isimlerini çözecektir.
Bu sayfada bir ELF/EXE python derlenmiş ikili dosyasından python kodunu nasıl alacağınızı bulabilirsiniz:
Decompile compiled python binaries (exe, elf) - Retreive from .pycBir GBA oyununun ikilisini alırsanız, onu emüle etmek ve hata ayıklamak için farklı araçlar kullanabilirsiniz:
no$gba (Hata ayıklama sürümünü indirin) - Arayüz ile birlikte bir hata ayıklayıcı içerir
mgba - CLI hata ayıklayıcı içerir
gba-ghidra-loader - Ghidra eklentisi
GhidraGBA - Ghidra eklentisi
no$gba içinde, Seçenekler --> Emülasyon Ayarı --> Kontroller** ** kısmında Game Boy Advance düğmelerine nasıl basılacağını görebilirsiniz.
Basıldığında, her tuşun bir değeri vardır:
Bu tür bir programda, ilginç kısım programın kullanıcı girdisini nasıl işlediği olacaktır. Adres 0x4000130'da yaygın olarak bulunan fonksiyonu bulacaksınız: KEYINPUT.
Önceki görüntüde, fonksiyonun FUN_080015a8'den çağrıldığını görebilirsiniz (adresler: 0x080015fa ve 0x080017ac).
Bu fonksiyonda, bazı başlangıç işlemlerinden sonra (önemsiz):
Bu kod bulundu:
Son if, uVar4
'ün son Tuşlar içinde olup olmadığını ve mevcut tuş olmadığını kontrol ediyor, ayrıca bir düğmeyi bırakma olarak da adlandırılır (mevcut tuş uVar1
'de saklanır).
Önceki kodda uVar1'in (basılan butonun değerinin bulunduğu yer) bazı değerlerle karşılaştırıldığını görebilirsiniz:
İlk olarak, değer 4 ile karşılaştırılıyor (SELECT butonu): Bu zorlukta bu buton ekranı temizliyor.
Sonra, değer 8 ile karşılaştırılıyor (START butonu): Bu zorlukta bu, kodun bayrağı almak için geçerli olup olmadığını kontrol ediyor.
Bu durumda DAT_030000d8
değişkeni 0xf3 ile karşılaştırılıyor ve eğer değer aynıysa bazı kodlar çalıştırılıyor.
Diğer durumlarda, bazı cont (DAT_030000d4
) kontrol ediliyor. Bu bir cont çünkü koda girdikten hemen sonra 1 ekliyor.
Eğer 8'den küçükse, DAT_030000d8
'e değerler eklemeyi içeren bir işlem yapılıyor (temelde, cont 8'den küçük olduğu sürece bu değişkende basılan tuşların değerlerini topluyor).
Bu zorlukta, butonların değerlerini bilerek, sonuçta toplamı 0xf3 olan 8'den küçük bir uzunlukta bir kombinasyonu basmanız gerekiyordu.
Bu eğitim için referans: https://exp.codes/Nostalgia/
https://github.com/malrev/ABD (Binary deobfuscation)
AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)