Trying to like a boss… REVERSE ENGINEERING. WHAT EVEN IS… REVERSE ENGINEERING?? Reverse engineering is the process of disassembling and analyzing a particular.

Slides:



Advertisements
Similar presentations
Assembly Language – 1.
Advertisements

Sample chapter from Reverse Engineering Course.
Program Development Tools The GNU (GNU’s Not Unix) Toolchain The GNU toolchain has played a vital role in the development of the Linux kernel, BSD, and.
IT253: Computer Organization Lecture 6: Assembly Language and MIPS: Programming Tonga Institute of Higher Education.
Utilizing the GDB debugger to analyze programs Background and application.
ICS103 Programming in C Lecture 1: Overview of Computers & Programming
SYSTEM PROGRAMMING & SYSTEM ADMINISTRATION
E-Glue Application Merging executables in WIN32 environment By : Gil Arbeli, Ran Didi Instructor : Gal Badishi Softlab – June 2006.
Systems Software.
RIVERSIDE RESEARCH INSTITUTE Helikaon Linux Debugger: A Stealthy Custom Debugger For Linux Jason Raber, Team Lead - Reverse Engineer.
Dean Carlson and Beth Anne Byrd CpSc 420.  What is reverse engineering?  Brief History  Usefulness  The process  Bagle Virus example.
Lab6 – Debug Assembly Language Lab
Disclaimer The Content, Demonstration, Source Code and Programs presented here is "AS IS" without any warranty or conditions.
1 Lecture-2 CSIT-120 Spring 2001 Revision of Lecture-1 Introducing Computer Architecture The FOUR Main Elements Fetch-Execute Cycle A Look Under the Hood.
Table 1. Software Hierarchy Levels.. Essential Tools An assembler is a program that converts source-code programs into a machine language (object file).
1-1 Embedded Software Development Tools and Processes Hardware & Software Hardware – Host development system Software – Compilers, simulators etc. Target.
Memory & Storage Architecture Seoul National University Computer Architecture “ Bomb Lab Hints” 2nd semester, 2014 Modified version : The original.
Copyright Arshi Khan1 System Programming Instructor Arshi Khan.
 Knowledge and use of tools and resources in a system: standard libraries, system calls, debuggers, the shell environment, system programs and scripting.
