SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
Introduction
  Verification algorithm
            Obfuscation
      Encryption layers
  Direct native API call
                 Anti-X
        How to break it
     Possible evolutions




Hackito Ergo Sum Crackme

            ´
            Eloi Vanderb´ken
                        e

 eloi.vanderbeken (at) ens-cachan.fr


               09 April 2011




      ´
      Eloi Vanderb´ken
                  e        Hackito Ergo Sum 2011
Introduction
                       Verification algorithm
                                 Obfuscation
                           Encryption layers
                       Direct native API call
                                      Anti-X
                             How to break it
                          Possible evolutions


Plan
   1 Introduction
   2 Verification algorithm
   3 Obfuscation
       Instruction mutation
       Control Flow Graph (CFG) obfuscation
   4 Encryption layers
   5 Direct native API call
   6 Anti-X
   7 How to break it
   8 Possible evolutions

                           ´
                           Eloi Vanderb´ken
                                       e        Hackito Ergo Sum 2011
Introduction
                   Verification algorithm
                             Obfuscation
                       Encryption layers
                   Direct native API call
                                  Anti-X
                         How to break it
                      Possible evolutions


About me



     Last year of master’s degree in cryptology and software
                 ´
     security at Ecole Normale Sup´rieure of Cachan
                                    e
     Reversing software protection for 6 years
     Participate to several Capture The Flags in my spare time




                       ´
                       Eloi Vanderb´ken
                                   e        Hackito Ergo Sum 2011
Introduction
                       Verification algorithm
                                 Obfuscation
                           Encryption layers
                       Direct native API call
                                      Anti-X
                             How to break it
                          Possible evolutions


Plan
   1 Introduction
   2 Verification algorithm
   3 Obfuscation
       Instruction mutation
       Control Flow Graph (CFG) obfuscation
   4 Encryption layers
   5 Direct native API call
   6 Anti-X
   7 How to break it
   8 Possible evolutions

                           ´
                           Eloi Vanderb´ken
                                       e        Hackito Ergo Sum 2011
Introduction
                      Verification algorithm
                                Obfuscation
                          Encryption layers
                      Direct native API call
                                     Anti-X
                            How to break it
                         Possible evolutions


Some facts and numbers


      First crackme
      2 months
      6000 lines of python
      Use TTASM and BeaEngine
      Randomly generated
      Only 3 valid solutions




                          ´
                          Eloi Vanderb´ken
                                      e        Hackito Ergo Sum 2011
Introduction
                       Verification algorithm
                                 Obfuscation
                           Encryption layers
                       Direct native API call
                                      Anti-X
                             How to break it
                          Possible evolutions


Plan
   1 Introduction
   2 Verification algorithm
   3 Obfuscation
       Instruction mutation
       Control Flow Graph (CFG) obfuscation
   4 Encryption layers
   5 Direct native API call
   6 Anti-X
   7 How to break it
   8 Possible evolutions

                           ´
                           Eloi Vanderb´ken
                                       e        Hackito Ergo Sum 2011
Introduction
                    Verification algorithm
                              Obfuscation
                        Encryption layers
                    Direct native API call
                                   Anti-X
                          How to break it
                       Possible evolutions


Algorithm



      Custom RC4 (initial table changed, starts with ”HESFTW”)
      Serial is used as a 256-byte key
      Generate the first 7 DWORDs
      Combine them with 0xDEADBEEF to generate a DWORD
      Use it as a constant to calculate the length of the last layers




                        ´
                        Eloi Vanderb´ken
                                    e        Hackito Ergo Sum 2011
Introduction
                       Verification algorithm
                                 Obfuscation
                           Encryption layers    Instruction mutation
                       Direct native API call   Control Flow Graph (CFG) obfuscation
                                      Anti-X
                             How to break it
                          Possible evolutions


