The complexities introduced by compiler optimization have long stood as a major obstacle in the field of binary analysis and reverse engineering. The function inlining optimization, in particular, adds significant difficulty to the ever so important task of function recognition by replacing function calls with the entire body of the callee function, mixing the code of multiple functions in one. Existing state of the art tool BINO is effective at identifying inlined functions at a basic block granularity, but unable to identify exactly which instructions belong to each function and to precisely deduce inlined function boundaries. This thesis presents Highliner, a novel approach to extend BINO and refine its output to perform inlined function recognition at instruction granularity. Highliner takes as input the basic blocks generated by function inlining and classifies each instruction as either inlined or not inlined. We approach such problem as a sequence tagging problem typical of the field of natural language processing and implement a learning based technique involving instruction embedding and recurrent neural networks. We bulk compile a dataset of open source projects with different optimizations and use DWARF debug information standard to build a dataset of labelled sequences of inlined instructions for supervised learning. We use the obtained dataset to train, validate and test a seq2seq architecture where instructions are encoded through pre-trained assembly language transformer Palmtree and decoded through a network of stacked LSTMs. When evaluated as a binary classifier, Highliner achieves an F1 score of 98.36% on inlined instructions and an F1 score of 93.11% on non-inlined instructions, with an overall accuracy of 97.35%. In addition, when specifically tested on the task of recognizing function boundaries, Highliner achieves an accuracy of 88% on initial boundaries and of 94% on final boundaries, for an overall accuracy of 84%.

Le complessità introdotte dalle ottimizzazioni dei compilatori hanno rappresentato per lungo tempo uno dei principali ostacoli nel campo dell'analisi e del reverse engineering di codice binario. L'ottimizzazione di inlining di funzione, in particolare, aggiunge una difficoltà significativa al sempre rilevante problema del riconoscimento di funzioni, sostituendo le chiamate a funzione con l'intero corpo della funzione chiamata e mischiando il codice di multiple funzioni in una sola. L'attuale tool allo stato dell'arte BINO è efficace nell'identificare le funzioni inline ad una granularità di basic block, ma non è in grado di identificare esattamente quali istruzioni appartengono a ciascuna funzione e di dedurre con precisione i confini della funzione inline. Questa tesi presenta Highliner, un approccio innovativo per estendere BINO e raffinare il suo output per effettuare il riconoscimento di funzioni inline alla granularità delle istruzioni. Highliner prende in input i basic block generati dall'inlining di funzione e classifica ogni istruzione come inline o non inline. Approcciamo questo problema come un problema di sequence tagging, tipico del campo del natural language processing ed implementiamo una tecnica di machine learning basata sull'embedding delle istruzioni e sulle reti neurali ricorrenti. Compiliamo un dataset di progetti open source con diverse ottimizzazioni e utiliziamo lo standard di informazioni di debug DWARF per costruire un dataset di sequenze etichettate di istruzioni inline per allenamento supervisionato. Utilizziamo il dataset così ottenuto per allenare, validare e testare un'architettura seq2seq dove le istruzioni sono codificate attraverso Palmtree, un trasformatore di linguaggio assembly pre-allenxato, e decodificate attraverso una rete di LSTM sovrapposte. Quando valutato come classificatore binario, Highliner raggiunge un punteggio F1 di 98.36% su istruzioni inline e un punteggio F1 di 93.11% sulle istruzioni non inline, con una precisione generale di 97.35%. Inoltre, quanto testato specificamente riguardo il problema del riconoscimento dei confini di funzione, Highliner raggiunge una precisione di 88% sui confini iniziali e di 94% sui confini finali, per una precisione complessiva di 84%.

Highliner: seq2seq architectures for instruction level inlined identification in optimized binaries

Dall'AGLIO, LORENZO
2022/2023

Abstract

