A native Linux GUI application for comprehensive analysis of Android devices connected via USB.
- Device Detection: Enumerate connected Android devices via ADB
- Device Information: Extract hardware specs, Android version, kernel info
- Root Analysis: Non-intrusive root detection (Magisk, SuperSU)
- Bootloader Status: Check bootloader lock state
- ROM Compatibility: Offline LineageOS compatibility check
- Extended Analysis: SELinux, Verified Boot, OEM Unlock status, A/B slots
- 🔄 Reboot System: Safe reboot to Android (user confirmation required)
- 🔧 Bootloader: Reboot to bootloader/Download Mode (Samsung-aware)
- ⚙️ Recovery: Reboot to recovery mode (user confirmation required)
- 📥 Download Mode: Samsung Download Mode (safe, no data loss)
- ✅ Non-Destructive Only: No flashing, no wipe, no modifications
- ✅ User Confirmation: Every reboot requires explicit confirmation
- ✅ No Auto-Reboot: All operations are manual
- ✅ Samsung Detection: Automatic bootloader mode detection
- ✅ Read-Only Analysis: All queries are safe read operations
- ✅ No Telemetry: Completely local, no internet required
- CMake >= 3.22
- GCC/Clang with C++17 support
- GTK4 development files
- nlohmann/json development files
- GTK4 runtime
- ADB (Android Debug Bridge) - can be provided by user
- fastboot (optional, for bootloader checks)
- Linux x86-64
- USB connection to Android device
- USB debugging enabled on device
Debian/Ubuntu:
sudo apt-get update
sudo apt-get install -y \
cmake \
g++ \
libgtk-4-dev \
nlohmann-json3-devFedora/RHEL:
sudo dnf install -y \
cmake \
gcc-c++ \
gtk4-devel \
nlohmann_json-develArch Linux:
sudo pacman -S \
cmake \
gcc \
gtk4 \
nlohmann-jsoncd /home/mihai/Desktop/LinCheckROOT
mkdir -p build
cd build
cmake ..
cmake --build ../build/lincheckrootOr directly from project root:
./build/lincheckrootConfiguration file: ~/.config/lincheckroot/config.json
Example:
{
"adb_path": "/path/to/custom/adb",
"last_device": "device_serial",
"check_updates": false
}- Scan Devices: Click "Scan Devices" button to enumerate connected devices
- Select Device: Choose a device from the dropdown
- Configure ADB (if needed): Enter custom ADB path in the "ADB Path" field
- Refresh: Click "Refresh Information" to analyze the selected device
- View Results: Check tabs for device info, root status, bootloader status, and ROM compatibility
- Go to Settings > About Phone
- Tap Build Number 7 times to unlock Developer Options
- Go to Settings > Developer Options
- Enable USB Debugging
- Connect via USB and accept the RSA fingerprint prompt on the device
The application is modular:
- adb_abstraction: ADB communication layer with defensive parsing
- device_inspector: Hardware and software information extraction
- root_analyzer: Non-intrusive root detection
- bootloader_analyzer: Bootloader status detection
- rom_compatibility: Offline LineageOS compatibility database
- config_manager: Local configuration management
- gui_main: GTK4 graphical interface
- No telemetry: All operations are local
- No network: Offline operation (except ROM database included locally)
- No automatic installation: Only analyzes, never modifies device
- Clear warnings: Explicit warnings for destructive operations
- Open source: Code is readable and auditable
- Bootloader status requires device in bootloader mode (manual reboot needed)
- Some properties may not be available on all devices
- ROM compatibility database is static (LineageOS devices)
- Parsing of ADB output is defensive against malformed data
- All shell commands use proper escaping
- No elevation to root required (respects user permissions)
- GTK4 provides non-blocking async operations
LinCheckROOT/
├── CMakeLists.txt # Build configuration
├── include/ # Header files
│ ├── adb_abstraction.h
│ ├── device_inspector.h
│ ├── root_analyzer.h
│ ├── bootloader_analyzer.h
│ ├── rom_compatibility.h
│ ├── config_manager.h
│ └── gui_main.h
├── src/ # Implementation files
│ ├── main.cpp
│ ├── adb_abstraction.cpp
│ ├── device_inspector.cpp
│ ├── root_analyzer.cpp
│ ├── bootloader_analyzer.cpp
│ ├── rom_compatibility.cpp
│ ├── config_manager.cpp
│ └── gui_main.cpp
├── data/ # Data files
│ └── lineage_devices.json
└── build/ # Build directory
Open source. Audit-friendly code without obfuscation.
- Specify custom ADB path in the GUI
- Or install Android SDK Platform Tools
- Accept RSA fingerprint prompt on device
- Check Developer Options are enabled
- Restart ADB:
adb kill-server && adb devices
- Check USB cable (try different cable)
- Enable USB Debugging in Developer Options
- Check device appears in system with
lsusb
- Connect device and manually reboot to bootloader
- Some devices don't expose bootloader status via ADB