Plan
   1 Introduction
   2 Verification algorithm
   3 Obfuscation
       Instruction mutation
       Control Flow Graph (CFG) obfuscation
   4 Encryption layers
   5 Direct native API call
   6 Anti-X
   7 How to break it
   8 Possible evolutions

                           ´
                           Eloi Vanderb´ken
                                       e        Hackito Ergo Sum 2011
Introduction
                     Verification algorithm
                               Obfuscation
                         Encryption layers    Instruction mutation
                     Direct native API call   Control Flow Graph (CFG) obfuscation
                                    Anti-X
                           How to break it
                        Possible evolutions


Plan

   1 Introduction


   2 Verification algorithm


   3 Obfuscation
       Instruction mutation
       Control Flow Graph (CFG) obfuscation

   4 Encryption layers


   5 Direct native API call
                         ´
                         Eloi Vanderb´ken
                                     e        Hackito Ergo Sum 2011
Introduction
                    Verification algorithm
                              Obfuscation
                        Encryption layers    Instruction mutation
                    Direct native API call   Control Flow Graph (CFG) obfuscation
                                   Anti-X
                          How to break it
                       Possible evolutions


Instruction mutation



      Make a static analysis to get freely modifiable registers
      Use them to mutate instructions
      Main rule: if your code use an instruction, it has to be used
      everywhere ⇒ no difference between the useful code and the
      garbage one




                        ´
                        Eloi Vanderb´ken
                                    e        Hackito Ergo Sum 2011
Introduction
                     Verification algorithm
                               Obfuscation
                         Encryption layers    Instruction mutation
                     Direct native API call   Control Flow Graph (CFG) obfuscation
                                    Anti-X
                           How to break it
                        Possible evolutions


Plan

   1 Introduction


   2 Verification algorithm


   3 Obfuscation
       Instruction mutation
       Control Flow Graph (CFG) obfuscation

   4 Encryption layers


   5 Direct native API call
                         ´
                         Eloi Vanderb´ken
                                     e        Hackito Ergo Sum 2011
Introduction
                       Verification algorithm
                                 Obfuscation
                           Encryption layers    Instruction mutation
                       Direct native API call   Control Flow Graph (CFG) obfuscation
                                      Anti-X
                             How to break it
                          Possible evolutions


Control Flow Graph (CFG) obfuscation

   Before instruction mutation:
        Duplicate some piece of code
        Add a fake or non determinist test to choose which block will
        be executed
   After:
        Make a static analysis to know which flags are set/unset for
        each instruction
        Add conditional jump which are never/always taken according
        to the flags
        Shuffle blocks

                           ´
                           Eloi Vanderb´ken
                                       e        Hackito Ergo Sum 2011
Figure: (incomplete) CFG of a layer made by IDA
Introduction
                       Verification algorithm
                                 Obfuscation
                           Encryption layers
                       Direct native API call
                                      Anti-X
                             How to break it
                          Possible evolutions


Plan
   1 Introduction
   2 Verification algorithm
   3 Obfuscation
       Instruction mutation
       Control Flow Graph (CFG) obfuscation
   4 Encryption layers
   5 Direct native API call
   6 Anti-X
   7 How to break it
   8 Possible evolutions

                           ´
                           Eloi Vanderb´ken
                                       e        Hackito Ergo Sum 2011
Introduction
                       Verification algorithm
                                 Obfuscation
                           Encryption layers
                       Direct native API call
                                      Anti-X
                             How to break it
                          Possible evolutions


Layers




   How to make a layer the most annoying possible?
         Hide the end address of the encryption layer
         Hide the size of the encrypted code




                           ´
                           Eloi Vanderb´ken
                                       e        Hackito Ergo Sum 2011
Introduction
                   Verification algorithm
                             Obfuscation
                       Encryption layers
                   Direct native API call
                                  Anti-X
                         How to break it
                      Possible evolutions


