
🔗 Lightweight security orchestrator mobile application for URI vetting, providing a unified, multi-engine interface to aggregate and validate link safety in real-time.
A modern Android application for comprehensive URL security analysis, combining multiple threat detection APIs with advanced domain spoofing detection to protect users from malicious websites.
Create a secrets.properties file in the root directory:
ABUSEIPDB_API_KEY=your_abuseipdb_key
VIRUSTOTAL_API_KEY=your_virustotal_key
URLSCAN_API_KEY=your_urlscan_key
Important: By using this application, you must comply with the Terms of Service of each API provider:
Clone the repository
git clone <repository-url>
cd olyx
Configure API keys
cp secrets.properties.example secrets.properties
# Edit secrets.properties with your API keys
Build and run
./gradlew assembleDebug
./gradlew installDebug
olyx/
├── app/
│ ├── src/main/
│ │ ├── java/com/olyx/
│ │ │ ├── data/
│ │ │ │ ├── Models.kt # ApiResult, HistoryEntry
│ │ │ │ ├── HistoryManager.kt # Persistence logic
│ │ │ │ └── SpoofingDetector.kt # Domain analysis engine
│ │ │ ├── network/
│ │ │ │ └── ApiService.kt # API integrations
│ │ │ ├── ui/
│ │ │ │ ├── components/
│ │ │ │ │ ├── ApiScoreCard.kt # Individual API results
│ │ │ │ │ └── GlobalScoreCard.kt # Aggregate score display
│ │ │ │ ├── screens/
│ │ │ │ │ ├── HomeScreen.kt # URL input
│ │ │ │ │ ├── AnalysisScreen.kt # Results display
│ │ │ │ │ ├── HistoryScreen.kt # Search history
│ │ │ │ │ └── AboutScreen.kt # App information
│ │ │ │ ├── theme/
│ │ │ │ │ ├── Color.kt # Dark theme palette
│ │ │ │ │ ├── Theme.kt # Material3 setup
│ │ │ │ │ └── Type.kt # Typography
│ │ │ │ └── utils/
│ │ │ │ └── ScoreUtils.kt # Scoring algorithms
│ │ │ ├── utils/
│ │ │ │ └── Constants.kt # App constants
│ │ │ └── MainActivity.kt # Entry point
│ │ └── res/
│ │ ├── raw/
│ │ │ └── legitimate_domains.txt # Protected domains list
│ │ └── font/
│ │ ├── gemunulibre_regular.ttf
│ │ └── redhatdisplay_regular.ttf
├── screens/ # Screenshots
├── build.gradle.kts
└── secrets.properties # API keys (not in repo)
Edit app/src/main/res/raw/legitimate_domains.txt:
yourbank.com
yourbank.fr
yourbusiness.com
Modify thresholds in SpoofingDetector.kt:
private fun calculateSuspicion(...): Int {
if (distance == 1) return 90 // Very similar → High risk
if (distance == 2) return 70 // Somewhat similar → Medium risk
if (distance == 3) return 50 // Less similar → Low-Medium risk
}
Update spoofing impact in ScoreUtils.kt:
val penalty = (spoofingResult.suspicionLevel * 0.5).toInt() // 50% of suspicion level
# Run unit tests
./gradlew test
# Run instrumented tests
./gradlew connectedAndroidTest
# Generate coverage report
./gradlew jacocoTestReport
Uses statistical deviation analysis:
Base Score = Average(API Scores)
Penalty = Suspicion Level × 0.5
Final Score = max(0, Base Score - Penalty)
Computes minimum edit operations (insert/delete/substitute) between strings to detect typosquatting.
This project is licensed under the GNU Affero General Public License v3.0. See LICENSE for details.