I have been fuzzing Adobe Reader for a while now.

One of the issue that I face is running multiple instances of same application. If I'm able to run multiple instances of same application, I will be utilizing my CPU cycles efficiently.

But, the issue is, applications like Adobe Reader, does not allow multiple instances.

Is there any way by which I can run multiple instances of application that does not support multiple instance and fuzz them efficiently.

Actually, I'm trying to find ways by which I can achieve my goals.

One of the idea is to hook functions.

Please share your views and opinions.

  • For fuzzing or vulnerability analysis it might taint your envoirment and thus your fuzzing surface. I'd recommend you'd use vargrant or something like that to spawn a fuzzing farm quickly and painlessly.
    – Stolas
    Commented Aug 27, 2014 at 10:04
  • The simplest way is to run each instance under a separate user account.
    – QAZ
    Commented Aug 27, 2014 at 10:07
  • Virtual machines will help you.
    – w s
    Commented Aug 27, 2014 at 10:09
  • Actually, I'm fuzzing using VMs'. I'm trying to find a way to develop application containers that can run multiple instance of same application. So, that I can fuzz multiple instances of software (Adobe) in same virtual machine.
    – john4tech
    Commented Aug 27, 2014 at 10:18

1 Answer 1


Adobe Reader uses the following two methods to determine if another instance is running:

  • CreateSemaphoreW(NULL, 0, 1, L"Acrobat Viewer") followed by GetLastError() == ERROR_ALREADY_EXISTS
  • FindWindowW(L"Acrobat Viewer", NULL) != NULL

So as long as you hook those two functions appropriately or patch the code that performs those checks, you will be able to run multiple instances of Adobe Reader.

  • thank you. But I'm looking for a generic way of doing this. I want to make a container which can run multiple instances of most of the apps. Just like application virtualization (do you think that this will be a good approach for fuzzing?).
    – john4tech
    Commented Aug 28, 2014 at 7:07
  • Also CreateMutex(W/A) may be used in the same manner as CreateSemaphore(W/A)
    – ST3
    Commented Aug 28, 2014 at 13:36
  • @john4tech: The approach I described above will be more performant than a generic solution, which as I'm sure you know is very important when fuzzing. Unless you're looking to fuzz dozens of different applications (for which manual analysis might be too time-consuming), I'd recommend using application-specific hooks/patches. Commented Aug 28, 2014 at 14:31
  • @jason-geffner yes, my aim is to fuzz dozens of applications which run in single instance mode. It's time consuming to look into each application and make patch for it. That's why I'm looking for a generic solution.
    – john4tech
    Commented Sep 1, 2014 at 6:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.