Malware Samples - PMA Chapter 9

16 Jan 2026

Chapter 8 explained some of the details about dynamic analysis using debuggers including different types of breakpoints, single-stepping instructions, stepping-over vs. stepping-into, etc. The labs in Chapter 9 provide some practice in user-mode debugging with OllyDbg.

Samples:

  1. Malware Sample 1
  2. Malware Sample 2
  3. Malware Sample 3

Questions:

  1. How can you get this malware to install itself?
  2. What are the command-line options for this program? What is the password requirement?
  3. How can you use OllyDbg to permanently patch this malware so that it doesn't require the special command-line password?
  4. What are the host-based indicators of this malware?
  5. What are the different actions this malware can be instructed to take via the network?
  6. Are there any useful network-based indicators for this malware?

Questions:

  1. What strings do you see statically in the binary?
  2. What happens when you run this binary?
  3. How can you get this sample to run its malicious payload?
  4. What is happening at 0x00401133?
  5. What arguments are being passed to the subroutine 0x00401089?
  6. What domain name does this malware use?
  7. What encoding routine is being used to obfuscate the domain name?
  8. What is the significance of the CreateProcessA call at 0x0040106e?

Questions:

  1. What DLLs are imported by Lab09-03.exe?
  2. What is the base address requested by DLL1.dll, DLL2.dll, and DLL3.dll?
  3. When you use OllyDbg to debug Lab09-03.exe, what is the assigned base address for DLL1.dll, DLL2.dll, and DLL3.dll?
  4. When Lab09-03.exe calls an import function from DLL1.dll, what does this import function do?
  5. When Lab09-03.exe calls WriteFile, what is the filename it writes to?
  6. When Lab09-03.exe creates a job using NetScheduleJobAdd, where does it get the data for the second parameter?
  7. While running or debugging the program, you will see that it prints out three pieces of mystery data. What are the following: DLL 1 mystery data, DLL 2 mystery data, and DLL 3 mystery data?
  8. How can you load DLL2.dll into IDA Pro so that it matches the load address used by OllyDbg?



Conclusion

This chapter gave me a lot of good practice with dynamic analysis using OllyDbg. Using dynamic analysis, I was able to avoid the tedious process of manually reverse engineering a deobfuscation routine and letting the program decode the C2 URL for me. This was a great way to learn my way around OllyDbg so that I can view dynamic data such as where DLLs have actually be loaded in memory and also allows me to verify findings from static analysis. I also learned how to patch binaries so that in certain cases like password protection, the password does not need to be known at all!


Feedback is welcome and encouraged! Please leave a comment below: