
๐ URI ๊ฒ์ฆ์ ์ํ ๊ฒฝ๋ ๋ณด์ ์ค์ผ์คํธ๋ ์ดํฐ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก, ๋งํฌ ์์ ์ฑ์ ์ค์๊ฐ์ผ๋ก ์ง๊ณํ๊ณ ๊ฒ์ฆํ๋ ํตํฉ ๋ค์ค ์์ง ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํฌ๊ด์ ์ธ URL ๋ณด์ ๋ถ์์ ์ํ ์ต์ Android ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก, ์ฌ๋ฌ ์ํ ํ์ง API์ ๊ณ ๊ธ ๋๋ฉ์ธ ์คํธํ ํ์ง๋ฅผ ๊ฒฐํฉํ์ฌ ์ฌ์ฉ์๋ฅผ ์ ์ฑ ์น์ฌ์ดํธ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค.
๋ฃจํธ ๋๋ ํฐ๋ฆฌ์ secrets.properties ํ์ผ์ ์์ฑํ์ธ์:
ABUSEIPDB_API_KEY=your_abuseipdb_key
VIRUSTOTAL_API_KEY=your_virustotal_key
URLSCAN_API_KEY=your_urlscan_key
์ค์: ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ API ์ ๊ณต์ ์ฒด์ ์๋น์ค ์ฝ๊ด์ ์ค์ํด์ผ ํฉ๋๋ค:
์ ์ฅ์ ํด๋ก
git clone <repository-url>
cd olyx
API ํค ๊ตฌ์ฑ
cp secrets.properties.example secrets.properties
# Edit secrets.properties with your API keys
๋น๋ ๋ฐ ์คํ
./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)
app/src/main/res/raw/legitimate_domains.txt ํ์ผ์ ํธ์งํ์ธ์:
yourbank.com
yourbank.fr
yourbusiness.com
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
}
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
ํต๊ณ์ ํธ์ฐจ ๋ถ์ ์ฌ์ฉ:
Base Score = Average(API Scores)
Penalty = Suspicion Level ร 0.5
Final Score = max(0, Base Score - Penalty)
๋ฌธ์์ด ๊ฐ ์ต์ ํธ์ง ์ฐ์ฐ(์ฝ์ /์ญ์ /๋์ฒด)์ ๊ณ์ฐํ์ฌ ํ์ดํฌ์ค์ฟผํ ์ ํ์งํฉ๋๋ค.
์ด ํ๋ก์ ํธ๋ GNU Affero General Public License v3.0์ ๋ฐ๋ผ ๋ผ์ด์ ์ค๊ฐ ๋ถ์ฌ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE๋ฅผ ์ฐธ์กฐํ์ธ์.