📚 OpenRCE is preserved as a read-only archive. Launched at RECon Montreal in 2005. Registration and posting are disabled.








Flag: Tornado! Hurricane!

 Forums >>  Brainstorms - General  >>  RCE Career Questions

Topic created on: March 5, 2008 07:08 CST by RemotePush .

Greetings,

This is my first post, so i thought I would include a little background. I am a Computer Science graduate living in the UK who is currently working as a Pen Tester, which I really enjoy. I have a small amount of RCE experience from years back and want to get back into the field.

I have recently become interested in the idea of vulnerability research and reverse engineering as a career progression. This has left me with some questions I am hoping some kind folks may be able to answer.

How do you go about getting commercial experience of RCE? By this I mean experience empolyers are looking for.

Does anyone know of any UK specific companies that provide RCE services?

Any other general advice about where to start would also be appreciated. I am aware of a previous post by Remc (https://www.openrce.org/forums/posts/276) with some useful information if anyone else is interested in this post.

Regards,
Remote

  aeppert     March 5, 2008 09:14.40 CST
Here's the problem with RCE and honestly most things akin to it in nature:  It is difficult to get the job without experience and it is difficult to get the experience without the job.

But, RCE is moderately different in many respects, there is a free version of IDA Pro, while moderately crippled it will still suffice.  Ollydbg is freely available, thus nothing is stopping you from using it or Immunity Debugger.  Gather up as many tools as you can (legitimately is generally the best way, lest you have to explain yourself) and start working on  the reverse engineering and cracking challenges that are routinely posted here and in other forums.  Read everything you can get your hands and eyes on.

Once you have a true baseline understanding of the tools and you can demonstrate that in some capacity (interviewers, including myself are prone to asking pointed questions if you state you know a given tool) then have a go at a "junior-ish" position.  There are numerous security companies in Europe proper and I believe several in London.

Bottom line, start now and learn.  The vast majority of RCE is genuinely learning - absolutely no way anyone can know everything on the subject as it is entirely too dynamic.  Your best bet is to train yourself to learn efficiently and effectively (these two traits are cornerstones of any successful person regardless of what career they choose).

Good luck.

  b0ne     March 5, 2008 10:45.10 CST
I agree with what aeppert said, but I would like to add a little bit.  Understanding that RCE typically deals with compiler generated machine code, one needs to have a firm concept of what goes into a compiler in order to understand what comes out of a compiler.

Basically, if you don't have a base understanding of C, you need to get to that point.  I would recommend Ivor Horton's "Beginning C." (http://books.google.com/books?id=Nfh5-L3NBTQC) For some odd reason, the google preview of the book, contains the entire book.

The next steps would be to disassemble your own code to see how it works.

gcc -Wall -g hello_world.c -o hello_world.exe

#include <stdio.h>

int main(void)
{
puts("hello world\n");
return 0;
}


objdump -S -l -Mintel hello_world.exe

004012f0 <_main>:
main():
C:/Users/b0ne/Desktop/hello_world.c:4
#include <stdio.h>

int main(void)
{
  4012f0: 55                   push   ebp
  4012f1: 89 e5                 mov    ebp,esp
  4012f3: 83 ec 08             sub    esp,0x8
  4012f6: 83 e4 f0             and    esp,0xfffffff0
  4012f9: b8 00 00 00 00       mov    eax,0x0
  4012fe: 83 c0 0f             add    eax,0xf
  401301: 83 c0 0f             add    eax,0xf
  401304: c1 e8 04             shr    eax,0x4
  401307: c1 e0 04             shl    eax,0x4
  40130a: 89 45 fc             mov    DWORD PTR [ebp-4],eax
  40130d: 8b 45 fc             mov    eax,DWORD PTR [ebp-4]
  401310: e8 2b 05 00 00       call   401840 <___chkstk>
  401315: e8 a6 00 00 00       call   4013c0 <___main>
C:/Users/b0ne/Desktop/hello_world.c:5
puts("hello world\n");
  40131a: c7 04 24 00 30 40 00 mov    DWORD PTR [esp],0x403000
  401321: e8 ba 05 00 00       call   4018e0 <_puts>
C:/Users/b0ne/Desktop/hello_world.c:6
return 0;
  401326: b8 00 00 00 00       mov    eax,0x0
C:/Users/b0ne/Desktop/hello_world.c:7
}
  40132b: c9                   leave  
  40132c: c3                   ret    


You can use the visual c++ toolchain to generate debugging symbols for your compiled code and use visual studio/windbg to do source/asm debugging and see similar output to the above.

  RolfRolles     March 5, 2008 13:37.59 CST
I somewhat disagree with Aaron's comment that "it is difficult to get the experience without the job", because I know plenty of skilled people who don't work in the profession, as well as plenty who had their skills before getting their jobs.  The best reverse engineer that I know does not do it professionally, and will likely never do so.  That said, Aaron is correct in that having a job in the industry affords you the time and the projects to build your skillset, a luxury you may not have if you have an otherwise busy life.

I was tempted to say "a better statement might be that it is difficult to get the experience without participating in reverse engineering regularly", until I thought twice, looked up the definition of the word "experience" and realized that was a tautology:  experience is defined as "knowledge gained through direct participation" (without reference to employment).  So the answer to "how do I get the experience that employers are looking for" is "just do it".*

Regarding getting a job, if you publish detailed work and are an active-enough participant in the community, the "how do I get a job" question is no longer an issue -- they will come to you, or will be receptive to your inquries.  Also, cronyism never fails, so try to make more friends than enemies (or if you can't manage to do that, at least make enough friends).

* Some advice on "just doing it":

Try to accomplish something, fail, try again but harder, or try a different approach or tool.  Perhaps take a copy of an advisory and the vulnerable software and locate the bug, and/or read a tutorial and follow along with it.  Pick up a piece of malware and analyze it, or teach yourself manual unpacking.  Experiment with different reverse engineering styles, e.g. dynamic analysis vs. static analysis.  Find a few mentors -- OpenRCE has an IRC channel on FreeNode with bright people in it who might be willing to help you out (there are other IRC channels too).  Discuss reverse engineering with others (IRC/IM is again useful here).  Read everything you can that's at or above your skill level (I've recently realized that I have been neglecting this aspect, and need to get off my ass regarding things like hypervisors), skim things below your skill level (there might be some good tips in there).  Picture everything I just said occurring as part of a montage.  Over time you will develop your own unique style and figure out which techniques are fast or reliable.

  kcynice   March 5, 2008 20:11.22 CST
i think anyperson have enough RE skills will have a good job too.
i also hope the ones having perfect RE skills would like to share their experence and/or give some advisory suggestion to others.
to me,as a newbie for RE i like it very much. although i have learnt some asm and c/c++ programming language,i find it's not enough to do some RE work.
so,i wish to learn more about RE here.thnx.

regards

  RemotePush     March 6, 2008 03:17.58 CST
Thank you for your replies.

Aeppert, I agree I will need to read and learn a lot, unfortunatly with a full time job and a busy social life it is not always easy to find the time.

b0ne, thankfully i have a faily good grounding in C and have at least a basic understanding of ASM.

RolfRolles, you make it sound so easy :) I really like the idea of identifying and reproducing a vulnerability from an advisory, this is something i will definatly try.

If anyone else has any nuggets of wisdom they would like to share it would be appreciated. Thank you all for your input.

Remote

  morel     March 6, 2008 06:57.05 CST
If you are not familiar with asm, then try some simple crackmes from crackmes.de, it's a good place to start.

  aeppert     March 6, 2008 09:12.50 CST
Given you are a Computer Science graduate you likely know or should know (realizing that coursework varies like the utter wind everywhere) C in some capacity.  You should have a fundamental understanding of operating systems (at least from the academic standpoint) and likely a rudimentary understanding of hardware (you do know what a register is?) - then you have a fairly solid basis for learning the "rest."

Absolute fundamental requirements, in my experience, for someone embarking on RCE as far as fundamental school work is concerned:
  1) Data Structures
  2) Operating Systems
  3) Introduction to Logic Design (has an infinite number of names)
  4) Computer Architecture
  5) Discrete Math
  6) Linear Algebra
  7) Programming Language Concepts (again, infinite number of different names for the same idea)

