Statically Reverse Engineering Shellcode - IDA to Ghidra
Próbuję postępować zgodnie z tym samouczkiem, który używa IDA w swoim przykładzie. https://0ffset.net/reverse-engineering/malware-analysis/common-shellcode-techniques/
Hash: 9d7e34250477acf632c6c32fc2c50d3b
W przykładzie po odszyfrowaniu etapu 2 jest to wynik:
Kiedy powtarzam te same kroki z Ghidrą, otrzymuję następujący wynik:
Śledziłem montaż, próbując sprawdzić, czy mogę dowiedzieć się, co jest nie tak lub co się dzieje, ale jeszcze bez rezultatów.
Szukając trafiłem na te referencje: https://c9x.me/x86/html/file_module_x86_id_139.html https://en.wikipedia.org/wiki/HLT_(x86_instruction)
Byłbym wdzięczny, gdyby ktoś wskazał mi właściwy kierunek.
EDYCJA: Po tym, jak Paweł Łukasik zwrócił uwagę na mój błąd, działa:
Odpowiedzi
Zaczynając od adresu, 0x56wydaje się, że wszystkie instrukcje są wyłączone. A jeśli przyjrzysz się uważnie, zobaczysz wzór, jak bardzo różnią się one od oryginału.
Na przykład przy przesunięciu 0x58powinno być push edxtak, że bajt powinien być 0x52, ale masz, push espktóry jest 0x54. Ponieważ artykuł wspomina, że ta część jest zaszyfrowana za pomocą xor (z kluczem jednocyfrowym), zobaczmy, jak te wartości są wyłączone
In [7]: 0x52 ^ 0x54
Out[7]: 6
Więc to jest dokładnie ten klucz, o którym mowa w artykule. Jeśli porównamy resztę tych poza instrukcją, zauważymy, że mają tę samą wartość.
Wniosek - ta część kodu pokazana w Ghidrze nie została odszyfrowana i powinna zostać wstępnie przetworzona przed analizą.