Layers (continued)

      Use Linear Feedback Shift Register (LFSR) to encrypt n times
      both end address and a dword counter
      At execution, decrypt them one time at each loop execution
      When the dword counter has been decrypted, jump to the
      decrypted address
      Use indirect jump to avoid breakpoint:
      cmp counter, CST       setz cl     jmp [ecx +
      addresses]
      Bonus: LFSR having the biggest possible period, you can add
      as many fake comparison as you want

                       ´
                       Eloi Vanderb´ken
                                   e        Hackito Ergo Sum 2011
Introduction
                       Verification algorithm
                                 Obfuscation
                           Encryption layers
                       Direct native API call
                                      Anti-X
                             How to break it
                          Possible evolutions


Plan
   1 Introduction
   2 Verification algorithm
   3 Obfuscation
       Instruction mutation
       Control Flow Graph (CFG) obfuscation
   4 Encryption layers
   5 Direct native API call
   6 Anti-X
   7 How to break it
   8 Possible evolutions

                           ´
                           Eloi Vanderb´ken
                                       e        Hackito Ergo Sum 2011
Introduction
                     Verification algorithm
                               Obfuscation
                         Encryption layers
                     Direct native API call
                                    Anti-X
                           How to break it
                        Possible evolutions


Direct native API call



       Get syscall numbers at initialisation
       Use sysenter (do not work on 64bit systems)
       Make random invalid or non invasives (ZwYieldExecution)
       syscalls to prevent conditional breakpoints on
       KiFastSystemCallRet




                         ´
                         Eloi Vanderb´ken
                                     e        Hackito Ergo Sum 2011
Introduction
                       Verification algorithm
                                 Obfuscation
                           Encryption layers
                       Direct native API call
                                      Anti-X
                             How to break it
                          Possible evolutions


Plan
   1 Introduction
   2 Verification algorithm
   3 Obfuscation
       Instruction mutation
       Control Flow Graph (CFG) obfuscation
   4 Encryption layers
   5 Direct native API call
   6 Anti-X
   7 How to break it
   8 Possible evolutions

                           ´
                           Eloi Vanderb´ken
                                       e        Hackito Ergo Sum 2011
Introduction
                     Verification algorithm
                               Obfuscation
                         Encryption layers
                     Direct native API call
                                    Anti-X
                           How to break it
                        Possible evolutions


Classical anti-debuggers tricks



   Well known anti-debuggers trick made difficult to bypass because
   of direct use of sysenter:
       NtQueryInformationProcess + ProcessDebugPort
       NtSetInformationThread + ThreadHideFromDebugger
       NtSetContextThread to delete hardware breakpoints




                         ´
                         Eloi Vanderb´ken
                                     e        Hackito Ergo Sum 2011
Introduction
                    Verification algorithm
                              Obfuscation
                        Encryption layers
                    Direct native API call
                                   Anti-X
                          How to break it
                       Possible evolutions


Anti-instrumentation framework



      Detect hook on KiUserExceptionDispatcher and
      KiUserCallbackDispatcher
      Detect stack reuse by instrumentation code: place a constant
      in esp-4, execute a sysenter, check if esp-4 has been changed




                        ´
                        Eloi Vanderb´ken
                                    e        Hackito Ergo Sum 2011
Introduction
                       Verification algorithm
                                 Obfuscation
                           Encryption layers
                       Direct native API call
                                      Anti-X
                             How to break it
                          Possible evolutions


Anti data-tainting
   After execution of each part of the algorithm, result is copied using
   indirect dependance
   AntiTaintMemcpy (BYTE* source, BYTE *dest, int size)
   {
       for (int t =0 t < size ++t) {
           BYTE val = 0
           do {
               BOOL isDiff = FALSE
               if (source[t] != val)
                   isDiff = True
               if (! isDiff)
                   dest[t] = val
               ++val
           } while (val != 0)
       }
   }

                           ´
                           Eloi Vanderb´ken
                                       e        Hackito Ergo Sum 2011
Introduction
                       Verification algorithm
                                 Obfuscation
                           Encryption layers
                       Direct native API call
                                      Anti-X
                             How to break it
                          Possible evolutions


