hitb 2009
play

HITB 2009 Metasm Debugger Analysis of a protection Compiler - PowerPoint PPT Presentation

Binary deprotection with metasm and stuff Alexandre Gazet Yoann Guillot Sogeti / ESEC R&D Sogeti / ESEC R&D alexandre.gazet(at)sogeti.com yoann.guillot(at)sogeti.com HITB 2009 Metasm Debugger Analysis of a protection Compiler


  1. Binary deprotection with metasm and stuff Alexandre Gazet Yoann Guillot Sogeti / ESEC R&D Sogeti / ESEC R&D alexandre.gazet(at)sogeti.com yoann.guillot(at)sogeti.com HITB 2009

  2. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Plan Metasm 1 Debugger Compiler Disassembler Binding Backtracking Analysis of a protection 2 Decompilation 3 A. Gazet, Y. Guillot Binary deprotection with metasm 2/55

  3. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Metasm a pure ruby opensource framework assembler/dissassembler Ia32 (16/32/64bits), mips Even supports cr7 debugger linux, windows, remote compiler/decompiler (more or less :) GUI included ! A. Gazet, Y. Guillot Binary deprotection with metasm 3/55

  4. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Plan Metasm 1 Debugger Compiler Disassembler Binding Backtracking Analysis of a protection 2 Breaking obfuscation Breaking code virtualization Putting the pieces together Conclusion(s) Decompilation 3 A. Gazet, Y. Guillot Binary deprotection with metasm 4/55

  5. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Debugger A. Gazet, Y. Guillot Binary deprotection with metasm 5/55

  6. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Debugger A. Gazet, Y. Guillot Binary deprotection with metasm 6/55

  7. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Features Direct manipulation of the OS primitives sys ptrace WaitForDebugEvent Very fine & low-level control Unified high-level interface Linux, Windows, GDBserver Conditionnal breakpoints, callback. . . A. Gazet, Y. Guillot Binary deprotection with metasm 7/55

  8. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Plan Metasm 1 Debugger Compiler Disassembler Binding Backtracking Analysis of a protection 2 Breaking obfuscation Breaking code virtualization Putting the pieces together Conclusion(s) Decompilation 3 A. Gazet, Y. Guillot Binary deprotection with metasm 8/55

  9. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler C Compiler Rudimentary C compiler x86 only Framework integration easy to leverage Easy to customize e.g. dynamic symbol resolution A. Gazet, Y. Guillot Binary deprotection with metasm 9/55

  10. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Plan Metasm 1 Debugger Compiler Disassembler Binding Backtracking Analysis of a protection 2 Breaking obfuscation Breaking code virtualization Putting the pieces together Conclusion(s) Decompilation 3 A. Gazet, Y. Guillot Binary deprotection with metasm 10/55

  11. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Disassembler A. Gazet, Y. Guillot Binary deprotection with metasm 11/55

  12. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Disassembly The reference: IDA Pro Excellent on unobfuscated binaries Not so useful on protected code No code interpretation Strong hypothesis Hypothesis Both branches are taken on a conditionnal jump Two instructions never overlap A subfunction call returns A. Gazet, Y. Guillot Binary deprotection with metasm 12/55

  13. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Disassembly The reference: IDA Pro Excellent on unobfuscated binaries Not so useful on protected code No code interpretation Strong hypothesis Hypothesis Both branches are taken on a conditionnal jump Two instructions never overlap A subfunction call returns A. Gazet, Y. Guillot Binary deprotection with metasm 12/55

  14. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Hypothesis: all call returns . t e x t :00403 E9F loc 403E9F : ; CODE XREF: .text: loc_40CDEF . t e x t :00403 E9F push ebp . t e x t :00403 EA0 push ecx . t e x t :00403 EA1 push ebp . t e x t :00403 EA2 c a l l sub 40BECD . t e x t :00403 EA7 outsb . t e x t :00403 EA8 edx , cmp esp . t e x t :00403 EAA push esp . t e x t :00403 EAB i n c e s i A. Gazet, Y. Guillot Binary deprotection with metasm 13/55

  15. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Failure . t e x t :0040 BECD sub 40BECD proc near ; CODE XREF: .text :00 . t e x t :0040 BECD cmp eax , ebp . t e x t :0040 BECF [ esp +0] , 1 add dword ptr . t e x t :0040 BED4 t e s t ebx , 1 E2h . t e x t :0040 BEDA 0 Ch retn . t e x t :0040 BEDA sub 40BECD endp A. Gazet, Y. Guillot Binary deprotection with metasm 14/55

  16. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Binding Our solution: Express instruction effects through symbolic expressions. This associates semantics to each instruction. Instruction ADD : r e s = Expression [ [ a [ 0 ] , :& , mask ] , :+ , [ a [ 1 ] , :& , mask ] ] binding [ a [ 0 ] ] = r e s binding [ : e f l a g z ] = Expression [ [ res , :& , mask ] , :==, 0] binding [ : e f l a g s ] = s i g n [ r e s ] binding [ : e f l a g c ] = Expression [ res , : > , mask ] binding [ : e f l a g o ] = Expression [ [ s i g n [ a [ 0 ] ] , :==, s i g n [ a [ 1 ] ] ] , : ’&&’ , [ s i g n [ a [ 0 ] ] , : ’!=’ , s i g n [ r e s ] ] ] A. Gazet, Y. Guillot Binary deprotection with metasm 15/55

  17. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Binding Our solution: Express instruction effects through symbolic expressions. This associates semantics to each instruction. Instruction ADD : r e s = Expression [ [ a [ 0 ] , :& , mask ] , :+ , [ a [ 1 ] , :& , mask ] ] binding [ a [ 0 ] ] = r e s binding [ : e f l a g z ] = Expression [ [ res , :& , mask ] , :==, 0] binding [ : e f l a g s ] = s i g n [ r e s ] binding [ : e f l a g c ] = Expression [ res , : > , mask ] binding [ : e f l a g o ] = Expression [ [ s i g n [ a [ 0 ] ] , :==, s i g n [ a [ 1 ] ] ] , : ’&&’ , [ s i g n [ a [ 0 ] ] , : ’!=’ , s i g n [ r e s ] ] ] A. Gazet, Y. Guillot Binary deprotection with metasm 15/55

  18. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Binding Instruction CALL : binding [ : esp ] = Expression [ : esp , : − , opsz ] binding [ I n d i r e c t i o n [ : esp , 4] ] = d i . next addr For exemple: dword ptr [ esp ] = 0 x403EA7 esp = esp − 4 Instruction RDTSC : binding [ : eax ] = Expression : : Unknown binding [ : edx ] = Expression : : Unknown A. Gazet, Y. Guillot Binary deprotection with metasm 16/55

  19. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Binding Instruction CALL : binding [ : esp ] = Expression [ : esp , : − , opsz ] binding [ I n d i r e c t i o n [ : esp , 4] ] = d i . next addr For exemple: dword ptr [ esp ] = 0 x403EA7 esp = esp − 4 Instruction RDTSC : binding [ : eax ] = Expression : : Unknown binding [ : edx ] = Expression : : Unknown A. Gazet, Y. Guillot Binary deprotection with metasm 16/55

  20. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Binding Instruction CALL : binding [ : esp ] = Expression [ : esp , : − , opsz ] binding [ I n d i r e c t i o n [ : esp , 4] ] = d i . next addr For exemple: dword ptr [ esp ] = 0 x403EA7 esp = esp − 4 Instruction RDTSC : binding [ : eax ] = Expression : : Unknown binding [ : edx ] = Expression : : Unknown A. Gazet, Y. Guillot Binary deprotection with metasm 16/55

  21. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Backtracking, the theory Definition Symbolic emulation by walking the instruction flow backwards. A. Gazet, Y. Guillot Binary deprotection with metasm 17/55

  22. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Backtracking, the facts Execution flow: c a l l loc 40becdh ; @403ea2h e826800000 [ . . . ] cmp eax , ebp ; @40becdh 39e8 [ esp +0] , 1 add dword ptr ; @40becfh 8344240001 t e s t ebx , 1 e2h ; @40bed4h f7c3e2010000 0 ch r e t ; @40bedah c20c00 Backtracing x dword ptr [esp] for 40bedah ret 0ch backtrace 40becfh dword ptr [esp] => dword ptr [esp]+1 1 backtrace up 40becdh->403ea2h dword ptr [esp]+1 2 backtrace 403ea2h dword ptr [esp]+1 => 403ea8h 3 backtrace result: 403ea8h 4 A. Gazet, Y. Guillot Binary deprotection with metasm 18/55

  23. Metasm Debugger Analysis of a protection Compiler Decompilation Disassembler Metasm Result: loc 403e9fh : push ebp ; @403e9fh 55 push ecx ; @403ea0h 51 push ebp ; @403ea1h 55 c a l l loc 40becdh ; @403ea2h e826800000 noreturn db 6 eh ; @403ea7h // Xrefs : 40 bedah loc 403ea8h : cmp edx , esp ; @403ea8h 39e2 push esp ; @403eaah 54 [ . . . ] // Xrefs : 403 ea2h loc 40becdh : cmp eax , ebp ; @40becdh 39e8 add dword ptr [ esp +0] , 1 ; @40becfh 8344240001 t e s t ebx , 1 e2h ; @40bed4h f7c3e2010000 r e t 0 ch ; @40bedah c20c00 x: loc_403ea8h A. Gazet, Y. Guillot Binary deprotection with metasm 19/55

  24. Breaking obfuscation Metasm Breaking code virtualization Analysis of a protection Putting the pieces together Decompilation Conclusion(s) Plan Metasm 1 Analysis of a protection 2 Breaking obfuscation Breaking code virtualization Putting the pieces together Conclusion(s) Decompilation 3 A. Gazet, Y. Guillot Binary deprotection with metasm 20/55

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend