| I'm extremely grateful and was not at all expecting such an explanation. I wanna exlpain few things. Let me rephrase what I meant by "minimize the time wasting".
You see there are lot of great advice available online. You ask something on a subreddit or here and then people will share great resources. I love this and this kind of learning. My concern is that sometimes these resources and advice is given along the lines of "although its not completely necessary, it'll still be an experience in itself". The problem here is that such kind of learning sometime waste too much of time and leave you with confusion. People daily ask so many questions on CompSci and you'll find books starting from complete basics of computer like Code https://www.amazon.com/dp/0735611319, Nand2tetris course http://www.nand2tetris.com etc to something very sophisticated like AI. I hope you can understand that if a person spends too much time on these kinda things given that he's got a job or he's student in university with a sweet CompSci curriculum (you know what I mean) then its a problem. Although the above mentioned resources are exceptional there are others too which teaches the same thing. Can a person read all of them one by one "just to satisfy his curiosity and thinking that it'll help him in future"? RE is already an extremely sophisticated and vast field which requires computer mastery. I'm in college and it has made me hate things I loved. I'm extremely curious guy and can spend 10-20 hours in front of PC easily. I've ~6 years of experience with linux. Now I'm literally not in a state to read 2-3 400-800 page books on a single topic which I don't even know would be required in RE. There are some topics which are quite difficult but at least if we have an idea that it IS mandatory for RE then you can be sure and refer other resources. If you don't even know what's your syllabus how can one concentrate and master it let alone learning. RE requires you to study every minute details or computer system but wasting too much of time on those horrible digital logics and design is really not worth it. So
My purpose is to make it completely clear what I actually need to know so that I can focus on it instead of reading each and every topic in complete detail thinking that if I'll miss the direction of even a single electron in I/O I won't be able to do efficient reversing. I'm literally fed up of those architecture diagrams with arrows and cramming those definitions ROM, EEROM, EEPROM.............. again and again for tests and assignments. I've few questions for you: You mentioned Computer Organization and Design which I think is authored by Patterson and Hennessy which is used by almost all Universities. I'm just curious about its not so good looking amazon reviews. Also what's your opinion on Tanenbaum's books which you've mentioned in that reddit link. Now let's summarize what I've understood (PLEASE help me correct if I'm wrong) >>>> UNDERSTANDING the system you want to hack > Learn the most used fundamental programmming languages. (the way we TALK with computers)
1. C (also C++ in some cases)
2. Python or Ruby (given its dominance in industry right now thanks to its productive nature, also being used exploit writing)
3. Java or C# (object oriented programming which along with above languaged completes our programming fundamentals)
4. Assembly (obviously needed in RE)
I think it need not be mentioned that we need to have good grasp of Data Structures and Algorithms with above languages (obviously not all) > Understand each and every data flow and HOW a computer system work Computer Organization and Design and Architecture (OS fundamentals, memory management, virtual memory, paging, caching etc, Linux(macOS too) and Windows internals part I think comes here) You restored my faith in humanity when you said I can skip the hardware and microcode part (please explain what specific topics, I swear I won't look at them again until I'm done with required topics.) > Network Fundamentals and Programming
Basics of http, TCP/IP and other protocols....
Socket programming >>>> THE HACKING PART > Learning WHAT loopholes are there in this above process of data read write
Types of attacks (buffer overflows, heap overflows....) > HOW those loopholes are exploited >Reverse Engineering
(Learning tools of trade: IDA, gdb.....)
learning and practising reversing.
Fuzzing >Exploiting the bugs
making exploits. Please review and correct.
Thanks again. |