Binariyada caawinta OpenVPN way ku guuldareysataa Android 10: oggolaansho la diiday
Android 10 waxay diiddaa inay fuliso caawiye ay abka ku qortay kaydkeeda. Akhri logcat, u gudbi caawiyaha sidii maktabad hooyo ah, oo hagaaji dhismayaasha bundle.
Abku wuxuu ku shaqayn jiray Android 9 wuxuuna ku dhintaa isla telefoonkaas ka dib cusboonaysiinta Android 10. Profiilkaagu ma uusan taaban, shahaadooyinku waa isku mid, burburkuna wuxuu yimaadaa ka hor wax kasta oo taraafikada xaqiijinta. logcat wuxuu marka hore muujiyaa tilmaame eber, dhowr sadar oo ka sarreeyana waxaa yaal Cannot run program ...: error=13, Permission denied. Fariintaas waxay ku saabsan tahay fulinta fayl, ma aha akhrinta dejintaada.
Waxa khaladka 13 run ahaantii diido
Android 10, heerka API 29, waxay joojisay abka inay fuliyaan faylal ay ku qoreen galkooda xogta. Qaanuunku wuxuu bartilmaameedsadaa kayd marka hore la qori karo kadibna la fulin karo, taasna waa si sax ah waxa abuura bilaabaha ka koobiya assets. Dhismayaasha hore ee xudunta ics-openvpn waxay marka hore orodka ka soo saaraan APK-ga fayl la fulin karo openvpn oo ay ku bilaabaan ProcessBuilder. Soo saaristu weli way guulaysataa; la diiday waa fulinta. Abka bartilmaameedsada API 29 wuxuu dhaxlaa qaanuunka xitaa marka uu ku shaqeeyo qalab la soo saaray nooc hore, taasina waa sababta cusboonaysiintu u jajabin karto dhis aan qofna taaban.
Ma jiro wax ku saabsan diidmada oo gaar u ah hal magac galka. Faylka abku ku abuuray galkiisa xogta waxaa loo arkaa mid aan la fulin karin iyadoon loo eegayn wadada, sidaas darteed getFilesDir(), getCacheDir() iyo galka-hoosaad gaar ah dhammaantood isku si ayay u guuldareystaan.
Kala sooc burburka caawiyaha iyo dhibaatada profiilka
Akhri logga ku wareegsan bilaabista habsocodka halkii aad ka sii socon lahayd sare. Calaamadda aad raadiso waa sadarka error=13, raadka stack-ga ka sarreeyana wuxuu inta badan magacaabaa habka bilaabaha ee wacay ProcessBuilder:
adb logcat -d | grep -n -i -E "cannot run program|permission denied|startOpenVPN"Haddii caawiyuhu waligiis bilaabmin, wax ma arki doontid wax soo saar log OpenVPN ah: ma jiro wada-hadal sir ah, ma jiro waddooyin la riixay, ma jiro dejinta DNS. Haddii sadarradaas ay soo baxaan oo guuldareystadu dambe timaaddo, binarigu wuu shaqeeyay dhibaataduna waxay ku jirtaa profiilka, serverka ama lakabka waddo-marinta. Farqigaas keliyaha ah wuxuu badbaadiyaa waqti badan oo haddii kale lagu bixin lahaa tafatirka faylalka .ovpn oo aan waligood dembi lahayn. Waxay kaloo kuu sheegtaa midka labada hagaajin ee hoose aad run ahaantii u baahan tahay.
Sidoo kale hubi heerka API ee qalabka aad tijaabinayso, ma aha kan ku jira dejinta dhiskaaga. Sawirka emulator-ka ee API 28 wax ma soo saaro, sababtoo ah xaddidnaantu waxay qaniinaa oo kaliya laga bilaabo 29 iyo wixii ka sarreeya. Isla markaas hubi SDK-ga bartilmaameedka ee faylka dhiskaaga: kor u qaadistiisa ayaa soo jiidata qaanuunkan.
adb shell getprop ro.build.version.sdkSababta koobista binariga meel kale aysan caawin
Xalka muuqda, qorista caawiyaha galka kale oo la qori karo, wuu guuldareystaa sababta oo ah asalkii hore. Android weli waxay oggolaataa fulinta maktabadaha la wadaago ee lagu rakibay galka maktabadaha hooyo ee abka, sababtoo ah rakibahu waa kan iyaga xidha ee ma aha in la qoro waqtiga socodka. Galkaas ayaa ah goobta kaliya ee bilaabahu tahay inuu tilmaamo. Wax kasta oo aad adigu ka soo saarto waqtiga socodka, magac kasta oo aad siiso, waxay ku sii ahaanayaan qaybta la diiday.
Kaydka dibadda ayaa ka sii xun: waxaa lagu rakibay noexec, caawiyaha halkaas la dhigana wax abkuna ma bilaabi karo. Tirtirka xogta abka sidoo kale ma soo celiso dhaqankii hore, sababtoo ah orodka xiga wuxuu si fudud u abuuraa isla nuqulkaas aan la fulin karin.
Bilaabaha u jeedi maktabad la xidhay
Magaca caawiyaha u beddel magac maktabad la wadaago oo ku gudbi jniLibs hoosteeda ABI kasta oo aad taageerto, kadibna bilaabahu ha soo celiyo wadada maktabadda la rakibay laga bilaabo API 28:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
return new File(context.getApplicationInfo().nativeLibraryDir,
"libovpnexec.so").getPath();
}Maktabaddu waa in lagu soo saaraa waqtiga rakibidda si wadadaas ay u yeelato fayl dhab ah, sidaas darteed dhig android:extractNativeLibs="true" qaybta <application>. Haddii isku-darkaha manifest uu keeno qiime kale, ku dar tools:replace="android:extractNativeLibs" dhinaceeda. tixraaca qaybta application wuxuu diiwaangeliyaa waxa sifadanu maamusho.
Ka digtoonow doorsoome maxalli ah oo labanlaabma marka aad gacanta ku hagaajinayso bilaabaha. Ilaha hore waxay ku dhawaaqaan nativeAPI dambe isla habkaas, dhawaaqa labaadna waa khalad compiler ah ee ma aha khalad waqtiga socodka, sidaas darteed dhismuhu si degdeg ah ayuu u guuldareystaa khaladkana si fudud ayaa loo arkaa. Liiska ABI ee ku jira block-ga Gradle la socodsii galka aad ku darayso.
Ka dhig wax-soo-saarka sii-deynta mid la jaan-qaada dhiska tijaabada
Debug APK waxay kicin kartaa tunnel-ka halka bundle sii-deyn uu weli burburo, sababtoo ah bundle wuxuu maktabadaha hooyo ku xidhaa qaab kale wuxuuna ka keeni karaa iyagoo la cadaadiyay kaydka. Haddii kaliya dhismayaasha ka yimaada bundle ay guuldareystaan, tan ku dar gradle.properties oo dib u dhis:
android.bundle.enableUncompressedNativeLibs=falseKadib hubi in xidhmada la rakibay ay soo sheegto ABI-ga aad filayso, oo ku celi hubinta qalab 32-bit iyo 64-bit haddii aad labadaba gudbiso. Maamulaha xidhmada wuxuu magacaabaa ABI-ga uu doortay, sidaas darteed qalab ku noqday 32 bit wuxuu halkan ka muuqdaa halkii uu ka muuqan lahaa warbixinta burburka:
adb shell dumpsys package com.example.openvpn | grep -i primaryCpuAbiMaktabad ka maqan hal ABI waxay soo saartaa khaladka oggolaanshaha asalka ah kaliya qalabkaas, sidaas darteed hal telefoon tijaabo ah oo guulaystay ma aha caddayn. Gudbi calanka manifest, magaca maktabadda iyo dejinta bundle si wadajir ah; mid beddel oo inta kale illow ayaad ku noqonaysaa isla burburkaas. Xalka waaraya waa in loo gudbo sii-deyn xudun ah oo la ilaaliyo halkii aad si weligeed ah u qaadan lahayd balastar.