Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
asmsense — Piccolo modello linguistico che assegna nomi e descrive funzioni in binari x86-64 privati delle informazioni di simboli, con un dataset aperto, baseline ed esperimenti di fine-tuning LoRA. | Kitploit
Strumenti/GitHubGitHub/krxi/asmsense
Analisi StaticaReverse EngineeringAnalisi di BinariMachine LearningPaper e RicercaApprendimento e FormazioneReverse Engineering Assistito dall'IARisorse CurateSicurezza dell'IA
GitHubkrxi/asmsense

asmsense

Piccolo modello linguistico che assegna nomi e descrive funzioni in binari x86-64 privati delle informazioni di simboli, con un dataset aperto, baseline ed esperimenti di fine-tuning LoRA.

7104 giorni faNon ancora revisionato
Vedi RepositorySito web

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

asmsense

Inglese · Turco

Un piccolo modello linguistico che esamina una funzione in un binario stripped e le assegna un nome significativo e una breve descrizione.

Stato attuale

Il dataset v4 contiene 228.177 funzioni provenienti da 341 progetti su 5 livelli di ottimizzazione ed è pubblicato su Hugging Face con la configurazione v4. Lo script Ghidra è pronto. Il miglior modello piccolo finora, Qwen3-8B + LoRA addestrato sui dati v5 (prima la descrizione, poi il nome), raggiunge un name F1 di 0,124 sul campione di test fisso v4 e 0,155 su eval_115; il miglior modello grande con contesto delle chiamate ottiene 0,167 sullo stesso campione di test. Vedi Risultati, sezione 6. Il modello scrive una descrizione di una frase in inglese e in turco insieme al nome. L'adapter è su Hugging Face: krxi123/asmsense-qwen3-8b-lora.

Apri un programma stripped in Ghidra o IDA e vedrai centinaia di funzioni chiamate FUN_00401a30. Gran parte del reverse engineering consiste nel comprendere e nominare queste funzioni una per una. Questo progetto mira a insegnare a un modello quel primo passo:

input  (stripped x86-64)             target output
─────────────────────────────         ──────────────────────────────────────────────
movzx  eax, byte ptr [rsi]            name:        adler32_update
lea    rdx, [rdi + rax]               description: Computes the Adler-32 checksum
cmp    rdx, 0xfff1      ← 65521                    over the bytes of a buffer.
...                                   # TR: Tampondaki baytlar üzerinden Adler-32
                                      #     sağlama toplamı hesaplar.

Obiettivo

I grandi modelli general-purpose possono gestire questo compito in una certa misura, ma sono lenti, costosi e ospitati nel cloud. L'obiettivo è rispondere a questa domanda:

Può un modello piccolo addestrato su dati creati ad hoc eguagliare o persino superare i grandi modelli su questo compito—pur girando su un laptop?

Tre livelli vengono valutati sullo stesso set di test:

LivelloModelloRuolo
TettoGrandi modelli aperti (DeepSeek, GLM, MiMo, Gemma, Qwen)Il meglio attualmente ottenibile con modelli off-the-shelf
BaselineModello piccolo aperto, prima del fine-tuningPunto di partenza
Questo progettoLo stesso modello piccolo + LoRA su questo datasetIl contributo del progetto

Come funziona

  1. Generazione dei dati (cikar.py): Progetti C open-source vengono compilati per x86-64 a diversi livelli di ottimizzazione (-O0, -O2). L'assembly di ogni funzione viene estratto. La ground truth—il nome originale della funzione—proviene direttamente dal sorgente, quindi non serve etichettatura manuale. projeler.json registra il commit e i flag del compilatore usati per ogni progetto.

  2. Simulazione di un binario stripped: L'output assomiglia a ciò che Ghidra mostra per una funzione in un binario stripped:

    • le funzioni locali al progetto diventano sub_01a3, e i dati globali diventano dat_0042 (i numeri sono rimescolati, con namespace separati per -O0 e -O2),
    • i target dei branch usano etichette locali alla funzione come loc_1 e loc_2,
    • le chiamate a librerie esterne (memcpy, __stack_chk_fail) e i letterali stringa (; -> "out of memory") rimangono visibili perché sono visibili anche in un binario reale.

    Se il nome reale della funzione appare nel suo stesso assembly—per esempio, in un messaggio di errore—la riga viene marcata sizinti ed esclusa dal set di test.

  3. Valutazione (taban.py): Il modello riceve solo l'assembly e gli viene chiesto di predire un nome. Le predizioni vengono valutate tramite sovrapposizione di token (F1), quindi risposte vicine come crc32_update e update_crc ricevono credito parziale.