Plan
   1 Introduction
   2 Verification algorithm
   3 Obfuscation
       Instruction mutation
       Control Flow Graph (CFG) obfuscation
   4 Encryption layers
   5 Direct native API call
   6 Anti-X
   7 How to break it
   8 Possible evolutions

                           ´
                           Eloi Vanderb´ken
                                       e        Hackito Ergo Sum 2011
Introduction
                    Verification algorithm
                              Obfuscation
                        Encryption layers
                    Direct native API call
                                   Anti-X
                          How to break it
                       Possible evolutions


So how to solve it?


      API init Set memory breakpoint on ntdll PE
     Anti-Dbg Don’t use debugger, inject a DLL and use
              VectoredExceptionHandler to set HBP
     Anti-HBP Replace ZwSetThreadContext syscall number by an
              harmless or invalid one
      ReadFile Use kernel debugger or replace syscall numbers by a
               GDI one which will call KiUserCallbackDispatcher
   Obfuscation Step the code :)


                        ´
                        Eloi Vanderb´ken
                                    e        Hackito Ergo Sum 2011
Introduction
                     Verification algorithm
                               Obfuscation
                         Encryption layers
                     Direct native API call
                                    Anti-X
                           How to break it
                        Possible evolutions


How to find a valid serial



       Bruteforce (JB B´drune)
                       e
       Use of the RC4 internal table created with the key published
       (Kyriakos Economou and Mark Wodrich)
       Generate a valid keystream, use a backward algorithm to find
       an internal table which generate this keystream, find a key
       which generate this table (Me :) )




                         ´
                         Eloi Vanderb´ken
                                     e        Hackito Ergo Sum 2011
Introduction
                       Verification algorithm
                                 Obfuscation
                           Encryption layers
                       Direct native API call
                                      Anti-X
                             How to break it
                          Possible evolutions


Plan
   1 Introduction
   2 Verification algorithm
   3 Obfuscation
       Instruction mutation
       Control Flow Graph (CFG) obfuscation
   4 Encryption layers
   5 Direct native API call
   6 Anti-X
   7 How to break it
   8 Possible evolutions

                           ´
                           Eloi Vanderb´ken
                                       e        Hackito Ergo Sum 2011
Introduction
                        Verification algorithm
                                  Obfuscation
                            Encryption layers
                        Direct native API call
                                       Anti-X
                              How to break it
                           Possible evolutions


Some ideas for the next year ;)


       Recode all the crackme generation in C
       Use XED (by intel) to disassemble and reassemble instruction
       Multi-thread
       Virtualisation
       More mutation rules, more complex instructions (FPU, MMX,
       SSE etc.)
       More anti-X



                            ´
                            Eloi Vanderb´ken
                                        e        Hackito Ergo Sum 2011
Introduction
         Verification algorithm
                   Obfuscation
             Encryption layers
         Direct native API call
                        Anti-X
               How to break it
            Possible evolutions


Thanks




                  Thank you !




             ´
             Eloi Vanderb´ken
                         e        Hackito Ergo Sum 2011
Introduction
              Verification algorithm
                        Obfuscation
                  Encryption layers
              Direct native API call
                             Anti-X
                    How to break it
                 Possible evolutions


Questions ?




                        Questions ?




                  ´
                  Eloi Vanderb´ken
                              e        Hackito Ergo Sum 2011

Contenu connexe

Similaire à HES2011 - Eloi Vanderbeken - Hackito Ergo Sum Crackme

Dmitriy evdokimov. light and dark side of code instrumentation
Dmitriy evdokimov. light and dark side of code instrumentationDmitriy evdokimov. light and dark side of code instrumentation
Dmitriy evdokimov. light and dark side of code instrumentation
Yury Chemerkin
 
The Future of Automated Malware Generation
The Future of Automated Malware GenerationThe Future of Automated Malware Generation
The Future of Automated Malware Generation
Stephan Chenette
 

