I have seen the debate over the value of college in the cyber security world play out in several arenas. There are people who feel college is valuable and people who feel that college is a complete waste of time. I’m not going to jump on either side of the argument because I feel it probably has a lot to do with the outcomes experienced. One thing that is true is that not everyone has access to college. For those that do have access college has costs associated with it that some may not be able to pay. The goal of this series is for those wanting to learn without explicitly going to college.
My goal for this set of posts is to find resources that are available for the cost of the internet access you already have access to or by going to the library. Not all libraries are equal so the library may be a bit of a stretch for the free resources. But I’m going to include what my local library has. I’m not going to include a university library because usually access to a university library requires you to be a student or employee. I’m also not going to include books that are made available by download from unauthorized sources.
Before you get to the list I will just point out that these are resources I’ve found. Some of them I have only given a cursory glance over, some I have read. Your opinion of their usefulness and what you get out of them may vary. I also prefer books to videos. I just learn better with them. With all of that out of the way lets get started.
If you want to get involved in systems exploitation you need to know how to program. Specifically you need to know how to do systems programming. So here is a list of free resources for each type of programming language you could need for systems programming.
Learning assembly language programming has fewer resources than I had expected. Though there are still resources available for free.
The PC Assembly Book by Paul Carter is a book about 32-bit x86 assembly programming.
OpenSecurityTraining is a web site that has courses on both 32-bit and 64-bit x86 assembly language. Both contain slides of information and some of the courses contain video lectures. Though the book recommendations in the courses that I viewed are not free.
Tutorials Point has an assembly language introduction section.
C is an indispensable language to learn if you want to get involved with low level programing. Typically kernels are written in it (Linux, Windows, etc) so if we want to understand how those work we need to understand C.
MIT Open Courseware has a large selection of courses that have varying amounts of content associated to them. It’s a very valuable resource that goes way beyond C programming. I linked to the main page and you can search for what you want in the top bar. This site works for C++ programming as well even though I’m not going to relist it.
Programming Motherf**ker is a site that has links to a lot of free resources for a lot of programming languages. Though not all of them are for free anymore. Learn C the Hard way used to be online for free and it no longer is. Like MIT this site works for C++ but I’m not going to relist it.
Tutorials Point for C is a site that has a set of tutorials and a type and run functionality in the web pages.
The C++ Programming Language is available at my local library. It’s a very comprehensive book but I don’t know about using it for learning I have read portions of it and would find it too dry to read from start to finish. It’s more of a reference in my opinion.
Fundamentals of C++ Programming is a free introductory book that is designed to teach introductory programming at the same time. From the portions I have read it seems like a pretty good intro. If you have experience with programming it may get boring though.
Hacker Rank is a web site that presents challenges for you to solve. It has a C++ section for learning. I find it to be fun and would recommend it. It also has the possibility of helping you find a job so that’s a bonus as well.
Code Fights is a web site that is an arcade style programming challenge. It’s an interesting concept and also has the ability to help you find a job.
Rust is a programming language that may or may not be useful to know. It’s a newer systems level programming language that is designed for safety. If it will be useful for exploitation is something that I’m not aware of at the time of writing this. I’m just including it because it’s a systems level programming language and I don’t believe that knowing more programming languages will hurt you.
The Rust Programming Language is the official website that has a tutorial of the language.
This is certainly not an exhaustive list of free resources. They should help getting you started. There are also websites like Coursera and Udacity which offer their content for free if you’re not worried about certificates or having people grade your work.
If the resources I’ve listed don’t work for you then don’t give up, there are tons more listed on Google. Your library may also have a lynda subscription which includes programming courses as well.