Childhood adventures in learning Assembly
When you think about learning the image that comes to mind is a guy sitting in a library surrounded by books or in a lecture or working in a lab, well at least in my mind. But in my life, this image was never realized When I was learning assembly language for reverse engineering(cracking software) and exploit development (hacking computers) at the age of 16. Well yeah a little bit early but i was self taught and just didn’t know that you are supposed to learn it when you are older. The first problem was the source. I could not afford to pay for dial-up and wireless Internet prices were sky high (my dad had a Nokia phone the only internet enabled device in the home)
Good old Symbian days
One of my friends had telephone wires going over his roof. I never had a dial up at this point but I used to install windows on a lot of people’s computer (being the tech guy) and some of them had dial up so when setting up their connections I learned that in my area dial up user names were just first two letters of user’s surname concatenated with the name and password is just “password”. This was enough information for me so we found full name of one person who had his wire there, we carefully removed rubber from wires and connected our own wire, these were just copper wires anyway ( those simple days ) my friend had a inbuilt dial-up modem in his desktop so we connected it used the username and password and we were connected.
But it did not last very long (the person had a bill of thousands of rupees next month and he never paid it) so the only option was to go to an Internet cafe around the street, I started going there but you have to pay them in order to sit for an hour. I could only afford to pay for one hour a day so it was a very tight browsing session. The first problem was you could not copy anything in an USB drive because all the rear ports were physically removed or disabled and there were no front ports, they installed OS with a CD drive and unplugged it but I was probably the reason for such strict practice.
A year ago I wrote a software in Autoit that could download scheduled files in the background with no GUI at all, software and files were hidden as system files in FAT and inside alternate data streams in NTFS, privilege escalation exploits for XP was not a problem to find so it’s hidden from task manager too, started at the startup and installed it on all the Internet cafes in my area, They could not find what was happening but saw a lot of down traffic, they figured something is being downloaded so they removed the USB access and CD drive so nobody could take the files (I was pretty discrete about my patterns of running it, later I even programmed it to run only when a system is on standby so it took them a year to figure that out, actually i could write a whole post about the things i did to beat cafe operators but some other day) you had to ask them if you need a file, he had USB port on his PC and file sharing on others.
first, i took a CD writer from my Desktop in a bag with me to connect to the PC and write my data on the CD (everybody else was just watching porn so it was a pretty private space) but CD’s cost money to buy so it was not a very good solution.
I looked at the library of Rajasthan technical university it was 15 minutes from my home and I had some friends there so I could sneak in sometimes, I found some books like Assembly for 8066, Some documentation for Intel processors and other books that were only written so that you could pass your exams by remembering all the answers. Now, I am not a super genius who could read 8066 books and go on to do reverse engineering (it would take me years to learn all the lingo and concept in the thousands of pages of these books) I wanted something clean and short to learn how to read assembly for that specific task.
I found some books but could not find most of them on torrent sites and the ones I found had almost no seeders, I tried to read these books but they were also focused on making things with assembly and understanding all the concepts for development (I know I should have learned all that but I had no one to guide me or asking questions and just wanted to learn to read through and understand the logic, I was 16 anyway) I looked at some of the books I could buy as physical copies, turned out they could only be imported from overseas so the cost was a little fortune for me. Finally I found professional assembly language by Richard Blum in PDF, it was written to teach assembly to those who already knew a programming language, I knew bash, VBS, AutoIt, C (btw if you wanna brush up on your C watch UNSW lectures by Richard Buckland, it was gold for me when they published his lectures)
with good examples and diagrams and covering most of the things you need in 500 pages. I took my pocket money and got it printed from a shop ( the cheapest one :) ) Later I found Lenas Reversing for Newbies series on a forum that was just amazing for learning reverse engineering the best part was the file type, SWF files, and no audio it was just 2–3 MB per video. I finally had an Internet connection when some of the CS engineering students who knew me asked me to make projects to submit for the final year and offered some money for it. In the process of making dozens of projects (i had to pay the bill every month) I learned so much about making things and quickly prototyping a software’s in a matter of days.
The hardest part of learning was not learning for me.