2 puan yazan GN⁺ 2024-03-18 | 1 yorum | WhatsApp'ta paylaş
  • Büyük dil modelleri kullanılarak yapılan reverse engineering

1. LLM4Decompile ve Decompile-Eval tanıtımı

  • Hedefimiz, decompile işlemine özel ilk açık kaynak LLM'yi oluşturup yayımlamak ve yeniden derlenebilirlik ile yeniden çalıştırılabilirliğe odaklanan ilk decompile benchmark'ını kurarak yeteneklerini değerlendirmektir.
  • AnghaBench'ten toplanan bir milyon C kod örneği GCC kullanılarak assembly koda derlendi ve bununla 4 milyar tokenlık bir assembly-kaynak kod çifti veri kümesi oluşturuldu.
  • Bu veri kümesi kullanılarak önde gelen kod LLM'lerinden DeepSeek-Coder modeli fine-tune edildi ve HumanEval soruları ile test örneklerine dayalı değerlendirme benchmark'ı Decompile-Eval oluşturuldu.
  • Değerlendirme, decompile edilen kodun başarılı şekilde yeniden derlenebilmesi ve test vakalarındaki tüm assertion'ları geçebilmesi olmak üzere iki açıdan yapılır.

2. Değerlendirme sonuçları

Metrikler

  • Yeniden derlenebilirlik ve yeniden çalıştırılabilirlik, decompile sürecinin etkinliğini doğrulayan önemli göstergelerdir.
  • Decompile edilmiş kod yeniden derlenebiliyorsa bu, sözdizimsel bütünlüğe dair güçlü bir kanıt sağlar.
  • Ancak yalnızca sözdizimi, kodun özgün programla anlamsal olarak eşdeğer olduğunu garanti etmez; bu nedenle yeniden çalıştırılabilirlik, anlamsal doğruluğu değerlendiren önemli bir ölçüttür.
  • Yeniden derlenebilirlik ve yeniden çalıştırılabilirlik, sözdiziminin geri kazanımını ve anlamın korunmasını gösterir; bunlar da kullanılabilir ve sağlam bir decompile için vazgeçilmezdir.

3. Modelin kullanım şekli

  • LLM4Decompile, 1,3 milyardan 33 milyara kadar parametreye sahip modeller içerir ve bu modeller Hugging Face üzerinde kullanılabilir.
  • Model örnekleri: llm4decompile-1.3b, llm4decompile-6.7b, llm4decompile-33b, llm4decompile-6.7b-nsp, llm4decompile-6.7b-uo
  • NSP modeli assembly kodla eğitildi ve ortalama yeniden çalıştırılabilirlik yaklaşık 0.17'dir.
  • UO modeli, optimizasyon seviyesi (O0~O3) hakkında ön bilgi olmadan eğitildi ve ortalama yeniden çalıştırılabilirlik yaklaşık 0.21'dir.
  • Model kullanım örneği: C kodunu binary'ye derlemek, binary'yi assembly komutlarına disassemble etmek ve assembly komutlarını LLM4Decompile kullanarak C'ye çevirmek.

4. Decompile-Eval kullanım şekli

  • Veriler llm4decompile/decompile-eval/decompile-eval.json içinde JSON listesi biçiminde saklanır.
  • Tek GPU ve tek süreçte değerlendirme çalıştırma yöntemi ile TGI kullanma yöntemi sunulur (10 kat daha hızlı, çoklu GPU ve çoklu süreç desteği).

5. Devam eden çalışmalar

  • LLM4Binary: assembly kod ve C kodla modeli önceden eğitmek için daha büyük bir veri kümesinin eklenmesi planlanıyor.
  • Decompiler-ALL: daha fazla dil/platform ve ayarı destekleme planı bulunuyor (ör. birden fazla fonksiyonun decompile edilmesi).

6. Lisans

  • MIT lisansı

GN⁺ görüşü

  • LLM4Decompile, mevcut binary decompile yaklaşımlarına kıyasla yenilikçi bir yaklaşım sunuyor; özellikle büyük dil modellerini kullanarak daha doğru ve verimli decompile işlemini mümkün kılıyor.
  • Bu teknoloji yazılım güvenliği alanında çok faydalı olabilir ve zararlı yazılım analizi ya da legacy sistemlerin bakımı için yardımcı olabilir.
  • Decompile edilmiş kodun yeniden çalıştırılabilirliğinin kusursuz olmaması, bu teknolojinin hâlâ geliştirilmeye açık olduğunu gösteriyor. Gerçek ortamlarda doğruluk ve verimliliği artırmak için ek araştırmaya ihtiyaç var.
  • Benzer işlevler sunan mevcut araçlar arasında Ghidra veya IDA Pro gibi ticari ve açık kaynak decompiler'lar bulunsa da LLM4Decompile, makine öğrenmesi temelli yeni bir yaklaşım sunuyor.
  • Bu teknolojiyi benimserken eğitim verisinin kalitesi ve kapsamı, modelin doğruluğu ve çalışma hızı gibi noktalar dikkate alınmalı; sağlayabileceği avantajlar yüksek doğruluk ve esneklikken, büyük modellerin karmaşıklığı ve hesaplama kaynağı gereksinimi dezavantaj olabilir.

1 yorum

 
GN⁺ 2024-03-18
Hacker News yorumları
  • "Yeniden çalıştırılabilirlik" sonuçlarına ilişkin görüş:

    • Yeniden çalıştırılabilirlik, anlamsal doğruluğu ölçmenin önemli bir yoludur. Decompile edilen çıktının yeniden derlenip test vakalarının çalıştırılmasıyla program mantığının ve davranışının korunup korunmadığı değerlendirilir. Yeniden derlenebilirlik ve yeniden çalıştırılabilirlik, sözdizimi kurtarımını ve anlamın korunmasını gösterir; bunlar da kullanılabilir ve sağlam bir decompilation için gereklidir.
  • Decompile edilen çıktının güvenilirliği hakkında soru:

    • Decompile edilen çıktının güvenilir olup olmadığına dair ciddi bir soru var. Yeniden derleme farklı makine kodu üretebilir ve özellikle kodun kritik bölümleri olabilecek yeni yapıları belirlemek zor olabilir. Üretken şekilde çalışırken LLM'in belirli bölümler için güven düzeyini raporlamasının bir yolu olup olmadığı merak ediliyor. Muhtemelen insan doğrulaması gerekecektir.
  • LLM ince ayarı için mükemmel bir kullanım örneği:

    • Açık C kodundan girdi/çıktı çiftlerinden oluşan büyük veri kümeleri kolayca üretilebildiği için bu, LLM ince ayarı için harika bir kullanım örneğidir.
  • Geliştirici temelli decompilation modülü eğitimi konusuna ilgi:

    • Belirli bir geliştiricinin üzerinde çalıştığı uygulamalara dayanarak bir decompilation modülünün eğitilip eğitilemeyeceği ilginç. Örneğin Super Mario 64 ve Zelda 64 tamamen decompile edildi; diğer N64 oyunlarında da çalışmalar sürüyor. Bu geliştiricilerin üzerinde çalıştığı başka oyunların daha kolay decompile edilip edilemeyeceği merak ediliyor.
  • Decompiler'ın ideal kullanım alanı ve veri kümesi üretimine ilgi:

    • İdeal bir decompiler, özel mülkiyetli kaynak kod ihtiyacını ortadan kaldırır. Herkese açık C kodunun bolluğu sayesinde ASM ve kaynak kod çiftlerinden oluşan veri kümeleri kolayca oluşturulabilir.
  • Kişinin yürüttüğü LLM tabanlı decompiler projesinin tanıtımı:

    • Python bytecode'u için LLM tabanlı bir decompiler geliştiriliyor. Bu araştırma yönünde çalışan çok fazla kişi yok, ancak uzun attention context mümkün hale geldikçe bunun ilginçleşebileceği düşünülüyor. Birlikte çalışabilecek bir ekip bilen varsa iş birliğine açık.
  • Yapay zeka tabanlı yaklaşım ve karşılaştırmasız benchmark konusundaki endişe:

    • Çeşitli yaklaşımları görmek güzel, ancak IDA Pro gibi yapay zeka dışı yaklaşımlarla karşılaştırma olmadan benchmark'lar anlamsız olabilir. Bu modelin güvenlik makalelerindeki metriklerde nasıl performans gösterdiğini görmek ilginç olurdu.
  • Yeniden derlenebilirlik ile yeniden çalıştırılabilirlik puanları arasındaki büyük farka ilgi:

    • GPT4, yeniden derlenebilirlikte (sözdizimsel olarak doğru) %80'lerde bir sonuca ulaşırken yeniden çalıştırılabilirlikte (kavramsal olarak doğru) çok kötü, %10'larda bir sonuç aldı; bu da aşırı taklit yeteneğini bir kez daha gösteriyor.
  • LLM olmayan diğer decompiler'larla karşılaştırmaya dair merak:

    • IDA, Binja vb. gibi LLM olmayan decompiler'larla karşılaştırma nasıl acaba? Görünen yalnızca diğer LLM'lerle yapılan karşılaştırmalar.
  • 6b modelin 33b modelden daha iyi performans göstermesine dair merak:

    • 6b modelin 33b modelden daha iyi performans göstermesi ilginç. Acaba 33b modelin daha fazla eğitim verisine mi ihtiyacı var? 33b model yaklaşık 1 milyon C programıyla ön eğitim aldı, ancak DeepSeek-Coder 2 trilyon token ile eğitildi; bu da birkaç kademe daha fazla veri anlamına geliyor.