Udemy
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
Turn what you know into an opportunity and reach millions around the world.
Learn More
Your cart is empty.
Keep shopping
reverse engineering and exploit development in linux(x64)
Rating: 4.5 out of 5(53 ratings)
800 students

reverse engineering and exploit development in linux(x64)

computer architecture, file structure, assembly and c programming language, reverse engineering and exploit development
Last updated 8/2021
English
English [Auto],

What you'll learn

  • computer architecture
  • assembly langauge
  • c programming language
  • reverse engineering
  • exploit development
  • memory organization
  • file structure
  • file structure in linux
  • elf files
  • segment and section headers in elf files
  • the txt, the bmp header files
  • headers of images
  • executables in linux
  • transistors in computer
  • nmos vs pmos transistor
  • transistor circuits with dc and ac inputs
  • creating not gates using nmos and pmos transistors
  • creating nand gates using nmos and pmos transistors
  • creating memory bit using nand gates
  • decoder
  • creating ram using nand gates from scratch
  • what are multiplexers and why we need them
  • the data path in a computer
  • control unit of a cpu
  • creating an alu from scratch
  • turing complete machine
  • why computers are fast
  • why computers are strong
  • system calls in linux
  • disassembling the .text section
  • creating programs in assembly language
  • the comparing of assembly, python and c
  • jumps and conditional jumps in assembly
  • jz,jnz,je,jne,jc,jnc in assembly language
  • functions and procedures in assembly
  • format specifiers in c
  • variables in c
  • pointers in c
  • stepping through c programs using gdb
  • compiling c programs into their assembly counterpart
  • stack layout of programs in c
  • memory layout of programs in c
  • pointers in memory and stack
  • create a function like printf in c
  • create a function like strcmp in c
  • comparing strings in c
  • creating a static library in c
  • creating a shared library in c
  • static library vs shared library in c
  • reverse engineering a malware
  • arguments passing and function calling

Course content

6 sections136 lectures16h 22m total length
  • bits, binary and data5:49

    the concept of bit(binary digit) using lamps. what do we mean by data and what is binary language?

  • what is a computer1:22

    a general overview of what a computer is. a computer in general form is said to be maid up of three sections:

    cpu, memory, input/output devices

  • binary,hex and decimal numbering systems9:05

    Explore binary numbering system, convert between binary, decimal, and hexadecimal representations, and learn how grouping bits into four yields hexadecimal representations.

  • what is a transistor2:30

    Explore how a transistor uses gate, drain, and source terminals, with a threshold around 2.7 volts, to switch current on and off, forming the building blocks of computers.

  • transistor circuit with dc input1:55
  • transistor circuit with digital clock voltage2:33

    Analyze how a five-volt voltage source with a one-second cycle, controlling the gate, drives a transistor to blink a lamp in a simulated circuit observed on an oscilloscope.

  • nmos and pmos transistors2:28
  • not gates using cmos transistors4:48
  • creating a nand gate using mosfet transistors6:29

    Design a nand gate with four transistors (two pmos and two nmos), explain input-driven output, and present the nand gate as a universal building block for ram and cpu.

  • creating a memory bit using nand gates4:51
  • creating a memory byte3:35

    demonstrates building a memory byte by wiring eight circuits together to store eight bits. shows eight boxes forming ram-like memory with addressable memory cells for selective access.

  • decoder3:03
  • creating an 8 byte ram2:12

    Create an eight-byte ram by arranging eight memory cells and a three-to-eight decoder to address them; write to a selected cell by applying address and data patterns.

  • flowing of data in computer(datapath)6:54
  • multiplexers and why we need them6:06

    Explore how multiplexers create a controllable data path by selecting register outputs to a shared bus, using two-to-one multiplexers and chip enable signals to avoid wire conflicts.

  • creating the bus to move data between registers4:33
  • creating AND and XOR for the ALU3:19
  • creating an 8-bit adder9:23
  • subtraction and 2s complement9:14

    Explore eight-bit two's complement encoding from minus 128 to 127, enabling subtraction by adding negatives; flip bits and add one to get negative values, using the msb as sign.

  • subtracting using adder and 2s complement4:43

    Explore subtracting using two's complement by inverting the value, adding one, and feeding through an adder to produce the negative result, illustrated with 35 minus 19 equals 16.

  • enabler1:36

    An enabler circuit demonstrates and gate behavior, showing how the output becomes one only when both inputs are one and how a control bit can enable or disable the signal.

  • creating a two operation-alu3:55

    Build a two-operation alu that adds or subtracts using a control bit to select between pass-through input and its negation, implemented with xor and not gates.

  • completing the alu12:19
  • completing our 8-byte ram8:14
  • putting together our computer6:21

    Put together the computer by wiring RAM, registers, the AC, ALU, and a multiplexer to feed the input and address lines, then clear all registers to zero.

  • executing instructions using our computer10:22

    Execute instructions on old computers by moving from high-level ideas to assembly, illustrating memory addresses, registers, random access memory, and binary translation via the assembler, with loops, comparisons, and increments.

  • why are computers so fast-part15:36

    Explain how a computer executes instructions through a fetch-decode-execute cycle, using the program counter and instruction register, and contrast Harvard architecture versus von Neumann architectures with separate data and instructions.

  • why are computers so fast-part210:13
  • why computers are powerful-turing complete7:48
  • stack and why we need it15:06
  • what is operating system2:19
  • virtual memory(intuitive view)6:14

