SlideShare a Scribd company logo
Inspecting and Manipulating binaries
Introduction.
x86 architecture. Assembler.
Binary inspection.
  General sample (crackme)
Binary manipulation.
  Python to the rescue!
Malware analysis

                 What we (you) are going to do   2
Welcome to the city of death   3
$ whoami




  Braaaaiiinnnssss   4
                         4
$ whoami
           Binary Reverse Engineering
           Malware
           Programming
           The walking dead




                                   5
                                       5
Yeah, but what is reversing ???

  Kind of a reconstruction
     Code      Binary

int main(int argc, char **argv)   push ebp
{                                 mov ebp, esp
 int gv = 0; // global            mov dword_403394, 0
 […]                              […]




                                                        6
so, i want to do some reversing

Requisites
   ASM knowledge
   Binary format (PE32, etc.)
   OS Knowledge
   Patience ;)




                                     7
At the beginning, there was c0de
            #include "stdafx.h"
            #include <iostream>

            using namespace std;

            int add(int x, int y)
            {
               return x + y;
            }



            int main()
            {
               int a = 0, b = 0;
               cout << "Enter a: ";
               […]
              return 0;
            }




                                      8
The compiler fucks it all up




                               9
compiling is like...
… that scene of Apollo XIII




                                      10
It may hurt a little bit…   11
Bytes :: opcodes




                   12
Opcodes :: basic blocks




                          13
Basic blocks :: functions




                            14
Cpu registers
„General purpose“ registers:
  eax, ebx, ecx, edx, esi, edi, ebp, esp
  32 bits (64 bits in x86_64)
  Some of them have special uses.



                                                 „The rootkit arsenal“ Bill Blunden



                     It may hurt a little bit…                               15
Cpu registers
Not so „general purpose“ registers:
 eax: Arithmetic and function return values
 ecx: counter (loops, etc.)
 esi, edi: src, dst in memcpy, strcpy, etc.
 ebp, esp: stack operations :)
 and more...



                   It may hurt a little bit…   16
Some common instructions
Read
  mov eax, [ecx]
  mov eax, [00401000]
Write
  mov ebx, 0x20
  mov [ebx+0x1C], ecx




              It may hurt a little bit…   17
Some common instructions
push
 push 0x100
 push dword_1377
pop
 pop ecx
 pop 0x00c0ffee




              It may hurt a little bit…   18
Some common instructions
inc, dec
mul, div
  Use your imagination :)


add, sub
  add esp, 0x08
  sub esp, 0x1c


                      It may hurt a little bit…   19
Some common instructions
lea dst, src
lea eax, [esi*2]
lea ecx, [esi+ecx]

shl, shr
shl eax, 2



             It may hurt a little bit…   20
Some common instructions
    jxx dst
    jmp 0xbadc0de
    jnz eax
    ja 0xc0ffee
    jl ebx
t
    call 0x00412F1E

                      It may hurt a little bit…   21
Some common instructions
cmp dst, src
cmp eax, ebx
cmp ecx, 0xFF

test dst, src
test ecx, edx



            It may hurt a little bit…   22
Important segments
.data: statically allocated *initialized*
  int g = 1; char str[] = „yomamma“;
.bss: statically allocated *UNinitialized*
  int var; char *ptr;
.rdata: read-only data (const c = 0)




                        It may hurt a little bit…   23
It‘s all about the .(r)data




         It may hurt a little bit…   24
Moar data




 It may hurt a little bit…   25
Moar data




 It may hurt a little bit…   26
Imports and all that stuff…




          It may hurt a little bit…   27
The problem with imports

Problem: O(n2) vs. O(n)

„Thunks and dynamic resolution makes the binary
*portable* between Windows versions.
XP and Win7 don‘t have the same addresses for all
kernel32 functions

                  It may hurt a little bit…     28
Regular call    thunks                                   Opcode:
                                                        0xE8 + offset




Memcpy = thunk                               Not resolved yet
  (nur jmp)




                 It may hurt a little bit…                              29
call ds:xxx   “direct“ import calls
                                                         Opcodes:
                                                  0xFF15 + absolut address




                                        Not resolved yet




                     It may hurt a little bit…                               30
Page based (4 KB pages, arch dependent)

