2 पॉइंट द्वारा GN⁺ 2024-03-18 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • बड़े भाषा मॉडल का उपयोग करने वाली reverse engineering

1. LLM4Decompile और Decompile-Eval का परिचय

  • हमारा लक्ष्य पहला decompilation-विशेष open source LLM बनाना और जारी करना है, और recompilability तथा re-executability पर फोकस करने वाला पहला decompilation benchmark बनाकर उसकी क्षमताओं का मूल्यांकन करना है.
  • AnghaBench से एकत्र किए गए 10 लाख C code samples को GCC का उपयोग करके assembly code में compile किया गया, और इसके आधार पर 4 अरब tokens का assembly-source paired dataset तैयार किया गया.
  • इस dataset का उपयोग करके अग्रणी code LLM DeepSeek-Coder model को fine-tune किया गया, और HumanEval प्रश्नों तथा test samples के आधार पर evaluation benchmark Decompile-Eval बनाया गया.
  • मूल्यांकन दो दृष्टिकोणों से किया जाता है: क्या decompiled code को सफलतापूर्वक फिर से compile किया जा सकता है, और क्या वह test cases के सभी assertions पास कर सकता है.

2. मूल्यांकन परिणाम

मेट्रिक्स

  • recompilability और re-executability decompilation प्रक्रिया की प्रभावशीलता को सत्यापित करने वाले महत्वपूर्ण संकेतक हैं.
  • यदि decompiled code को फिर से compile किया जा सकता है, तो यह syntactic integrity का मजबूत प्रमाण देता है.
  • केवल syntax से यह सुनिश्चित नहीं होता कि कोड semantic रूप से मूल program के समान है, इसलिए re-executability semantic accuracy का मूल्यांकन करने का महत्वपूर्ण मापदंड है.
  • recompilability और re-executability क्रमशः syntax recovery और semantic preservation को दर्शाते हैं, और उपयोगी तथा robust decompilation के लिए ये आवश्यक हैं.

3. मॉडल का उपयोग कैसे करें

  • LLM4Decompile में 1.3 अरब से 33 अरब parameters वाले models शामिल हैं, और ये models Hugging Face पर उपलब्ध हैं.
  • मॉडल उदाहरण: llm4decompile-1.3b, llm4decompile-6.7b, llm4decompile-33b, llm4decompile-6.7b-nsp, llm4decompile-6.7b-uo
  • NSP model को assembly code पर train किया गया है, और इसकी औसत re-executability लगभग 0.17 है.
  • UO model को optimization levels (O0~O3) की पूर्व जानकारी के बिना train किया गया है, और इसकी औसत re-executability लगभग 0.21 है.
  • मॉडल उपयोग का उदाहरण: C code को binary में compile करें, binary को assembly instructions में disassemble करें, और फिर LLM4Decompile का उपयोग करके assembly instructions को C में translate करें.

4. Decompile-Eval का उपयोग कैसे करें

  • डेटा llm4decompile/decompile-eval/decompile-eval.json में JSON list format में संग्रहीत है.
  • single GPU और single process पर evaluation चलाने का तरीका, तथा TGI (10x तेज़ गति, multi-GPU और multi-process support) का उपयोग करने का तरीका उपलब्ध है.

5. प्रगति में

  • LLM4Binary: assembly code और C code पर model को pre-train करने के लिए बड़े dataset को शामिल करने की योजना है.
  • Decompiler-ALL: अधिक languages/platforms और settings को support करने की योजना है (उदाहरण: multiple function decompilation).

6. लाइसेंस

  • MIT लाइसेंस

GN⁺ की राय

  • LLM4Decompile पारंपरिक binary decompilation तरीकों की तुलना में एक अभिनव approach प्रस्तुत करता है, खासकर बड़े भाषा मॉडलों का उपयोग करके अधिक सटीक और अधिक efficient decompilation संभव बनाता है.
  • यह तकनीक software security क्षेत्र में बहुत उपयोगी हो सकती है, और malware analysis या legacy systems के maintenance में मदद कर सकती है.
  • decompiled code की re-executability का पूरी तरह परिपूर्ण न होना यह संकेत देता है कि इस तकनीक में अभी सुधार की गुंजाइश है. वास्तविक वातावरण में accuracy और efficiency बढ़ाने के लिए अतिरिक्त research की आवश्यकता है.
  • समान कार्यक्षमता देने वाले मौजूदा tools में Ghidra या IDA Pro जैसे commercial और open source decompilers शामिल हैं, लेकिन LLM4Decompile machine learning आधारित एक नया approach प्रदान करता है.
  • इस तकनीक को अपनाते समय training data की quality और range, model accuracy, execution speed आदि पर विचार करना चाहिए. इसके लाभों में उच्च accuracy और flexibility शामिल हैं, जबकि बड़े models की complexity और computing resources की मांग इसकी कमियां हो सकती हैं.