The complexities introduced by compiler optimization have long stood as a major obstacle in the field of binary analysis and reverse engineering. The function inlining optimization, in particular, adds significant difficulty to the ever so important task of function recognition by replacing function calls with the entire body of the callee function, mixing the code of multiple functions in one. Existing state of the art tool BINO is effective at identifying inlined functions at a basic block granularity, but unable to identify exactly which instructions belong to each function and to precisely deduce inlined function boundaries. This thesis presents Highliner, a novel approach to extend BINO and refine its output to perform inlined function recognition at instruction granularity. Highliner takes as input the basic blocks generated by function inlining and classifies each instruction as either inlined or not inlined. We approach such problem as a sequence tagging problem typical of the field of natural language processing and implement a learning based technique involving instruction embedding and recurrent neural networks. We bulk compile a dataset of open source projects with different optimizations and use DWARF debug information standard to build a dataset of labelled sequences of inlined instructions for supervised learning. We use the obtained dataset to train, validate and test a seq2seq architecture where instructions are encoded through pre-trained assembly language transformer Palmtree and decoded through a network of stacked LSTMs. When evaluated as a binary classifier, Highliner achieves an F1 score of 98.36% on inlined instructions and an F1 score of 93.11% on non-inlined instructions, with an overall accuracy of 97.35%. In addition, when specifically tested on the task of recognizing function boundaries, Highliner achieves an accuracy of 88% on initial boundaries and of 94% on final boundaries, for an overall accuracy of 84%.
BINOSI, LORENZO
ZANERO, STEFANO
ING - Scuola di Ingegneria Industriale e dell'Informazione
9-apr-2024
2022/2023
Le complessità introdotte dalle ottimizzazioni dei compilatori hanno rappresentato per lungo tempo uno dei principali ostacoli nel campo dell'analisi e del reverse engineering di codice binario. L'ottimizzazione di inlining di funzione, in particolare, aggiunge una difficoltà significativa al sempre rilevante problema del riconoscimento di funzioni, sostituendo le chiamate a funzione con l'intero corpo della funzione chiamata e mischiando il codice di multiple funzioni in una sola. L'attuale tool allo stato dell'arte BINO è efficace nell'identificare le funzioni inline ad una granularità di basic block, ma non è in grado di identificare esattamente quali istruzioni appartengono a ciascuna funzione e di dedurre con precisione i confini della funzione inline. Questa tesi presenta Highliner, un approccio innovativo per estendere BINO e raffinare il suo output per effettuare il riconoscimento di funzioni inline alla granularità delle istruzioni. Highliner prende in input i basic block generati dall'inlining di funzione e classifica ogni istruzione come inline o non inline. Approcciamo questo problema come un problema di sequence tagging, tipico del campo del natural language processing ed implementiamo una tecnica di machine learning basata sull'embedding delle istruzioni e sulle reti neurali ricorrenti. Compiliamo un dataset di progetti open source con diverse ottimizzazioni e utiliziamo lo standard di informazioni di debug DWARF per costruire un dataset di sequenze etichettate di istruzioni inline per allenamento supervisionato. Utilizziamo il dataset così ottenuto per allenare, validare e testare un'architettura seq2seq dove le istruzioni sono codificate attraverso Palmtree, un trasformatore di linguaggio assembly pre-allenxato, e decodificate attraverso una rete di LSTM sovrapposte. Quando valutato come classificatore binario, Highliner raggiunge un punteggio F1 di 98.36% su istruzioni inline e un punteggio F1 di 93.11% sulle istruzioni non inline, con una precisione generale di 97.35%. Inoltre, quanto testato specificamente riguardo il problema del riconoscimento dei confini di funzione, Highliner raggiunge una precisione di 88% sui confini iniziali e di 94% sui confini finali, per una precisione complessiva di 84%.
File allegati
File Dimensione Formato  
Tesi_Highliner_LorenzoDallaglio.pdf

accessibile in internet per tutti

Descrizione: Tesi
Dimensione 2.72 MB
Formato Adobe PDF
2.72 MB Adobe PDF Visualizza/Apri
ExecutiveSummary_Highliner_LorenzoDallaglio.pdf

accessibile in internet per tutti

Descrizione: Executive Summary
Dimensione 700.76 kB
Formato Adobe PDF
700.76 kB Adobe PDF Visualizza/Apri

I documenti in POLITesi sono protetti da copyright e tutti i diritti sono riservati, salvo diversa indicazione.

Utilizza questo identificativo per citare o creare un link a questo documento: https://hdl.handle.net/10589/218294