Pages (virtual mem.) -> page tables -> page frames
(physical mem.)


Pages have several attributes:
  User / Supervisor (Kernel)
  read-only, read-write, read-execute, etc.
                  Memory is not disk, dough!         31
Picture: CC Hameed, (http://blogs.technet.com)   32
Picture: Bill Blunden (The Rootkit Arsenal)   33
Application starts. Process is generated.
   Process = running instance of an application.
   Processes are separated from each other.
   Every process gets its own virtual address space (32-bit: 4 GB)


A process is a container (own VM, Handles, Threads (min.1))
   Thread = context execution of a process.
   Multithreading.
   Shares system resources (Code, Data, Handles)
       Own stack, though.
       Thread Local Storage.
   Threads (within a process) can share memory.


                                Processes and Threads                34
Important data structures in every process

  PEB: Process Environment Block (1 pro Process)
      Location of executable (ImageBase)
      Information about DLLs
      Information regarding the heap

  TEB: Thread Environment Block (1 pro Thread)
      Location of the PEB
      Location of the stack
      Pointer to first SEH Chain entry



                                   PEB vs. TEB     35
Process memory segmentation:

   Code (.text): like the segment on disk

   Data (.data): like the segment on disk

   Stack: function arguments, local variables
       Grows towards lower addresses
       Defined through top (ESP) and bottom (EBP)
       PUSH vs POP (dword)

   Heap: managed by Allocator/Deallocator algorithms


                                Two new segments       36
User land




                     Picture courtesy of CORELAN
               2GB
 Kernel land




                      Copyright (c) Corelan GCV




               4GB                             37
Open cmd.exe in ImmunityDebugger




                 Time to take a peek   38
Time to take a peek   39
Time to take a peek   40
The stack . Push & pop.




        It may hurt a little bit…   41
Function prologue




     It may hurt a little bit…   42
function calls
Different types:
  cdecl (C progs, variable arg number)
    Caller* is responsible for adjusting the stack.
    How many args were there? Unknown
  stdcall (windows API, fixed arg number)
    Function self adjusts the stack before return.
    It's clear in advance how many arguments
    _funcName@nrBytes
                        It may hurt a little bit…     43
Argument passing




    It may hurt a little bit…   44
Argument passing ( by ref )




          It may hurt a little bit…   45
Argument passing ( by ref )




          It may hurt a little bit…   46
Argument passing ( by value )




           It may hurt a little bit…   47
Argument passing ( by value )




           It may hurt a little bit…   48
Go home Compiler, you are drunk
#include <stdio.h>
int main(void) {
  char x = 0xff;

    if(x == 0xff)
      puts("YES");
    else
      puts("NO");

    return 0;
}
                     sign extensions from hell   49
Time to take a peek   50
There is NOT such thing as static reversing ONLY

  Combine static (IDA) and dynamic (debugger).
  The trick is to optimize the information transfer
  between these two.




                        Best of both worlds           51
Examples:
  IDA debugging capabilities
  Dynamic Binary Instrumentation (PIN).
     Import results in IDA to see code coverage


  Trace with .py
     Differential debugging



                          Best of both worlds     52
53
Not really scary…   54
Don't get distracted!   55
Look, it works!   56
Loooooong function   57
Don't really feel like doing this manually   58
F*ck this shit
                                    I'm outta here!




We will solve this soon… intelligently                59
Take the control!   60
Not elegant but effective…   61
I want more… finesse…   62
Python to the rescue!




       Tzzzzzz. Tttzzzz…   63
Python to the rescue!




     If it‘s in twitter it must be true   64
Keepass stalker
Example: utorrent readfile
Which ReadFile ?!?!




There are several references…
                Manually inspecting all is a tedious job.   67
The walking 0xDEAD
Reading from a File
CreateFile(...)
  Returns handle
ReadFile(handle)
CloseHandle(handle)
Reading from a File




       It's a long shot   70
And... found!




    It's a long shot   71
Binary manipulation

    Binaries can be easily modified
        Patched (on disk, live)
        Functions intercepted (hooking, live)

    Usage:
        Inspection (ex. Tracing)
        Change execution flow
        Whatever you can imagine
What you all have been waiting for…   73
So many questions…

 APIs used to send() and recv() data?
   Sure? Think twice
   Functions I don't see?
 What happens with the data received?
 How does the malware achieve persistency?


             Braaaaiiinnnsss… I mean, credeeeennttiiiaaalllssssss…   74
Braaaaiiinnnsss… I mean, credeeeennttiiiaaalllssssss…   75
Are these the
     ONLY APIs
used by this malware?

       Malware are deceiving bastards…   76
Braaaaiiinnnsss… I mean, CPU cycles…   77
How does the malware
      achieve
   persistency?

     I like it here. I think I‘m gonna stick for a while…   78
Braaaaiiinnnsss… I mean, CPU cycles…   79
Getting in the enemy's mind   80
Hands on: STRINGS




     Juicy info in two minutes   81
Hands on: imports




     Very interesting imports…   82
Hands on: resources




    The .rsrc section is perfect for hiding data   83
"Crypto" stuff




 Takes less time and is less brain damaging   84
Hands on: sneaky bastards




         I see what you did there…   85
There are so many!
What Do i do?!?!?



                     86
Who are u gonna call? Sneakbuster!




           Takes less time and is less brain damaging   87
Hands on: WTFTLS




      NO ME GUSTA   88
Hands on: WTFTLS




     Call, call, call …   89
Hands on: running it




       Thanks for the info…   90
Hands on: running it




     Here's (another?) candy for you…   91
Last chance! ;)   92
Twitter: @m0n0sapiens   93