Now, with that said, I know an unbelievably skilled RE individual who happens to be an amazing programmer that has a degree in English.  So, what it boils down to is exactly what Rolf stated: "just doing it."   Some folks have the aptitude to learn RCE and some do not and it is absolutely not a reflection of intelligence or lack there of.  It is a skill like any other (not everyone can hit a golf ball 300yards, some can without a problem.)

Lastly, I do not recommend going into RCE for money alone.  Yes, like any advanced skillset it can pay well, but unless you truly like it, the tasks become repetitive and nit picky at best, painful and self-abusive at the worst.  Plus, in my experience burnout is an epic problem - it can get very old taking something apart day in and day out and if you enjoy creating versus disassembling it can become disheartening after awhile.

Not sure how much wisdom that imparts, but it certainly filled up the screen.  I have been doing this stuff for a long while and have helped train a lot of folks and went through the process myself.  I would say the overwhelming "success rate" (which I would define as those who continued doing this type of work and enjoying it) at around 1 in 15 at the most.

  Raindog     March 21, 2008 20:39.53 CDT
That's why game hacking is pretty fun. The targets are not very complex for the most part, and you get to do both disassembling and creating =)

  nezumi     March 24, 2008 15:49.35 CDT
btw, reversing of jvm or mscil code is very far from hardware and OS internals, you just have to know virtual machine architecture and op-code, this is all. jvm is very popular, mscil is going to be popular in the next few years, so...

