IDAStealth Plugin

IDAStealth Plugin

IDAStealth is a plugin which aims to hide the IDA debugger from most common anti-debugging techniques. The plugin is composed of two files, the plugin itself and a dll which is injected into the debuggee as soon as the debugger attaches to the process. The injected dll actually implements most of the stealth techniques either by hooking system calls or by patching some flags in the remote process.

You can grab the plugin only or go for the complete package including the sources and all dependencies.

Consult the readme file on how to install, use and configure the plugin.
The plugin source code should build out of the box, see readme for details.

If you find bugs or want to suggest new features just drop ma a mail.


06/28/2011 - v1.3.3

  • Bugfix: The plugin GUI could crash on Win7 X64 systems
  • Bugfix: If any of the SEH debugging support features was used an "internal error 30191" would be raised in IDA as soon as the exception occurred in the debuggee
  • Bugfix: Injection of the stealth dll failed if the size of the import directory was (intentionally) set to a wrong value
  • Improved: Added profile for the newest version of VMProtect (v2.09)

09/27/2010 - v1.3.2

  • Bugfix: SEH monitoring was not working with IDA versions < v5.7
  • Bugfix: The debug registers could be overwritten by a SEH handler if the respective thread never called SetThreadContext before the SEH handler was invoked

08/23/2010 - v1.3.1

  • Bugfix: The NtClose hook could cause access violations in some situations
  • Bugfix: In some cases, consecutive calls to GetThreadContext could reveal the actual values of the debug registers even when advanced hardware breakpoint protection was enabled
  • Improved: The user can specify custom names for the stealth and RDTSC emulation driver, respectively
  • Some minor fixes and improvements

07/09/2010 - v1.3

  • Added: Added support for the ProcessDebugObjectHandle as well as the ProcessDebugFlags parameters to NtQueryInformationProcess hooks (stealth driver and HideDebugger.dll)
  • Added: The debugger can be automatically halted in the top-level SEH handler, or when a new context has been applied by the OS after returning from a SEH handler
  • Added: Profile for VMProtect has been added
  • Some minor fixes and improvements

02/15/2010 - v1.2.1

  • Bugfix: DoS in SetThreadContext if supplied context was not readable or flags were not writeable
  • Bugfix: Context emulation always used the id of the current thread no matter what thread handle was actually given
  • Bugfix: Incorrect handling of ProcessDebugObjectHandle in hook of NtQueryinformationProcess in stealth driver
  • Bugfix: Possible dead-lock in context emulation
  • Bugfix: IDAStealth would try to connect to the RemoteStealth server if Windbg was selected and would always try to inject the stealth dll for any win32 application regardless which debugger module was used
  • Bugfix: 0xC000007B error when starting .NET app which was compiled with /clr:pure
  • Bugfix: Inter-process communication could fail if process id was reused between debugger runs ("Error while restoring NT headers...")
  • Bugfix: Tick-delta of zero would cause an exception in HideDebugger.dll
  • Improved: Context emulation now hooks the corresponding Nt* APIs instead of the kernel32 functions
  • Improved: GetTickCount + RDTSC increase internal counter by a random value from specified interval

12/15/2009 - v1.2

  • Bugfix: RDTSC driver handling; driver service was not deleted in some rare cases
  • Bugfix: RDTSC driver mode was broken due to recent BSOD fix
  • Improved: IDAStealth can hide from Themida with ultra anti debugging settings
  • Added: New stealth driver

11/24/2009 - v1.1.1

  • Bugfix: Old RDTSC driver version slipped into the last release. The new one is now included
  • Improved: To increase overall stealth, the NT Headers are restored to their original state after the dll has been injected
  • Added: Profile for yoda's Protector added

