Do C++ raczej nie znajdziesz, ale są dostępne dekompilatory generujące pseudo C.
Jeden, to IDA Disasembler. https://www.hex-rays.com/products/decompiler/ Ten wydaje się być dobrym produktem, ale niestety z tego, co pamiętam licencja jest płatna co roku.
Jest jeszcze wiele innych dekompilatorów. Wystarczy wpisać w Google "C decompiler", ale jak na razie nie znalazłem takiego, co by mnie zadowalał - chyba wszystkie były w wersji alpha.
Oczywiście podczas dekompilacji nie odzyskasz nazw zmiennych, albo funkcji. No chyba, że zostawisz symbole debuggera, ale to raczej tylo wtedy, gdy to twój program. Również liczby będą w większości przypadków już wyliczone, więc nie dostaniesz wyrażenia 7 * 3, tylko 0x15 - narzędzia do RE zazwyczaj pokazują liczby w hexa.
Ogólnie polecam ci te same materiały, co Eryk. Jesli nauczysz się RE, to asembler nie będzie problemem. Wtedy powinien wystarczyć jakiś prosty dekompilator, który by ci tylko pomógł zrozumieć przepływ informacji w skomplikowanej funkcji.
@edit Zauważ też, że dekompilator może czasem skomplikować sprawę. Przykładowo w tym: http://crackmes.de/users/issogoo/keygenme_3 crackme występuje operacja XOR operująca na 4 zmiennych char jako jednej int, co oczywiście zmienia wynik w zależności od tego, czy procesor pracuje w Little, czy w Big Endian. Dekompilator musiał by tutaj urzyć unii, ale samo rozpoznanie czegoś takiego mogło by być problematyczne, więc czasem lepszy jest zwyczjny disasembler.