Similaire à HES2011 - Eloi Vanderbeken - Hackito Ergo Sum Crackme (8)

B-Sides Seattle 2012 Offensive Defense
B-Sides Seattle 2012 Offensive DefenseB-Sides Seattle 2012 Offensive Defense
B-Sides Seattle 2012 Offensive Defense
 
Detecting and exploiting integer overflows
Detecting and exploiting integer overflowsDetecting and exploiting integer overflows
Detecting and exploiting integer overflows
 
Intrusion Alert Correlation
Intrusion Alert CorrelationIntrusion Alert Correlation
Intrusion Alert Correlation
 
Do it-yourself-audits
Do it-yourself-auditsDo it-yourself-audits
Do it-yourself-audits
 
Dmitriy evdokimov. light and dark side of code instrumentation
Dmitriy evdokimov. light and dark side of code instrumentationDmitriy evdokimov. light and dark side of code instrumentation
Dmitriy evdokimov. light and dark side of code instrumentation
 
The Future of Automated Malware Generation
The Future of Automated Malware GenerationThe Future of Automated Malware Generation
The Future of Automated Malware Generation
 
Materi Vulnerability Development
Materi Vulnerability DevelopmentMateri Vulnerability Development
Materi Vulnerability Development
 
Enterprise Security API (ESAPI) Java - Java User Group San Antonio
Enterprise Security API (ESAPI) Java - Java User Group San AntonioEnterprise Security API (ESAPI) Java - Java User Group San Antonio
Enterprise Security API (ESAPI) Java - Java User Group San Antonio
 

Plus de Hackito Ergo Sum

HES 2011 - Gal Diskin - Binary instrumentation for hackers - Lightning-talk
HES 2011 - Gal Diskin - Binary instrumentation for hackers - Lightning-talkHES 2011 - Gal Diskin - Binary instrumentation for hackers - Lightning-talk
HES 2011 - Gal Diskin - Binary instrumentation for hackers - Lightning-talk
Hackito Ergo Sum
 
HES2011 - Jon Larimer - Autorun Vulnerabilities on Linux
HES2011 - Jon Larimer - Autorun Vulnerabilities on LinuxHES2011 - Jon Larimer - Autorun Vulnerabilities on Linux
HES2011 - Jon Larimer - Autorun Vulnerabilities on Linux
Hackito Ergo Sum
 
HES2011 - James Oakley and Sergey bratus-Exploiting-the-Hard-Working-DWARF
HES2011 - James Oakley and Sergey bratus-Exploiting-the-Hard-Working-DWARFHES2011 - James Oakley and Sergey bratus-Exploiting-the-Hard-Working-DWARF
HES2011 - James Oakley and Sergey bratus-Exploiting-the-Hard-Working-DWARF
Hackito Ergo Sum
 
HES2011 - Raould Chiesa - Hackers Cybercriminals from Wargames to the Undergr...
HES2011 - Raould Chiesa - Hackers Cybercriminals from Wargames to the Undergr...HES2011 - Raould Chiesa - Hackers Cybercriminals from Wargames to the Undergr...
HES2011 - Raould Chiesa - Hackers Cybercriminals from Wargames to the Undergr...
Hackito Ergo Sum
 
HES2011 - Richard Johnson - A Castle Made of Sand Adobe Reader X Sandbox
HES2011 - Richard Johnson - A Castle Made of Sand Adobe Reader X SandboxHES2011 - Richard Johnson - A Castle Made of Sand Adobe Reader X Sandbox
HES2011 - Richard Johnson - A Castle Made of Sand Adobe Reader X Sandbox
Hackito Ergo Sum
 
HES2011 - Tarjei Mandt – Kernel Pool Exploitation on Windows 7
HES2011 - Tarjei Mandt – Kernel Pool Exploitation on Windows 7HES2011 - Tarjei Mandt – Kernel Pool Exploitation on Windows 7
HES2011 - Tarjei Mandt – Kernel Pool Exploitation on Windows 7
Hackito Ergo Sum
 
