Originally Posted by
Apoc
C# is not a low level language. (It's far from it)
ASM is pretty much required if you want to do anything really useful.
If you're just learning, and are trying to get into memory editing, start with C++, you'll be happy you started in the harder language down the road. C# is far easier to learn and use, but has some serious drawbacks in the area of memory editing. (Especially when it comes to trying to do things in-process) Granted, C# can do just about everything C++ can do (not including driver/kernel level things, and C++ specific stuff [e.g. struct inheritance, certain operator overloads, typedefs, etc, etc]) so long as you have a proper wrapper around what you're attempting to do. (Yes, function hooking/pseudo-typedefs can be done in .NET [C# only currently, and of course, C++/CLI])
The 3 things you need besides your language, IDA (static reversing), OllyDbg (debugging), and your IDE. Everything else is really just some extra nifty things. (CE, MHS, etc etc, can be helpful at times, but more often than not, Olly can do what they do.)
Personally, I think Visual Studio is the best available IDE for C++/C#/VB, however that's just my opinion. (It is by far the best for C#, since well... MS created C#, they know how to use it's features :P)
Also, if you plan to do memory editing, stay far far away from VB(.NET). The language is not made for that type of stuff, and will never be able to handle it properly.