All Projects
Reverse EngineeringWindows InternalsGhidraFridaKernel Drivers

Respondus LockDown Browser Research

A concluded reverse-engineering study of Respondus LockDown Browser 2.1.5.01, mapping environment classification, protected control flow, and Windows kernel-driver behavior.

Archived5 min readSeptember 2026

This research is concluded. I set out to understand how Respondus LockDown Browser 2.1.5.01 classifies its environment, records internal detection state, and divides responsibility between user-mode components and its Windows kernel driver.

The result is an evidence-graded technical record rather than a finished exploit. This is independent research, unaffiliated with Respondus. The public repository contains my notes and findings, does not include the analyzed binaries, and does not provide a working examination-security bypass. A YouTube breakdown of the research is planned.

The Research Target

The analyzed build was made up of three main components:

The initial question sounded narrow: how does this version detect a virtual machine? The evidence quickly showed that there was no single VM check to find. Environment classification was distributed across hardware identity, Windows device inventory, BIOS and registry values, process and module paths, sessions, runtime artifacts, and kernel-visible activity.

How I Investigated It

I combined static and dynamic analysis instead of trusting one decompiler view or one runtime observation.

I labeled findings as confirmed only when they were supported by static structure, runtime data, API use, tracing, or reconstructed control flow. Anything that did not reach that bar remains explicitly open in the research log.

What I Mapped

The clearest result was a much better model of the environment-classification pipeline.

I recovered a 26-entry device-prefix collection covering indicators associated with Parallels, VMware, VirtualBox, QEMU, Xen, VirtIO, AWS, and Wine. I also mapped related checks against device descriptions, friendly names, BIOS values, system-manufacturer data, CPU identity, and COM device names.

Three non-zero internal rldbvm states emerged from the analysis:

A separate rldbdetect mechanism records broader hack or tamper conditions. One useful architectural finding was that a runtime artifact collection can contribute to both VM classification and general detection state, so those systems are related rather than perfectly isolated.

User Mode, Kernel Mode, and Telemetry

The kernel component is not just a passive service. LockDownService215.sys registers as a filesystem minifilter and imports callbacks for process creation, thread creation, and image loading. The analyzed components also expose the capability for user-mode and kernel-mode communication.

At the same time, I was careful not to turn capability into a claim about policy. I found direct readers that serialize VM state into telemetry or status data, but I did not confirm the final consumer that turns every classification into an enforcement decision. That distinction is one of the most important outcomes of the project: finding a detection flag is not the same as proving what the application ultimately does with it.

The Protected Control Flow

Some of the hardest regions used deliberate control-flow protection that made ordinary function boundaries unreliable. The techniques I confirmed included:

Manually following those chains established how the protection worked, but eventually produced less information about the application's behavior than tracing state, policy, and operating-system effects. That changed the direction of the research rather than invalidating it.

Where Dynamic Analysis Stopped Helping

Direct Frida spawning interfered with startup and authentication. Attaching after a normal launch also caused the instrumented processes to terminate shortly after hooks were installed.

I documented that instrumentation-sensitive behavior and did not attempt to defeat it. From there, I leaned more heavily on static reconstruction, previously recovered runtime data, external observation, and non-invasive tracing.

Why I Concluded the Research

The project reached a natural point of diminishing returns. The high-level architecture, major VM-state writers, device and registry indicators, shared detection state, kernel capabilities, and obfuscation strategy were documented. The remaining questions would require substantially more time in protected dispatcher chains and an unmapped user/kernel protocol.

Those open questions are preserved instead of being papered over:

Stopping here was part of doing the research honestly. The repository distinguishes what I observed, what I reconstructed, and what I still could not prove.

Published Notes and Upcoming Video

The complete evidence log, address-level notes, confirmed-versus-open matrix, and credits are available in the public research repository. Research by arcticdev00 on an earlier version provided a valuable starting point for this investigation.

I will turn the work into a YouTube video that explains the investigation at a more approachable level. Until that is published, the repository is the canonical technical record.

Back to projectsDiscuss this project →