Question: I'm really interested in learning reverse engineering. Especially in regards to malware. Any help is much appreciated 

What should I learn before I start to learn reverse engineering? 

Is learning C/C++ a MUST?

Should I learn Assembly language?

If I know nothing about reverse engineering, is Ghidra a good tool to learn with or should I become familiar with IDA and OllyDbg first?

Any good sources/tutorials in particular that you recommend?

Answer: 
> 
> What should I learn before I start to learn reverse engineering? 
> 
> 
> 

**Assembly is a must**. Without deep understanding of assembly you cannot reverse engineer anything seriously. Additionally, you'll have to become familiar with relevant tools, depending on the platform; not knowing every detail of them, just basic use - you will learn more complex things in practice when you need them. I strongly recommend you to read this forum: you can, for instance sort questions by votes and read best answers - this way you'll get a basic insight on the topic.

> 
> Is learning programming with C/C++ a MUST?
> 
> 
> 

If you **really** don't want to - no, but it's **highly recommended**. There are several reasons for it:

1. Most of malware is written in `C/C++`.
2. Decompilers will usually produce output in `C` or pseudo-`C` form, so it will be easier to understand it.
3. Writing small, test programs in `C/C++` and observing produced assembly is **very** helpful in learning reverse engineering - you will get familiar with basic constructions, like calling conventions, loops, if-else or switch blocks, tricks performed for code optimization and many, many more.
4. You will be able to analyse several malware source codes available in the Internet (see 1.).
5. If you know the tool, you know what to expect from programs written in it.

> 
> If I know nothing about reverse engineering is Ghidra a good tool to learn with or should I become familiar with IDA and OllyDbg first?
> 
> 
> 

I would say, start with IDA. Why? Because it's probably the most widely used disassembler. Additionally, if you think of a job related to reverse engineering, you may often find familiarity with IDA as a requirement. Finally, from my personal experience (I started with IDA), it's very **user friendly**, so you can fully focus on reverse engineering without focusing too much on **how** to use a tool.

OllyDbg is a tool for dynamic analysis and you should start with static one (without running a program), since you'll have to **fully understand the assembly** to benefit from debugger. But of course you should learn it at some moment.

> 
> Any good sources/tutorials in particular that you recommend I have a look at?
> 
> 
> 

Two books: [Reverse Engineering for Beginners](https://beginners.re/) and [Practical Malware Analysis](https://repo.zenk-security.com/Virus-Infections-Detections-Preventions/Practical_Malware_Analysis.pdf) - you will get **a lot of knowledge** if you read them. To see malware reverse engineering in practice, you can do the [course on cybrary.it](https://www.cybrary.it/course/malware-analysis/).
First of all, welcome to the fascinating and frustrating world of malware reversing.

> 
> What should I learn before I start to learn reverse engineering?
> 
> 
> 

I believe that the best way is start to learn basic reverse engineering and improve as you go.

> 
> Is learning programming with C/C++ a MUST?
> 
> 
> 

No, it's not a "MUST." However, if you don't know how to program, you will become easily frustrated. Let's think about it for a second, what's malware reverse engineering? Its the process of taking samples (binaries) or other forms of malicious code and trying to understand how the code was written, what its purpose and how it achieves it. 
If you don't know how to program you are going to find it very difficult to reverse back code. 

> 
> If I know nothing about reverse engineering is Ghidra a good tool to learn with or should I become familiar with IDA and OllyDbg first?
> 
> 
> 

I would not recommend this tool, to begin with. You should probably start with a more fundamental approach, such as I described [here](https://reverseengineering.stackexchange.com/questions/20984/most-efficient-way-to-begin-analyzing-malware-binary/21009#21009).

Also, you probably want to go over the following StackExchange threads and for tutorials and learning paths:

* [Becoming a malware analyst](https://security.stackexchange.com/questions/36331/becoming-a-malware-analyst)
* [How to get started as a malware analyst](https://security.stackexchange.com/questions/91309/how-to-get-started-as-a-malware-analyst)