11/14/2009 - v1.1

  • Bugfix: OpenProcess failed on XP when started from a restricted user account
  • Bugfix: Bound imports directory is only cleared if necessary
  • Bugfix: DBG_PRINT DoS due to improper parameter checking
  • Bugfix: BSOD in RDTSC driver
  • Added: Remote debugging support
  • Added: Profiles support
  • Added: Exceptions with unknown exception code can be automatically passed to the debuggee
  • Added: Inline hooks can be forced to use absolute jumps
  • Improved: GUI has been redesigned to be more usable
  • Improved: AWESOME gfx :)
  • Changed: HideDebugger.ini is now located in the user's directory at:
  • Improved: Whole project compiles with WL4 and "treat warnings as error"

03/25/2009 - v1.0

  • Bugfix: API hook of GetThreadContext erroneously returned the complete context even if the flags specified that only the DRs should be returned. This interfered with newer Armadillo versions
  • Improved: GetTickCount hook now mimics the original API algorithm and allows for controlling the increasing delta
  • Added: RDTSC emulation driver with optional driver name randomization to increase stealthiness. Read these notes carefully before using this feature

09/15/2008 - v1.0 Beta 3

  • Bugfix: NtQuerySystemInformation hook possibly returned wrong error code when handling SystemKernelDebuggerInformation query
  • Bugfix: NtQueryObject hook mistakenly assumed that all object names are zero terminated strings
  • Improved: NtQueryInformationProcess considers the case that the debuggee itself might act as a debugger (see Tuts4You baord)
  • Improved: Exception triggered by NtClose is now blocked in the first place (detailed description)
  • Added: Countermeasures against anti-attach techniques

09/02/2008 - v1.0 Beta 2

  • Bugfix: Due to improper checking of input parameters in the NtQuerySystemInformation hook, the debugged process could raise an exception, finally unveiling the existence of IDA Stealth
  • Bugfix: Hiding of possibly existing kernel debugger now working correctly
  • Bugfix: Fake parent process and Hide IDA from process list are no longer mutual exclusive
  • Bugfix: NtQueryInformationProcess hook accepted too small input buffers
  • Bugfix: NtQueryInformationProcess hook erroneously assumed the process handle to be always that of the current process
  • Bugfix: Exception caused by closing an invalid handle is now properly hidden from the debugged process by using SEH or Vectored exception handling
  • Bugfix: NtSetInformationThread wasn't hooked at all due to a typo
  • Bugfix: Added checks to hook functions so they behave as expected when an invalid handle is passed. Affected functions:
    • NtSetInformationThread
    • SuspendThread
    • SwitchDesktop
    • NtTerminateThread
    • NtTerminateProcess
  • Bugfix: RtlGetVersion returned wrong platform ID and build number
  • Added: Console version of IDA is also hidden from process list

07/24/2008 - v1.0 Beta 1

  • Bugfix: Multiple minor bugfixes
  • Added: Fake OS version
  • Added: Disable NtTerminateThread/NtTerminateProcess

07/14/2008 - v1.0 Alpha 4

  • Bugfix: Injection of stealth dll could fail in some cases (see N-InjectLib)

07/13/2008 - v1.0 Alpha 3

  • Added: Multiple stealth techniques (OpenProcess, DBG_PRINTEXCEPTION, hardware breakpoint protection, hide IDA process and windows, to name but a few)
  • Improved: Overall stealth: xADT as well as Extreme Debugger Detector 0.5 are unable to detect an attached debugger (except for RDTSC based tests and scanning the HDD for various tools)
  • Bugfix: Plugin didn't correctly de-register from debug callback; crashed with newly created databases

07/06/2008 - v1.0 Alpha 2

  • Bugfix: Injection of stealth dll failed if IMAGE_DIRECTORY_ENTRY_IAT of process was zero, so the plugin didn't work with most packed executables
  • Bugfix: NtQueryInformationProcess didn't work (CheckRemoteDebuggerPresent was implicitly affected)

07/04/2008 - v1.0 Alpha

  • First alpha release, some features still missing, needs testing, major bugs
  • Known Bugs:
    • Problems when modifying import directory of packed executables (error 0xC000007B)