HES2011 - Yuval Vadim Polevoy – Money Is In The Eye Of The Beholder: New And ...
HES2011 - Yuval Vadim Polevoy – Money Is In The Eye Of The Beholder: New And ...HES2011 - Yuval Vadim Polevoy – Money Is In The Eye Of The Beholder: New And ...
HES2011 - Yuval Vadim Polevoy – Money Is In The Eye Of The Beholder: New And ...
Hackito Ergo Sum
 
HES2011 - Itzik Kolter - Let me Stuxnet You
HES2011 - Itzik Kolter - Let me Stuxnet YouHES2011 - Itzik Kolter - Let me Stuxnet You
HES2011 - Itzik Kolter - Let me Stuxnet You
Hackito Ergo Sum
 

Plus de Hackito Ergo Sum (8)

HES 2011 - Gal Diskin - Binary instrumentation for hackers - Lightning-talk
HES 2011 - Gal Diskin - Binary instrumentation for hackers - Lightning-talkHES 2011 - Gal Diskin - Binary instrumentation for hackers - Lightning-talk
HES 2011 - Gal Diskin - Binary instrumentation for hackers - Lightning-talk
 
HES2011 - Jon Larimer - Autorun Vulnerabilities on Linux
HES2011 - Jon Larimer - Autorun Vulnerabilities on LinuxHES2011 - Jon Larimer - Autorun Vulnerabilities on Linux
HES2011 - Jon Larimer - Autorun Vulnerabilities on Linux
 
HES2011 - James Oakley and Sergey bratus-Exploiting-the-Hard-Working-DWARF
HES2011 - James Oakley and Sergey bratus-Exploiting-the-Hard-Working-DWARFHES2011 - James Oakley and Sergey bratus-Exploiting-the-Hard-Working-DWARF
HES2011 - James Oakley and Sergey bratus-Exploiting-the-Hard-Working-DWARF
 
HES2011 - Raould Chiesa - Hackers Cybercriminals from Wargames to the Undergr...
HES2011 - Raould Chiesa - Hackers Cybercriminals from Wargames to the Undergr...HES2011 - Raould Chiesa - Hackers Cybercriminals from Wargames to the Undergr...
HES2011 - Raould Chiesa - Hackers Cybercriminals from Wargames to the Undergr...
 
HES2011 - Richard Johnson - A Castle Made of Sand Adobe Reader X Sandbox
HES2011 - Richard Johnson - A Castle Made of Sand Adobe Reader X SandboxHES2011 - Richard Johnson - A Castle Made of Sand Adobe Reader X Sandbox
HES2011 - Richard Johnson - A Castle Made of Sand Adobe Reader X Sandbox
 
HES2011 - Tarjei Mandt – Kernel Pool Exploitation on Windows 7
HES2011 - Tarjei Mandt – Kernel Pool Exploitation on Windows 7HES2011 - Tarjei Mandt – Kernel Pool Exploitation on Windows 7
HES2011 - Tarjei Mandt – Kernel Pool Exploitation on Windows 7
 
HES2011 - Yuval Vadim Polevoy – Money Is In The Eye Of The Beholder: New And ...
HES2011 - Yuval Vadim Polevoy – Money Is In The Eye Of The Beholder: New And ...HES2011 - Yuval Vadim Polevoy – Money Is In The Eye Of The Beholder: New And ...
HES2011 - Yuval Vadim Polevoy – Money Is In The Eye Of The Beholder: New And ...
 
HES2011 - Itzik Kolter - Let me Stuxnet You
HES2011 - Itzik Kolter - Let me Stuxnet YouHES2011 - Itzik Kolter - Let me Stuxnet You
HES2011 - Itzik Kolter - Let me Stuxnet You
 

Dernier

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Dernier (20)

Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 

