Tuesday, January 23, 2024

Emulating Shellcodes - Chapter 2

 Lets check different  Cobalt Strike shellcodes and stages in the shellcodes emulator SCEMU.




This stages are fully emulated well and can get the IOC and the behavior of the shellcode.

But lets see another first stage big shellcode with c runtime embedded in a second stage.


In this case is loading tons of API using GetProcAddress at the beginning, then some encode/decode pointer and tls get/set values to store an address. And ends up crashing because is jumping an address that seems more code than address 0x9090f1eb.

Here there are two types of allocations:


Lets spawn a console on -c 3307548 and see if some of this allocations has the next stage.

The "m" command show all the memory maps but the "ma" show only the allocations done by the shellcode.



Dumping memory with "md" we see that there is data, and dissasembling this address with "d" we see the prolog of a function.

So we have second stage unpacked in alloc_e40064


With "mdd" we do a memory dump to disk we found the size in previous screenshot,  and we can do  some static reversing of stage2 in radare/ghidra/ida

In radare we can verify that the extracted is the next stage:


I usually do correlation between the emulation and ghidra, to understand the algorithms.

If wee look further we can realize that the emulator called a function on the stage2, we can see the change of code base address and  is calling the allocated buffer in 0x4f...



And this  stage2 perform several API calls let's check it in ghidra.


We can see in the emulator that enters in the IF block, and what are the (*DAT_...)() calls

Before a crash lets continue to the SEH pointer, in this case is the way, and the exception routine checks IsDebuggerPresent() which is not any debugger pressent for sure, so eax = 0;



So lets say yes and continue the emulation.


Both IsDebuggerPresent() and UnHandledExceptionFilter() can be used to detect a debugger, but the emulator return what has to return to not be detected. 

Nevertheless the shellcode detects something and terminates the process.

Lets trace the branches to understand the logic:


target/release/scemu -f shellcodes/unsuported_cs.bin -vv | egrep '(\*\*|j|cmp|test)'



Continuing the emulation it's setting the SEH  pointer to previous stage:


Lets see from the console where is pointing the SEH chain item:


to be continued ...


https://github.com/sha0coder/scemu






Related posts


  1. Hack Tools For Mac
  2. Tools For Hacker
  3. Pentest Tools Open Source
  4. Hack Website Online Tool
  5. Hacking Tools For Mac
  6. Beginner Hacker Tools
  7. Hacking Tools Pc
  8. Pentest Tools For Mac
  9. Hacker Tools
  10. Hacking Tools For Windows Free Download
  11. Pentest Tools For Mac
  12. Tools Used For Hacking
  13. Hacking Tools Download
  14. Hacker Tools Github
  15. Hack Tools For Games
  16. Hacking Tools Download
  17. Hacking Tools Name
  18. Hack Tools Mac
  19. Pentest Tools For Mac
  20. Hacker
  21. Hacking Tools Usb
  22. Hacking Tools Windows 10
  23. Pentest Tools Website
  24. Hacking Tools Name
  25. Hack Tools
  26. Hacking Tools For Mac
  27. Pentest Recon Tools
  28. How To Make Hacking Tools
  29. Hacking Tools Windows 10
  30. Wifi Hacker Tools For Windows
  31. Pentest Tools Online
  32. Hack Tools Mac
  33. What Is Hacking Tools
  34. Pentest Box Tools Download
  35. Pentest Tools Subdomain
  36. Underground Hacker Sites
  37. Hacking Tools For Pc
  38. Hacker Tools Software
  39. Hacker Tools Free Download
  40. Pentest Tools Tcp Port Scanner
  41. Hack Tool Apk No Root
  42. Pentest Tools Download
  43. Hackers Toolbox
  44. Pentest Tools Open Source
  45. Hacker Security Tools
  46. Pentest Tools Subdomain
  47. Nsa Hack Tools
  48. Hack Apps
  49. Pentest Tools Bluekeep
  50. Hacking Tools For Windows 7
  51. Install Pentest Tools Ubuntu
  52. Hack Tools For Pc
  53. Hacker Tools Apk Download
  54. Hacking Tools Download

No comments:

Post a Comment