I would want to start learning reverse engineering (Software and Hardware Projects), but I don't know from where to start. Will be grateful for online resources and/or books. Thanks.
-
$\begingroup$ Our standard advice is: before asking here, (1) look at courses on the subject at reputable universities to see what textbooks, lecture notes, etc., they use or offer, (2) look at book reviews on standard sizes (Amazons, Goodreads, etc.), and then show your research in the question and what specific criteria you have and why you have rejected what you've found so far. We discourage opinion polls. $\endgroup$– D.W. ♦Commented Jan 6, 2022 at 21:55
-
$\begingroup$ Step 0: Chose an area/subject where you are keenly interested in Why are things the way they are? Mechanics or statics is way simpler than "higher math" or programs, which are trivial compared to higher organisms, let alone systems thereof. (Beware one side of design constraints being profitable.) $\endgroup$– greybeardCommented Jan 7, 2022 at 7:19
2 Answers
One advice is that you don't "learn reverse engineering". You learn about engineering and reverse engineering knowledge comes by itself.
For example, if you take binary instructions encoding. You can read either the AMD or Intel developer's manuals and learn how instructions are encoded in binary for x86. Then it is easier to try and reverse engineer a binary executable because you know how instructions are encoded.
As to hardware, it is the same. If you want to, let's say, reverse engineer a PCI network card. First learn how a PCI device is designed then you can even start thinking of reverse engineering one.
Reverse engineering is learnt by just learning how things work in the proper direction. It just comes by itself once you know how things work. Maybe just writing an assembler would be a good starting point. Then, maybe you can start thinking of reverse engineering a binary. Even then, there are a lot of things to learn about high level language compilation and the layout of the binary in itself. Just learning about reverse engineering is quite impossible I would say.
Just want to share my research with community. I'm finding this list for useful. https://github.com/wtsxDev/reverse-engineering