Oh… please make it stop!

I was recently challenged by trying to collect retail device data and needed a way to stop Hopper. I was running on a standalone device and an unexpected error dialog popped up and Hopper dismissed the dialog before I could take a look. The documentation says I can us the /k option to stop Hopper, but it occurred to me this will only really help me when connected to a debugger. The documentation also states that I can use /txxx to limit Hopper to a certain time, but there is no way to retroactively set this time without starting over.


What I needed was a “kill switch” for Hopper to let me investigate while the problem was occurring, I needed a way to stop Hopper in its tracks. The process is fairly simple if you have a little insider knowledge and the ability to sign binaries. Copy the below sample code, build into a trusted executable and autorun from an SD card to relieve your system of Hopper:




//  The following sample code 'snippet' is provided 'as is' without

//  warranty of any kind either expressed or assumed. No copyright,

//  ownership, or any other claims should be made for this code.


#include "windows.h"


#define STOP_HOPPER_MUTEX  TEXT("MTTF Test Mutex")



    HINSTANCE   hInstance,

    HINSTANCE   hPrevInstance,

    LPWSTR      lpCmdLine,

    INT         nCmdShow )


    HANDLE hMutex;


    if( ! (hMutex = CreateEvent(NULL, FALSE, FALSE, STOP_HOPPER_MUTEX)))


        OutputDebugString(TEXT("ERROR: could not create Hopper Mutex"));

        return 1;



    // Signal Hopper to stop




    return 0;




It may take a few seconds for Hopper to respond to the event, but soon device control will return to the user. Please note that using the above will stop Hopper and Hopper will unload – it is not a “pause” event.


Comments (4)

  1. roboform says:

    I need a miniSD card tomorrow! 😛

    If I have no miniSD card, Remote RAIP invoke is possibile?

  2. shende says:

    Any kind of RAPI calls will depend on your security settings. I have also had luck connecting to ActiveSync and copying the program to local storage. Once on the device one can usually ‘coax’ the file explorer to launch it. Less elegant obviously.

  3. granzon says:

    Is it possible to provide the snippet for stopping the FocusApp as well? 🙂

  4. shende says:

    Well, yes. Since you already have the source to FocusApp you could have it watch for the same event, or create a new event that would signal the end of focusApp.

Skip to main content