disassembling native machine code is more complicate thing of course, especially if we're talking about the whole set: x86, x86-64, windows PEs, unix ELFs, kernel APIs/SYS-calls, libraries, packers, anti-reversing tricks, etc. to learn all this stuff you have to spend days and nights inside debuggers and disablers, "smoking" manuals and specifications and you have to compete against other reversers (who have spent their last five-six-eight-ten- years in this stuff) in trade, since they reverse code faster than you and agree to work for fewer money.

how to find a good job? well, it's easy. everyone in commuter industry wants something. someone wants to steal binary code, someone wants to understand how to interact with a closed-source program, someone wants to find their own bug, having only memory dump and knowing nothing about assembler, someone wants to reverse suspicious code to be sure if it's malware or not (or, well, it might be ad-ware or spy-ware).

I was into RE for years (about 10, maybe even more) and I'd never been out of business, work goes on and on, this will never end. I don't know much about US and UK, I prefer to work with Europe and Asia (mostly due to laws, I'm not a lawyer, but seems RE is illegal in US/UK and OK in Europe and Asia, however, I'm not sure about it).

the people who can reverse non-x86 code are very valuable (for example, who knows how ARM code looks like :-)

so, if you're interesting in RE - you have a future, no doubts!

  daniellewis     March 24, 2008 19:00.03 CDT
I'm both a scripter (for a bank) and a reverser, so it's an interesting dichotomy.  I reverse under the premise that "if you can't open it, you don't own it".  It's about making my computer *my* tool, and not the tool of a bunch of companies.

I wrote a script that reversed everything on my home system from the hardware up, and helped me to strip out obfuscation code.  As a result, everything on my system is significantly faster and smaller.

I've thusfar refused to release the script though because of concern about the reaction to it, but the trick is to follow EIP, and record the instruction there in a control-flow-tree structure.  Add nodes when EIP goes somewhere it hasn't been.  Note addresses that are data accessed.  At the end, you reduce the flow-tree, and then dump it.  The cool thing is that with your mnemonic/opcode table, you can dump the tree to either source or directly back to machine code.

Do that, and you'll figure out what else needs to be done rather quickly.

  j4s0n     August 17, 2008 17:42.23 CDT
Does anybody here have experience with vulnerability bounty programs, like the Zero Day Initiative?  I'm self educated and taking it upon myself to become capable of finding vulnerabilities, but that only works as a job if I can get paid for them.

I would think that, even if the pay per flaw wasn't as good, it would give credibility to a pen testing company.  But, I have no experience in the field yet.

Note: Registration is required to post to the forums.

There are 31,328 total registered users.


Recently Created Topics
[help] Unpacking VMP...
Mar/12
Reverse Engineering ...
Jul/06
let 'IDAPython' impo...
Sep/24
set 'IDAPython' as t...
Sep/24
GuessType return une...
Sep/20
About retrieving the...
Sep/07
How to find specific...
Aug/15
How to get data depe...
Jul/07
Identify RVA data in...
May/06
Question about memor...
Dec/12


Recent Forum Posts
Finding the procedur...
rolEYder
Question about debbu...
rolEYder
Identify RVA data in...
sohlow
let 'IDAPython' impo...
sohlow
How to find specific...
hackgreti
Problem with ollydbg
sh3dow
How can I write olly...
sh3dow
New LoadMAP plugin v...
mefisto...
Intel pin in loaded ...
djnemo
OOP_RE tool available?
Bl4ckm4n


Recent Blog Entries
halsten
Mar/14
Breaking IonCUBE VM

oleavr
Oct/24
Anatomy of a code tracer

hasherezade
Sep/24
IAT Patcher - new tool for ...

oleavr
Aug/27
CryptoShark: code tracer ba...

oleavr
Jun/25
Build a debugger in 5 minutes

More ...


Recent Blog Comments
nieo on:
Mar/22
IAT Patcher - new tool for ...

djnemo on:
Nov/17
Kernel debugger vs user mod...

acel on:
Nov/14
Kernel debugger vs user mod...

pedram on:
Dec/21
frida.github.io: scriptable...

capadleman on:
Jun/19
Using NtCreateThreadEx for ...

More ...


Imagery
SoySauce Blueprint
Jun 6, 2008

[+] expand

View Gallery (11) / Submit