HES2011 - Eloi Vanderbeken - Hackito Ergo Sum Crackme

  • 1. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Hackito Ergo Sum Crackme ´ Eloi Vanderb´ken e eloi.vanderbeken (at) ens-cachan.fr 09 April 2011 ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 2. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Plan 1 Introduction 2 Verification algorithm 3 Obfuscation Instruction mutation Control Flow Graph (CFG) obfuscation 4 Encryption layers 5 Direct native API call 6 Anti-X 7 How to break it 8 Possible evolutions ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 3. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions About me Last year of master’s degree in cryptology and software ´ security at Ecole Normale Sup´rieure of Cachan e Reversing software protection for 6 years Participate to several Capture The Flags in my spare time ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 4. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Plan 1 Introduction 2 Verification algorithm 3 Obfuscation Instruction mutation Control Flow Graph (CFG) obfuscation 4 Encryption layers 5 Direct native API call 6 Anti-X 7 How to break it 8 Possible evolutions ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 5. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Some facts and numbers First crackme 2 months 6000 lines of python Use TTASM and BeaEngine Randomly generated Only 3 valid solutions ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 6. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Plan 1 Introduction 2 Verification algorithm 3 Obfuscation Instruction mutation Control Flow Graph (CFG) obfuscation 4 Encryption layers 5 Direct native API call 6 Anti-X 7 How to break it 8 Possible evolutions ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 7. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Algorithm Custom RC4 (initial table changed, starts with ”HESFTW”) Serial is used as a 256-byte key Generate the first 7 DWORDs Combine them with 0xDEADBEEF to generate a DWORD Use it as a constant to calculate the length of the last layers ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 8. Introduction Verification algorithm Obfuscation Encryption layers Instruction mutation Direct native API call Control Flow Graph (CFG) obfuscation Anti-X How to break it Possible evolutions Plan 1 Introduction 2 Verification algorithm 3 Obfuscation Instruction mutation Control Flow Graph (CFG) obfuscation 4 Encryption layers 5 Direct native API call 6 Anti-X 7 How to break it 8 Possible evolutions ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 9. Introduction Verification algorithm Obfuscation Encryption layers Instruction mutation Direct native API call Control Flow Graph (CFG) obfuscation Anti-X How to break it Possible evolutions Plan 1 Introduction 2 Verification algorithm 3 Obfuscation Instruction mutation Control Flow Graph (CFG) obfuscation 4 Encryption layers 5 Direct native API call ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 10. Introduction Verification algorithm Obfuscation Encryption layers Instruction mutation Direct native API call Control Flow Graph (CFG) obfuscation Anti-X How to break it Possible evolutions Instruction mutation Make a static analysis to get freely modifiable registers Use them to mutate instructions Main rule: if your code use an instruction, it has to be used everywhere ⇒ no difference between the useful code and the garbage one ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 11. Introduction Verification algorithm Obfuscation Encryption layers Instruction mutation Direct native API call Control Flow Graph (CFG) obfuscation Anti-X How to break it Possible evolutions Plan 1 Introduction 2 Verification algorithm 3 Obfuscation Instruction mutation Control Flow Graph (CFG) obfuscation 4 Encryption layers 5 Direct native API call ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 12. Introduction Verification algorithm Obfuscation Encryption layers Instruction mutation Direct native API call Control Flow Graph (CFG) obfuscation Anti-X How to break it Possible evolutions Control Flow Graph (CFG) obfuscation Before instruction mutation: Duplicate some piece of code Add a fake or non determinist test to choose which block will be executed After: Make a static analysis to know which flags are set/unset for each instruction Add conditional jump which are never/always taken according to the flags Shuffle blocks ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 13. Figure: (incomplete) CFG of a layer made by IDA
  • 14. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Plan 1 Introduction 2 Verification algorithm 3 Obfuscation Instruction mutation Control Flow Graph (CFG) obfuscation 4 Encryption layers 5 Direct native API call 6 Anti-X 7 How to break it 8 Possible evolutions ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 15. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Layers How to make a layer the most annoying possible? Hide the end address of the encryption layer Hide the size of the encrypted code ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 16. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Layers (continued) Use Linear Feedback Shift Register (LFSR) to encrypt n times both end address and a dword counter At execution, decrypt them one time at each loop execution When the dword counter has been decrypted, jump to the decrypted address Use indirect jump to avoid breakpoint: cmp counter, CST setz cl jmp [ecx + addresses] Bonus: LFSR having the biggest possible period, you can add as many fake comparison as you want ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 17. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Plan 1 Introduction 2 Verification algorithm 3 Obfuscation Instruction mutation Control Flow Graph (CFG) obfuscation 4 Encryption layers 5 Direct native API call 6 Anti-X 7 How to break it 8 Possible evolutions ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 18. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Direct native API call Get syscall numbers at initialisation Use sysenter (do not work on 64bit systems) Make random invalid or non invasives (ZwYieldExecution) syscalls to prevent conditional breakpoints on KiFastSystemCallRet ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 19. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Plan 1 Introduction 2 Verification algorithm 3 Obfuscation Instruction mutation Control Flow Graph (CFG) obfuscation 4 Encryption layers 5 Direct native API call 6 Anti-X 7 How to break it 8 Possible evolutions ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 20. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Classical anti-debuggers tricks Well known anti-debuggers trick made difficult to bypass because of direct use of sysenter: NtQueryInformationProcess + ProcessDebugPort NtSetInformationThread + ThreadHideFromDebugger NtSetContextThread to delete hardware breakpoints ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 21. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Anti-instrumentation framework Detect hook on KiUserExceptionDispatcher and KiUserCallbackDispatcher Detect stack reuse by instrumentation code: place a constant in esp-4, execute a sysenter, check if esp-4 has been changed ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 22. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Anti data-tainting After execution of each part of the algorithm, result is copied using indirect dependance AntiTaintMemcpy (BYTE* source, BYTE *dest, int size) { for (int t =0 t < size ++t) { BYTE val = 0 do { BOOL isDiff = FALSE if (source[t] != val) isDiff = True if (! isDiff) dest[t] = val ++val } while (val != 0) } } ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 23. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Plan 1 Introduction 2 Verification algorithm 3 Obfuscation Instruction mutation Control Flow Graph (CFG) obfuscation 4 Encryption layers 5 Direct native API call 6 Anti-X 7 How to break it 8 Possible evolutions ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 24. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions So how to solve it? API init Set memory breakpoint on ntdll PE Anti-Dbg Don’t use debugger, inject a DLL and use VectoredExceptionHandler to set HBP Anti-HBP Replace ZwSetThreadContext syscall number by an harmless or invalid one ReadFile Use kernel debugger or replace syscall numbers by a GDI one which will call KiUserCallbackDispatcher Obfuscation Step the code :) ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 25. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions How to find a valid serial Bruteforce (JB B´drune) e Use of the RC4 internal table created with the key published (Kyriakos Economou and Mark Wodrich) Generate a valid keystream, use a backward algorithm to find an internal table which generate this keystream, find a key which generate this table (Me :) ) ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 26. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Plan 1 Introduction 2 Verification algorithm 3 Obfuscation Instruction mutation Control Flow Graph (CFG) obfuscation 4 Encryption layers 5 Direct native API call 6 Anti-X 7 How to break it 8 Possible evolutions ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 27. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Some ideas for the next year ;) Recode all the crackme generation in C Use XED (by intel) to disassemble and reassemble instruction Multi-thread Virtualisation More mutation rules, more complex instructions (FPU, MMX, SSE etc.) More anti-X ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 28. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Thanks Thank you ! ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011
  • 29. Introduction Verification algorithm Obfuscation Encryption layers Direct native API call Anti-X How to break it Possible evolutions Questions ? Questions ? ´ Eloi Vanderb´ken e Hackito Ergo Sum 2011