More Related Content

PPTX
PVS-Studio, a solution for resource intensive applications development
PDF
Interpreter, Compiler, JIT from scratch
PDF
sizeof(Object): how much memory objects take on JVMs and when this may matter
PDF
Using Python3 to Build a Cloud Computing Service for my Superboard II
PDF
HES2011 - Aaron Portnoy and Logan Brown - Black Box Auditing Adobe Shockwave
PDF
Where destructors meet threads
KEY
Øredev 2011 - JVM JIT for Dummies (What the JVM Does With Your Bytecode When ...
PDF
Devirtualizing FinSpy
PVS-Studio, a solution for resource intensive applications development
Interpreter, Compiler, JIT from scratch
sizeof(Object): how much memory objects take on JVMs and when this may matter
Using Python3 to Build a Cloud Computing Service for my Superboard II
HES2011 - Aaron Portnoy and Logan Brown - Black Box Auditing Adobe Shockwave
Where destructors meet threads
Øredev 2011 - JVM JIT for Dummies (What the JVM Does With Your Bytecode When ...
Devirtualizing FinSpy

What's hot (20)

PDF
Pydiomatic
PDF
Virtual Machine Constructions for Dummies
PDF
The hangover: A "modern" (?) high performance approach to build an offensive ...
PDF
Advanced cfg bypass on adobe flash player 18 defcon russia 23
PDF
Windbg랑 친해지기
PDF
JIT compilation for CPython
PDF
DLL Design with Building Blocks
PDF
Hack Like It's 2013 (The Workshop)
PDF
Implementing Lightweight Networking
PPTX
Intro to Python (High School) Unit #2
PDF
Tools and Techniques for Understanding Threading Behavior in Android
PDF
Learn How to Master Solr1 4
PDF
Applied Design Patterns - A Compiler Case Study
PDF
OOPSLA Talk on Preon
PDF
Kernel entrance to-geek-
PDF
20140531 serebryany lecture02_find_scary_cpp_bugs
PDF
20140531 serebryany lecture01_fantastic_cpp_bugs
PDF
The Rust Programming Language: an Overview
PDF
C++ How I learned to stop worrying and love metaprogramming
PDF
Reverse Engineering Dojo: Enhancing Assembly Reading Skills
Pydiomatic
Virtual Machine Constructions for Dummies
The hangover: A "modern" (?) high performance approach to build an offensive ...
Advanced cfg bypass on adobe flash player 18 defcon russia 23
Windbg랑 친해지기
JIT compilation for CPython
DLL Design with Building Blocks
Hack Like It's 2013 (The Workshop)
Implementing Lightweight Networking
Intro to Python (High School) Unit #2
Tools and Techniques for Understanding Threading Behavior in Android
Learn How to Master Solr1 4
Applied Design Patterns - A Compiler Case Study
OOPSLA Talk on Preon
Kernel entrance to-geek-
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
The Rust Programming Language: an Overview
C++ How I learned to stop worrying and love metaprogramming
Reverse Engineering Dojo: Enhancing Assembly Reading Skills
Ad

Similar to The walking 0xDEAD (20)

PDF
hashdays 2011: Ange Albertini - Such a weird processor - messing with x86 opc...
ODP
Such a weird Processor: messing with opcodes (...and a little bit of PE) (Has...
PDF
[Ruxcon 2011] Post Memory Corruption Memory Analysis
PPT
Swug July 2010 - windows debugging by sainath
PPTX
Patching Windows Executables with the Backdoor Factory | DerbyCon 2013
PDF
Shellcoding, an Introduction
PPTX
Everybody be cool, this is a ROPpery
PDF
Skiron - Experiments in CPU Design in D
PDF
Unmanaged Parallelization via P/Invoke
PPT
[CCC-28c3] Post Memory Corruption Memory Analysis
PPTX
05-machine-basics.pptx
PPT
class04_x86assembly.ppt hy there u need be
PDF
Binary art - Byte-ing the PE that fails you (extended offline version)
PPTX
Compiler
PDF
[HITB Malaysia 2011] Exploit Automation
PDF
Python Brasil 2010 - Potter vs Voldemort - Lições ofidiglotas da prática Pyth...
PDF
Bugs from Outer Space | while42 SF #6
PDF
05 defense
ODP
x86 & PE
PDF
[Kiwicon 2011] Post Memory Corruption Memory Analysis
hashdays 2011: Ange Albertini - Such a weird processor - messing with x86 opc...
Such a weird Processor: messing with opcodes (...and a little bit of PE) (Has...
[Ruxcon 2011] Post Memory Corruption Memory Analysis
Swug July 2010 - windows debugging by sainath
Patching Windows Executables with the Backdoor Factory | DerbyCon 2013
Shellcoding, an Introduction
Everybody be cool, this is a ROPpery
Skiron - Experiments in CPU Design in D
Unmanaged Parallelization via P/Invoke
[CCC-28c3] Post Memory Corruption Memory Analysis
05-machine-basics.pptx
class04_x86assembly.ppt hy there u need be
Binary art - Byte-ing the PE that fails you (extended offline version)
Compiler
[HITB Malaysia 2011] Exploit Automation
Python Brasil 2010 - Potter vs Voldemort - Lições ofidiglotas da prática Pyth...
Bugs from Outer Space | while42 SF #6
05 defense
x86 & PE
[Kiwicon 2011] Post Memory Corruption Memory Analysis
Ad

Recently uploaded (20)

PPTX
A Presentation on Artificial Intelligence
PDF
August Patch Tuesday
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PPTX
Spectroscopy.pptx food analysis technology
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Machine learning based COVID-19 study performance prediction
PDF
Approach and Philosophy of On baking technology
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
A comparative study of natural language inference in Swahili using monolingua...
PPTX
1. Introduction to Computer Programming.pptx
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
cloud_computing_Infrastucture_as_cloud_p
PDF
Mushroom cultivation and it's methods.pdf
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
Machine Learning_overview_presentation.pptx
A Presentation on Artificial Intelligence
August Patch Tuesday
NewMind AI Weekly Chronicles - August'25-Week II
Spectroscopy.pptx food analysis technology
Encapsulation_ Review paper, used for researhc scholars
Building Integrated photovoltaic BIPV_UPV.pdf
Machine learning based COVID-19 study performance prediction
Approach and Philosophy of On baking technology
Diabetes mellitus diagnosis method based random forest with bat algorithm
A comparative study of natural language inference in Swahili using monolingua...
1. Introduction to Computer Programming.pptx
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
Mobile App Security Testing_ A Comprehensive Guide.pdf
cloud_computing_Infrastucture_as_cloud_p
Mushroom cultivation and it's methods.pdf
Assigned Numbers - 2025 - Bluetooth® Document
Group 1 Presentation -Planning and Decision Making .pptx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Machine Learning_overview_presentation.pptx

The walking 0xDEAD