loc_6:
movzx   r9d, byte ptr [rsi + rdx]
add     rdi, r9                 ← adler32_z (-O2), as the model sees it
add     rcx, rdi
inc     rdx
cmp     rax, rdx
jne     loc_6

Dati

ProgettiFunzioni (-O0 + -O2)
Addestramentozlib, libpng, sqlite, lua, mbedtls, zstd, libsodium, expat, brotli, jansson, lz4, libyaml, xxhash, cJSON16.804
Test (resistente alla memorizzazione)tomlc17, cyaml, mu_json_x, sajs, picomatch777 → set di valutazione 115

Il dataset è disponibile su Hugging Face: krxi123/asmsense (16.804 esempi di addestramento, 777 esempi di test, il set di valutazione eval_115 e i testi delle licenze). È inoltre replicato su Kaggle: krxiii/asmsense.

Dataset scalato (pipeline v4, 5 livelli di ottimizzazione)

Progetti C con licenza permissiva (MIT, BSD, Apache-2.0, ISC, zlib) selezionati da GitHub con olcekle.py sono stati compilati a -O0/-O1/-O2/-O3/-Os usando cikar_bin.py (dylib reale + strip -x). Gli script di build dei progetti non sono stati eseguiti; i file sono stati compilati singolarmente con clang, e i file o i progetti che non riuscivano a compilare sono stati saltati. Le righe sono state deduplicate tramite hash dell'assembly normalizzato. Le righe con assembly identico ai dati di validazione/test sono state rimosse dall'addestramento, mentre le copie vendored le cui coppie (file, name) comparivano nell'addestramento sono state rimosse da validazione/test. Ogni riga ha un campo lisans.

SplitProgettiRigheFunzioni sorgente uniche
Addestramento290196.11772.179
Validazione2319.7706.667
Test (poco noti, ≤200 stelle, 2024+)2812.2904.685

Su 473 progetti, 352 hanno prodotto righe e 120 non sono riusciti a compilare (codice kernel, embedded o dipendente dalla piattaforma). È stato usato solo clang. I dati sono tenuti fuori da Git e possono essere rigenerati con python3 aday_bul.py e python3 olcekle.py hepsi.

La suddivisione addestramento/test è rigorosamente a livello di progetto: nessuna funzione di un progetto può comparire su entrambi i lati. I progetti di test sono stati scelti deliberatamente tra quelli poco noti (2-190 stelle), e la maggior parte è stata avviata nel 2024-2025, rendendo molto meno probabile che i modelli di grandi dimensioni li abbiano incontrati durante l'addestramento rispetto a una libreria come zlib. Licenze: veri/LISANSLAR.md.

Eccezione nota: codice vendored. Un audit indipendente dei dati v6 rilasciati (rapor/arastirma/V6_VERI_DENETIMI.md, veri_denetim_v6.py) ha confermato che nessun progetto, id o (project, file, name) compare su entrambi i lati, ma il progetto di test snkv incorpora SQLite sotto i propri nomi di file mentre sqlite è un progetto di addestramento. Nel campione di test fisso di 2.000 righe, 217 righe (10,85%) hanno un nome identico a una funzione di addestramento di SQLite. Ogni modello ottiene punteggi più bassi su quelle righe, quindi non gonfiano i risultati; restringono invece il divario tra piccolo e grande (vedi Risultati, sezione 6). Il campione di validazione valid_300 contiene 16 righe simili (5,3%).

Risultati

1. Test resistente alla memorizzazione: 5 progetti poco noti, 115 funzioni

F1 medio sui nomi (1,0 = corrispondenza esatta). Nella colonna "F1 con prefisso rimosso", il prefisso comune del nome di ciascun progetto (cyaml_, mu_, sajs_) viene rimosso da entrambi i lati; il modello non può inferire questo prefisso dall'assembly.

Scarica lo strumento