Reverse Engineering All-In-One. Quick refreshers into the world of reverse engineering.
Reverse Engineering - All-In-One
[Work still in progress]
Depending whether you are working with Windows or Linux binary, simply choose the folder of the operating system you are dealing with. What you'll typically find about the resources on my repositories is that they are categorized and organized by relevance and skill level. Enjoy!
Writing past the bounds of a buffer. For example, writing to a buffer without an null byte (\x00) appended at the end, therefore the program doesn't know when to stop writing user input to memory.
Found in loops that append data to a buffer. Not checking the last iteration of the loop can overwrite the least signifcant byte on the function's base pointer.
Integers have a maximum value in memory. A signed int can only go as high as 2,147,483,647 for example. Math that goes beyond that limit can overflow the integer, resuting in unexpected behavior.
Using weak Pseudo-random seeds, for example using time() to provide a cryptographical seed for encryption or rand() function..
The Reverse Engineering Cheatsheet
Memorizing is never fun and if you're like me, you'll work on other projects for months before needing to come back to debug a piece of software just to find out that you've lost your mojo. Here are a few refreshers if you need them.
C/C++ is a Strongly Typed Language. You need to use Typecasting to change the type of a variable or pointer. Despite how the type was originally defined.
Class is short for Classify. A class is a blueprint for creating objects during runtime. Objects are dynamic and only spawn during runtime. Classes and Object Oriented Programming (OOP) were added in C++.
Stores a whole number. Numbers in C are defaultly signed. Meaning, they can be either positive or negative numbers. 32-bit signed integers max out at 2,147,483,647.
Stores a whole number. Numbers that are unsigned can only be positive. This means there is no Twos Compliment and the least significant bit is not reserved. 32-bit unsigned integers max out at 4,294,967,295.