Requirements

  • having kali linux(or another linux) installed
  • knowing basic commands of linux(not completely necessary since we explain about everything).

Description

i always wanted a course, a book or something which starts from scratch and brings me to an expert level. i saw and read a lot of courses which teach you the applications and software about security and hacking, learning those in security industry, is like knowing wordpress to design websites without understanding programming languages. so i started this course from scratch, from nothing.  because as einstein put it: "if you can't explain something simply then you don't understand it well enough".  in security the difference between experts and amateurs is just in the same statement. those who know the background science are those who DESIGN the metasploit and other softwares, and those who don't are the users of the programs. which one do you want to be?

if the answer is the first group, this the right place for you. we really start from nothing, introduce you the concept of data, that what do we mean by data, bits and bytes? we then introduce the basic element of all the digital devices: TRANSISTOR.

then we use that transistor to create the logic gates, nand and not gates. but we only create them if we need them, so before creating anything, we ask the question of "why do i need this?" . then we start to give a general overview of what a computer is, why we need it and how we are going to create it. that brings us to the concepts that as human we can't remember everything, so we needed something which could remember as long as we want it to, and more importantly we want it to do the computation so much faster that we ever could. those are the only two things that computer has over human brain. so based on that we proceed, a memory for remembering and a cpu for processing. so we start my using our nand gates to create both memory and cpu. and we test it, troubleshoot it, add features to it, until we have our computer.  now we save our program as a set of instructions inside the memory, the cpu would fetch those instructions, and execute them and move to the next one, and it does it over and over again. everything in the computer which is not hardware, is a program, a simple FILE.


so in the second chapter we start talking about files. if all the computer could know are 1s and 0s, how could it show us text and images, movies and executables. this is were we talk about file extensions and headers. so that it could be an introduction into getting us to the elf file format, the executables and binary files in linux. because if we want to reverse files and crack and hack them, first we need to know them. all its segment and section headers, but not just an overview, going deep , somehow that we comprehend every byte of it.  now its time for us to know how they get executed, or how they get created? using programming languages: ASSEMBLY


in the next chapter we enter the assembly world. why we need it , like always would be the main question, if we could anser it then we enter to HOW we do it.  we teach everything you need to know about assembly. and when we write a program we debug it using the gdb, analyze instructions one by one, so that you know the reason for each instruction. and at the same time we compare assembly with other higher level programming languages.


why we need c programming language would trigger the creation of the next chapter. variables, pointers, format specifers, functions, they are all just names without a concept and their comprehension, thats why for every single abstraction there is a separate lecture depicting the memory and stack(we explain what this is in an intuitive manner) organization and how it changes.


when we know all these sciences in such a different manner, then when we get to the reverse engineering and exploit development, the last two chapter, you see that these are just a different look of everything we have learned so far. just looking differently and keep track of memory.  and using these we would be able to reverse engineer malwares, hack and crack softwares. which means acquiring the offensive skills without which , you could never be a real hacker.

Who this course is for:

  • all the beginner and advanced students who want to be real hackers and know the science behind the scenes
  • penetration testers wanting to get their skills to an independent level
  • programmers interested in security