Skip to content

Stealth Mode

Stealth mode provides human-like interaction simulation to reduce bot detection risk. It adds randomization to the three most detectable ADB operations: taps, swipes, and typing.

Adds Gaussian jitter to tap coordinates. With sigma=8, 68% of taps land within +/-8px and 95% within +/-16px of the target.

def stealth_tap(self, x, y, delay=0.6):
jx = x + random.gauss(0, 8) # sigma=8
jy = y + random.gauss(0, 8)
self.tap(int(jx), int(jy), delay=delay)

stealth_swipe(x1, y1, x2, y2, ms=None, delay=0.5)

Section titled “stealth_swipe(x1, y1, x2, y2, ms=None, delay=0.5)”

Variable swipe speed (300-700ms instead of fixed 500ms) with smaller endpoint jitter (sigma=5).

def stealth_swipe(self, x1, y1, x2, y2, ms=None, delay=0.5):
ms = ms or random.randint(300, 700)
jx1 = x1 + random.gauss(0, 5)
jy1 = y1 + random.gauss(0, 5)
jx2 = x2 + random.gauss(0, 5)
jy2 = y2 + random.gauss(0, 5)
self.swipe(int(jx1), int(jy1), int(jx2), int(jy2), ms=ms, delay=delay)

stealth_type(text, delay_range=(0.05, 0.2))

Section titled “stealth_type(text, delay_range=(0.05, 0.2))”

Types each character individually with random inter-keystroke delays of 50-200ms.

def stealth_type(self, text, delay_range=(0.05, 0.2)):
for char in text:
self.adb("shell", "input", "text", char)
time.sleep(random.uniform(*delay_range))

The stealth methods are thin wrappers that add noise, then delegate to the standard Device methods. No state is maintained between calls — each invocation independently samples from the random distribution.

Caller: d.stealth_tap(540, 1200)
|
v
Apply Gaussian jitter: x += gauss(0, 8), y += gauss(0, 8)
|
v
d.tap(jittered_x, jittered_y)
|
v
adb shell input tap <x> <y>

Beyond the three explicit methods, other components apply their own randomization:

ComponentTechnique
Outreach botRandom DM delay: uniform(45, 75) seconds
Engage botRandomized watch times (3-15s), jittered coordinates
Upload botStrips non-ASCII to avoid IME detection
All botsVariable time.sleep() between actions
VectorAddressedRisk
Pixel-perfect coordinatesYes (Gaussian jitter)Low
Uniform tap timingPartially (delay param is per-call)Medium
Linear swipe pathsNo (endpoints jittered but path is linear)High
IME switching detectionMitigated (quick switch-back)Medium
Settings.Secure.DEFAULT_INPUT_METHODKnown risk, deferredMedium
USB debugging enabledCannot address in softwareLow
  • Not auto-applied — you must explicitly call stealth_* methods
  • No Bezier curve swipe paths
  • No per-session randomization profiles (same parameters every run)
  • The engage bot has its own jitter logic rather than using these methods