LIEF: Library to Instrument Executable Formats Table of Contents

LIEF: Library to Instrument Executable Formats Table of Contents

Romain Thomas - [email protected] LIEF: Library to Instrument Executable Formats Table of Contents Introduction Architecture Demo Conclusion About I Romain Thomas - Security engineer at Quarkslab I Working on obfuscation and software protection, reverse engineering I Contributor to the Triton project (https://triton.quarkslab.com) Layers of information Tools Format pefile, readelf, otool, LLVM . ELF, PE, Mach-O, COFF, XCOFF... Content Disassembler: LLVM, IDA, diStorm . x86, ARM, MIPS, AArch64 ... Behavior Intel PIN, Qemu, DBI, emulator, sandbox, debugger gdb, Triton . ... Figure: Layer of information in an executable Howto? I Get assembly code? I Get symbols? I Get imported functions? Executable File Formats in a Nutshell Executable File Formats in a Nutshell Executable file format gives information such as: I First instruction address to execute. I Libraries used I Target architecture (x86, ARM ...) Executable File Formats in a Nutshell The three mainstream formats: I ELF: Linux, Android . I PE: Windows I Mach-O: OS-X, iOS, . Modification Format modifications can be a starting point to: I Packing I Watermarking I Hooking: Perform interposition on functions I Persistent code injection I Malware analysis (static unpacking . ) Purpose of LIEF I Provide a cross-platform library to parse ELF, PE and Mach-O formats I Abstract common features from the different formats (section, header, entry point, symbols . ) I Enable format modifications I Provide an API for different languages (Python, C++, C . ) 1 import lief 2 binary= lief.parse("C:\\Windows\\explorer.exe") #PE 3 asm= binary.get_section(".text") Howto? (answers) Get assembly code? Howto? (answers) Get assembly code? 1 import lief 2 binary= lief.parse("C:\\Windows\\explorer.exe") #PE 3 asm= binary.get_section(".text") 1 import lief 2 binary= lief.parse("/bin/ls") #ELF 3 for symbol in binary.symbols: 4 print(symbols) Howto? (answers) Get symbols? Howto? (answers) Get symbols? 1 import lief 2 binary= lief.parse("/bin/ls") #ELF 3 for symbol in binary.symbols: 4 print(symbols) 1 import lief 2 binary= lief.parse("/usr/lib/libc++abi.dylib") # Mach-O 3 for function in binary.imported_functions: 4 print(function) Howto? (answers) Get imported functions? Howto? (answers) Get imported functions? 1 import lief 2 binary= lief.parse("/usr/lib/libc++abi.dylib") # Mach-O 3 for function in binary.imported_functions: 4 print(function) Table of Contents Introduction Architecture Demo Conclusion Overview LIEF ELF PE Mach-O ELF::Binary ELF::Parser ELF::Builder PE::Binary PE::Parser PE::Builder MACHO::Binary MACHO::Parser MACHO::Builder Abstract layer C++ Python / C Figure: Global architecture Modification process LIEF object LIEF object Header Header Sections Sections .text .text Modification .data .data .new section Segments LOAD Segments LOAD DYNAMIC DYNAMIC Parser Builder /bin/ls /bin/ls (modified) Table of Contents Introduction Architecture Demo Conclusion Demo! Table of Contents Introduction Architecture Demo Conclusion Roadmap Some ideas for next versions: I Graphical User Interface (Work in progress) I Handle the OAT format (subset of the ELF format) I PE API to hook functions I PE/Mach-O fuzzer I Handle the Dwarf format Missing feature or bug? [email protected] or Open an issue / pull request I Source code is available on GitHub: https://github.com/lief-project (Apache 2.0 license) I Website: https://lief.quarkslab.com [email protected] or Open an issue / pull request I Source code is available on GitHub: https://github.com/lief-project (Apache 2.0 license) I Website: https://lief.quarkslab.com Missing feature or bug? I Source code is available on GitHub: https://github.com/lief-project (Apache 2.0 license) I Website: https://lief.quarkslab.com Missing feature or bug? [email protected] or Open an issue / pull request Thank you!.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    27 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us