31

I know how to use most of the tools in Kali like msfvenom and msfconsole and I can safely call myself a script kiddie. I learned the basics of C# and that helps me understand some of the things in C, but I still get easily lost. I know the basics of assembly like mov xor add jmp cmp etc but it's hard for me to follow the flow of actual code and I most likely won't be able to make a pseudo C code from an assembly program

I want to stop being a script kiddie and start being better, not to make a career of it, but just because I like the whole concept of programming tools, finding exploits, and taking advantage of holes in the system.

I started following this book "The Shellcoder's Handbook" and read the first 4-5 chapters. I kind of get the idea and concept but it's very hard for me to follow what's actually happening.

I've been studying for 8 hours every day following the book and similar videos, yet I don't feel much improvement.

Is my method wrong?

Am I just starting from a bad place?

Is it better to learn every command in python/C and overall the languages or should I learn them while studying books and videos like these since I'm pretty good at C# (or so I believe)?

Is it normal to hardly understand these things? I mean, I can understand how a shell script works, for example, but I can't make one myself if left alone to code it.

Nikolay Atanasov
  • 451
  • 1
  • 5
  • 10
  • 4
    It's normal for it to be hard to learn. Security is a complicated subject! I would say first, before jumping into exploitation, learn the platforms. Switch to a Linux distro as your daily driver, learn a bit of C and Python. After that, start learning some assembly. It will go a long way in helping you learn exploitation. – forest Jul 05 '18 at 21:50
  • 2
    Your method is not wrong. Just don't get disappointed and remember practice makes perfect! – game0ver Jul 05 '18 at 22:27
  • Best book - Jon Erickson’s “Hacking: The Art of Exploitation“, plus a good book on x86 Assembly like Jeff Duntemann’s “Assembly Language Step-by-Step”. Actually work through the sample code on a virtual machine. Good luck! – Stone True Jul 05 '18 at 23:32
  • 32
    There's one thing missing from your whole question: what do you want to ***do***? If you want to "learn how play football better" then you need to define what that *means*. What position do you want to play? What skills are you lacking in? What skills do you want to improve *first*? Pick one thing. Then it will be so much easier to see what you need to do to improve. – schroeder Jul 06 '18 at 08:18
  • 2
    You are only able to hack things you understand in great detail. If you want to hack a webserver, you need to know how it works, how it's configured out of the box, how it performs, how it breaks... everything can help! It can takes years to be able to find simple exploits completely on your own. – sknt Jul 06 '18 at 11:43
  • 2
    Get a Raspberry Pi and practice writing ASM on it. You need to learn how to recognise all the basic constructs such as loops and branching. – Dom Jul 06 '18 at 13:28
  • 1
    I came here to post a Purism link showing that it is hard even for professionals, but that link [has been taken down.](https://puri.sm/posts/intel-fsp-reverse-engineering-finding-the-real-entry-point/) Instead, I will content myself with his ["reverse-engineering primer" post.](https://puri.sm/posts/primer-to-reverse-engineering/) – Michael Jul 06 '18 at 13:47
  • 1
    @schroeder I think you're right, but also missing some things. E.g. in order for someone to be able to _clearly_ state what it is that they "want to do", they must first have enough knowledge of the subject to be able to define it. When someone is starting out, it's nigh impossible to even know what to ask, how to ask it, or even what is or isn't "possible" within a given field. E.g. I know next to nothing about football, so if I wanted to become "better" at playing that game, I'd probably be unable to ask something more specific, unless I was already able to play it at a reasonable level. – code_dredd Jul 06 '18 at 18:43
  • Have you ever *written* code that needs to defend against attackers? – jpmc26 Jul 06 '18 at 22:35

4 Answers4

51

So let me preface this with "I'm not implying you're a child"

Often when I teach kids about CIS and they hear what I do for a living, the first question is

"How do I hack?"

I'll tell you the same thing I tell them. Hacking isn't a thing you learn as much as it is the result of years of experience in a series of topics that relate to security.

Often you'll find people break into the security field coming from software backgrounds and network backgrounds. I started on my security path a few years ago by attending defcon, derbycon, and other security related events. I learned that if I wanted to do it professionally then I needed to dig deeper. I learned there was no magic knowledge that made you a security professional. Just hard work and learning about what it takes to make things secure.

After building lots of Arduino projects, setting up lots of webservers from scratch, building lots of websites from the database up, taking (and failing mind you) my OSCP, I finally got to a point where I felt comfortable calling myself a security software engineer. The company I worked at during that time had a security champion program for engineers. They gave a single team member more advanced security training to be the team security engineer. I did that and I loved it.

About a year and a half ago I took the leap and got a job building intrusion detection software and I love it. Most of my work is standard coding but I do get to apply my security knowledge on a regular basis in various ways.

I guess my long winded point is, keep learning. You're doing it the right way by learning different technologies. Check out my blog https://www.DotNetRussell.com and you can see the projects I did that led me to where I'm at now.

Keep learning. As mentioned in the comments, security is hard. That's why there's such a demand for it! It's really rare that it comes easy to people. The people that you see that are experts in the field are there because they spent years and years grinding that hard knowledge.

DotNetRussell
  • 1,441
  • 1
  • 19
  • 30
  • 4
    Related Dilbert cartoon: http://dilbert.com/strip/1999-10-27 - IOW, it will take you **years** of hard work you learn the skills. – Peter M. - stands for Monica Jul 06 '18 at 16:07
  • 2
    Yep, to exploit code (part of what reverse engineering is used for), you have to be able to write it and understand it, thereby coming from a professional software background helps immensely. Also, code is just a part of the security front though, there's plenty of other roles too. – RandomUs1r Jul 06 '18 at 22:39
  • Yeah I have a ton of experience in software but that doesn't mean I know how a network works. You need many disciplines – DotNetRussell Jul 07 '18 at 01:48
11

Reverse engineering is fun. I use IDA once every other week, so I am not an expert in the field but do it often enough. If you want to understand reverse engineering you need to know how to engineer first.

If you do it professionally you are spending your time in Windows land. So to get good at that learn some Windows internals, code some projects in C# and C for windows.

The best reverse engineers I know were software engineers first.

Build some programs yourself and use Radare2 and IDA on them and you will start to learn.

Good luck and have fun!

Joe M
  • 2,997
  • 1
  • 6
  • 13
3

Stop wasting your time with books and videos. Get some program you want to reverse (like a game you want to hack), get your tools for static/dynamic analysis (cheat engine is great for starting if you're on windows) and start tinkering with them... googling every thing you don't know yet as soon as you find it. It will be slow and painful at first, but soon you will be understanding assembly code by just looking, it becomes second nature.

Icaro10100
  • 31
  • 1
-1

There is a simple way to view reverse engineering and security. Do not overwhelm yourself with the boring parts, simply look at each problem as a puzzle. Each step an accomplishment and one step closer to understanding the why not the how. That is why hacking can be like a fever a Sherlock Holmes sense of accomplishment. Either you get it or you don’t.

anubis
  • 17