ChRiiLLe, on Jul 3 2005, 10:22 AM, said:
So which one should i start with? What i want to do with those languages is to learn decompiling programs and change things in them (cracking) and write own patches and write own exploits.. I know i have to learn Assembly, but i think i need C or C++ also?
Anyway, you have to learn Assembly. You already know that. Any cracker/reverse engineer SHOULD know assembly, crackers a bit less, since they are looking for the simplest solution. An average cracker's assembly is usually not more than MOV, XOR, ADD, NOP, CALL, JMP, RET, PUSH, POP, SUB and other basic commands. If you want to recover much from the source code, you also have to learn what becomes out of your codes. By C, it's a bit difficult, because every compiler has a different way of creating code. You may think that it's stupid, or weird, but that's the truth. So trying some basic C commands can be useful. But studying MSVCRT40.DLL also brings you the C knowledge, because most standard "pure C" commands are saved there. These are written in the include files like stdio.h. It's been categorized. Other things are just some calculations, or loops, or windows apis. And at the point where C code is not enough, ASM code comes. You open an ASM block, and start coding ASM in C. To find out how they really work, write a simple program, then compile it, and debug it with olly what it does in ASM. Because when you will want to crack delphi apps, or VB apps, you will have to learn their way of compiling, too. Also if your main aim is cracking, then you must know other languages, at least their compiling style.