reverse engineering and exploit development in linux(x64)
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
- 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
- having kali linux(or another linux) installed
- knowing basic commands of linux(not completely necessary since we explain about everything).
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
i have Master of Science in Electronics engineering . and for 10 years i have been studying computer science too. i have been teaching subjects like programming like python , networking concepts, cryptography , penetration testing in computer science and Analog Electronics, digital Electronics, Electrical circuits, data communication , CMOS integrated circuits , signals and systems and advanced mathematics for 4 years. i think we should learn computer science in high level first and then relate it to electronics concept by going deep in the lower level and then at last analyze them using mathematics concepts . that is why i dedicate most of my time studying these concepts to go deeper.