Code Injection and Software Cracking’s Effect on Network Security Group 5 Jason Fritts Utsav Kanani Zener Bayudan ECE 4112 Fall 2007.
CS1430: Programming in C++ Section 2 Instructor: Qi Yang 213 Ullrich
CCSA 221 Programming in C CHAPTER 2 SOME FUNDAMENTALS 1 ALHANOUF ALAMR.
F13 Forensic tool analysis Dr. John P. Abraham Professor UTPA.
© Janice Regan, CMPT 128, Jan CMPT 128 Introduction to Computing Science for Engineering Students Creating a program.
COMPUTER SOFTWARE Section 2 “System Software: Computer System Management ” CHAPTER 4 Lecture-6/ T. Nouf Almujally 1.
Binary Auditing Geller Bedoya Michael Wozniak. Background  Binary auditing is a technique used to test the security and discover the inner workings of.
Computer Programming A program is a set of instructions a computer follows in order to perform a task. solve a problem Collectively, these instructions.
Old Chapter 10: Programming Tools A Developer’s Candy Store.
CS266 Software Reverse Engineering (SRE) Reversing and Patching Java Bytecode Teodoro (Ted) Cipresso,
EECS 354 Network Security Reverse Engineering. Introduction Preventing Reverse Engineering Reversing High Level Languages Reversing an ELF Executable.
Malware Analysis Jaimin Shah & Krunal Patel Vishal Patel & Shreyas Patel Georgia Institute of Technology School of Electrical and Computer Engineering.
Mrs. Ulshafer August, 2013 Java Programming Chapter 1.
Analyzing Malicious Code Nicolas Brulez Ryan Russell Disassembly with a time constraint Recon 2005.
Computer organization Practical 1. Administrative Issues The course requirements are: –To be nice and open minded –To pass the exam (there is a boolean.
Disclaimer The Content, Demonstration, Source Code and Programs presented here is "AS IS" without any warranty or conditions.
CS-303 Introduction to Programming
 Programming - the process of creating computer programs.
Introduction to OOP CPS235: Introduction.
Introduction to Information Security מרצים : Dr. Eran Tromer: Prof. Avishai Wool: מתרגלים : Itamar Gilad
Lecture1 Instructor: Amal Hussain ALshardy. Introduce students to the basics of writing software programs including variables, types, arrays, control.
A computer contains two major sets of tools, software and hardware. Software is generally divided into Systems software and Applications software. Systems.
Friday, 23 August 2013 Session Work out Presented By: Abhijit Pal.
DR. MIGUEL ÁNGEL OROS HERNÁNDEZ 4. Herramientas. Contexto Computers understand binary code Binary code can be written in hexadecimal Hexadecimal code.
LECTURE 3 Translation. PROCESS MEMORY There are four general areas of memory in a process. The text area contains the instructions for the application.
Software Reverse Engineering Binary analysis: concepts, methods and tools. Catalin Patulea Mar 5, 2008.
Contents What is Reverse Engineering (RE)? Why do we need Reverse Engineering? Scope and Tasks of Reverse Engineering Reverse Engineering Tools Reverse.
Some of the utilities associated with the development of programs. These program development tools allow users to write and construct programs that the.
Introduction to Programming By: Prof. Muhammad Abu Baker Siddique 2 nd Lecture 1.
Reverse Engineering Contemporary Countermeasures By: Joshua Schwartz.
Lecture 3 Translation.
Topic 2: Hardware and Software
Basic Concepts: computer, program, programming …
Assembler, Compiler, MIPS simulator
Static and dynamic analysis of binaries
Chapter 1. Basic Static Techniques
Dynamic Analysis ddaa.
Microprocessor and Assembly Language
Introduction to Computers and Java
Malware Incident Response  Dynamic Analysis - 2
Teaching Computing to GCSE
Computer Architecture “Bomb Lab Hints”
TRANSLATORS AND IDEs Key Revision Points.
Teaching Computing to GCSE
COMPUTER SOFT WARE Software is a set of electronic instructions that tells the computer how to do certain tasks. A set of instructions is often called.
System Level Programming Software College of SCU
Reverse engineering through full system simulations
CMSC 491/691 Malware Analysis
Exploitation Part 1.
Hello World Program In Visual Studio and Debugging
Overview of Computer system
Presentation transcript:

Trying to like a boss… REVERSE ENGINEERING

WHAT EVEN IS… REVERSE ENGINEERING?? Reverse engineering is the process of disassembling and analyzing a particular software or device to understand the concepts of its manufacture, to produce something similar or simply understand how it works.

WHAT IS IT USED FOR? Some of the reasons why people reverse engineer within computer science are: Breaking copy protections (time trials, serial protections, to impress) Studying viruses and other malware (Stuxnet, Duqu) To add functionality to existing software To recreate a software, when the original source code has been lost To study software for any vulnerabilities (exploits in operating systems)

KNOWLEDGE REQUIRED? At least a basic understanding of how coding works. Being familiar with the Assembly Language Learning the tools of the trade The ability to experiment (Ask yourself why the program does this)

TOOLS USED: Disassemblers Debuggers Hex editors Memory viewers Program format viewers and editors Tools to monitor the system Unpackers and decrypters

DISASSEMBLER A disassembler is used to take the machine language code and display them in a format that is more human readable friendlier format. This tool also gives us data about the program such as strings used within, variables, and function calls made. An example of such a tools is OBJDUMP

DEBUGGERS Debuggers are the tool of the reverse engineer. Their job is to analyze the binary file and to allow the reverse to step through the code within it. With the ability to do this the reverser can better understand what is going on underneath the hood of the program. Some debuggers allow a person to make changes to the running code to change the flow of the program. Examples are Ollydbg, GDB, Windbg, IDA, Softice Differences : Ring 0 (Softice), Ring 3 (others mentioned)

HEX EDITOR A hex editor allows you to see the bytes that a program is composed of and make changes to them or simply copy them to another file/location. Examples: WinHex, Hexdump, xxd

MEMORY VIEWERS These programs allow a person to dump and view working memory. This also lets us view any changes the program is making within memory. Examples: Memdump

PROGRAM FORMAT VIEWERS Compiled programs come in a certain format for the operating system its used upon. On windows that format is known as the PE (Portable Executable), on linux is most common format is the ELF(Executable and Linkable Format) These tools are important because most programs will do nasty things to the headers in-order to break your debugger.

UNPACKERS AND DECRYPTORS Often times a program will packed or compressed in-order to bring the file size of the program down. This often leads us to first have to unpack the program before we can start debugging the program. Other programs may be Encrypted with a certain algorithm to make it harder for a reverse engineer to understand the underlying code. So it must be decrypted to better understand it adequetly. Programs can also be both Packed and Encrypted.

UNDERSTANDING THE PORTABLE EXECUTABLE Programs on disk are the same within memory. This is important because we can make changes in memory and if we like the result, make those changes to the binary on disk.

SECTIONS At a minimum there are only two sections within a PE file. Code (where the program’s code is held) Data (where Variables and other types of data (export tables, resources relocations are held) The other Sections are : Rdata (read only data) Relocation table (relocated code/ data) Other sections Sections begin with some multiple of 0x200

ASSEMBLY LANGUAGE The Assembly Language was created to make a more human readable representation of raw binary code. It directly represents instructions the processor can execute This is what all of our programs can be translated to. Our high level languages (C / C++…etc) go from code form to a compiler, which translates to Assembly, then passed to the assembler to make object code for the platform (simplified process)