
Desktop development with C++ workload when installingAdditionally (optional), for a fuller reversing experience, setup symbols:
setx _NT_SYMBOL_PATH c:\Symbols;srv*c:\Symbols*https://msdl.microsoft.com/download/symbols
mkdir \symbols
Open PMD.sln within Visual Studio.
Select the setup project, and ensure you can:
a. Compile the project
b. View the debug print statement within DebugView++.
Update the template project compiler and linker flags to manipulate the IAT entries and other PE properties.
a. Get comfortable with dynamic API resolution and MSDN docs.
b. Are there any other properties that stand out? If you run Strings.exe against the binary, do any strings stand out?
c. Can you remove/update them?
Use any tooling of your choice to complete the exercise (e.g. dumpbin/PE Bear). A wrapper around pefile has been provided under scripts\props.py (make sure to install the reqs).
Download some malware samples from VXUG
a. What are the main differences between benign and malicious executables?
b. What are the main differences between our binary and benign executables?
The current API hashing algorithm used is fnv1a.
solution project and call MessageBoxA using the API hashing framework.Download Cisco Webex (https://www.webex.com/downloads.html)
Find CiscoCollabHost and see what DLLs get loaded
Open CiscoCollabHost in Ghidra and identify different ways to get code execution from sideloading
Edit the dll_template to sideload your target binary. Verify you can see the debug string in DebugView++.
Update the LastWriteTime and CreationTime of dll_template.dll to match the target DLL.
Compile and run the utility project.
a. Additionally, consider running it on your host system.
Copy the identified DLL to the x64/{Debug,Release} directory and update the loader code.
Update execute_sc to execute your shellcode with a different function with the API hashing framework.
Sign up for a cloud storage provider (e.g. AWS/CloudFlare)
Package your payload and upload it
a. Additionally, investigate ways to limit/audit download access
Take a snapshot of your VM
Revert to the base VM and play your full "delivery" scenario
.github\workflows\build.yml to do additional pre/post processing as you want that saves time. Here are some ideas:
props.py and validate/include the outputLastWriteTime and CreationTime to match a target