1 टिप्पणियां

 
GN⁺ 2024-03-18
Hacker News टिप्पणियाँ
  • "Re-executability" परिणामों पर राय:

    • Re-executability सैमान्टिक शुद्धता को मापने का एक महत्वपूर्ण तरीका है। डीकम्पाइल किए गए परिणाम को फिर से कम्पाइल करके और test cases चलाकर यह आंका जाता है कि प्रोग्राम की लॉजिक और व्यवहार सुरक्षित रहे हैं या नहीं। Recompilability और re-executability क्रमशः syntax recovery और semantic preservation को दर्शाते हैं, और उपयोगी तथा मज़बूत decompilation के लिए ये आवश्यक हैं।
  • डीकम्पाइल किए गए परिणाम की विश्वसनीयता पर सवाल:

    • यह एक गंभीर प्रश्न है कि डीकम्पाइल किया गया परिणाम भरोसेमंद है या नहीं। Recompilation से अलग machine code बन सकता है, और खासकर नए constructs की पहचान करना कठिन हो सकता है जो कोड के मुख्य हिस्से हो सकते हैं। यह जानने की जिज्ञासा है कि generative execution के दौरान क्या LLM किसी विशेष section के लिए confidence report कर सकता है। लगता है कि मानव सत्यापन की आवश्यकता होगी।
  • LLM fine-tuning के लिए बेहतरीन use case:

    • यह LLM fine-tuning के लिए एक शानदार use case है, क्योंकि सार्वजनिक C code से input/output pairs का बड़ा dataset आसानी से बनाया जा सकता है।
  • डेवलपर-आधारित decompilation module training में रुचि:

    • यह सवाल दिलचस्प है कि क्या किसी खास डेवलपर द्वारा बनाए गए applications के आधार पर decompilation module को train किया जा सकता है। उदाहरण के लिए, Super Mario 64 और Zelda 64 पूरी तरह decompile किए जा चुके हैं, और दूसरे N64 games पर भी काम चल रहा है। यह जानने की उत्सुकता है कि क्या उन डेवलपर्स द्वारा बनाए गए दूसरे games को इससे अधिक आसानी से decompile किया जा सकता है।
  • decompiler के आदर्श use case और dataset निर्माण में रुचि:

    • आदर्श decompiler proprietary source code को अप्रासंगिक बना देगा। सार्वजनिक रूप से उपलब्ध C code की प्रचुरता के कारण ASM और source code के जोड़ों वाला dataset आसानी से बनाया जा सकता है।
  • व्यक्तिगत LLM-आधारित decompiler project का परिचय:

    • एक व्यक्ति Python bytecode के लिए LLM-आधारित decompiler विकसित कर रहा है। इस शोध दिशा पर काम करने वाले लोग ज़्यादा नहीं हैं, लेकिन लंबा attention context संभव होने से यह रोचक हो सकता है। यदि कोई सहयोग के लिए टीम जानता हो, तो वह सहयोग में रुचि रखता है।
  • AI-आधारित approaches की non-AI benchmarks से तुलना न होने पर चिंता:

    • अलग-अलग approaches को देखना अच्छा है, लेकिन IDA Pro जैसे non-AI approaches से तुलना के बिना benchmark अर्थहीन हो सकता है। यह देखना रोचक होगा कि यह मॉडल security papers में इस्तेमाल होने वाले metrics पर कैसा प्रदर्शन करता है।
  • recompilability और re-executability scores के बड़े अंतर पर रुचि:

    • GTP4 ने recompilability (syntactically correct) में 8x% हासिल किया, लेकिन re-executability (conceptually correct) में बेहद खराब 1x% दर्ज किया, जिससे उसकी अत्यधिक mimicry क्षमता फिर से सामने आती है।
  • गैर-LLM decompilers के साथ तुलना को लेकर जिज्ञासा:

    • यह जानने की जिज्ञासा है कि IDA, Binja आदि जैसे non-LLM decompilers की तुलना में यह कैसा है। फिलहाल केवल दूसरे LLMs के साथ तुलना ही दिख रही है।
  • 6b model का 33b model से बेहतर प्रदर्शन करने पर जिज्ञासा:

    • यह दिलचस्प है कि 6b model ने 33b model से बेहतर प्रदर्शन किया। यह जिज्ञासा है कि क्या 33b model को अधिक training data की आवश्यकता है। 33b model को लगभग 10 लाख C programs पर pretrain किया गया था, जबकि DeepSeek-Coder को 2 ट्रिलियन tokens पर train किया गया था, जो कई स्तर अधिक data है।