~home /projects #blog $lab >logbook @connect
zeroxv6.space/lab
--:--:--

THE
LAB_

Half-finished ideas. Proof-of-concepts. Code that works but isn't clean enough for a project page. Tools I built for myself that might be useful to someone else.

experiments & pocs6 items
LAB-002
DEX Header Parser in 200 Lines
Minimal DEX file format parser. Reads header, string table, type IDs, method IDs — zero library dependencies. Educational: understanding what jadx does under the hood.
LAB-003
Composable Drag-Handle Resizing
Jetpack Compose has no built-in resizable pane. Proof-of-concept drag handle that survives configuration changes using a custom Modifier.
LAB-004
ART Method Tracing Without Android Studio
Using Debug.startMethodTracing() programmatically and parsing the .trace output with Python. Lighter than the profiler for targeted method tracing.
LAB-005
SQLite WAL Forensics
Android apps leave WAL files with recoverable deleted rows. Script that parses WAL files and reconstructs deleted data — useful for app forensics and security auditing.
LAB-006
Custom Kotlin Compiler Plugin
Experimenting with Kotlin compiler plugins for automatic null-assertion logging at compile time. Currently crashes on data classes with generic type parameters.
live tool · string encoder / decoder
runs locally, nothing sent anywhere
input
output
output appears here...
useful snippetscopy freely
Read FD Table
kotlin / android
fun getFds(pid: Int): List<String> =
  File("/proc/$pid/fd")
    .listFiles()
    ?.map { it.canonicalPath }
    ?: emptyList()
Enumerate Loaded DEX
frida js
Java.enumerateClassLoaders({
  onMatch: loader => {
    console.log(loader.toString());
  },
  onComplete: () => {}
});
Parse Binder BWR
python
import struct
def parse_bwr(data):
    ws,wc,wb,rs,rc,rb = \
    struct.unpack('6Q', data[:48])
    return {'write': hex(wb),
            'read':  hex(rb)}