O gbé ìpínpín Linux tí ń ṣiṣẹ́ lábẹ́ chroot sórí fọ́nù, o fi kíláìàńtì VPN sínú rẹ̀, ibi ìkọ̀wé sì kéde pé ọ̀nà abẹ́lẹ̀ ti parí. Lẹ́yìn náà o lọ sí aṣàwákiri, ọ̀nà ìsọfúnni sì ń jáde nípasẹ̀ dátà alágbèéká bí ẹni pé kò sí nnkan tó ṣẹlẹ̀. Tàbí ìdàkejì: gbogbo áàpù sórí fọ́nù pàdánù ìsopọ̀ nítorí pé kíláìàńtì náà fi ọ̀nà àìlẹ́gbẹ́ sínú ààyè orúkọ tí Android ń lò gan-an. Àwọn àmì méjèèjì wá láti inú apá kan náà tí ó ṣẹ́ kù, kò sì sí èyíkéyìí nínú wọn tí í ṣe àṣìṣe nínú kíláìàńtì VPN.

Ibi ìkọ̀wé sọ pé ó ti sopọ̀, àwọn áàpù kò gbà

Ìyọrísí kìíní ni èyí tí ó wọ́pọ̀. Ọ̀nà abẹ́lẹ̀ nínú ààyè olùlò tí a ṣí láti chroot lè parí ìfọwọ́sowọ́pọ̀ rẹ̀, tẹ ìṣirò rẹ̀ jáde, kí ó sì gbé ìsọfúnni tí ibi ìkọ̀wé kan náà ń dá, nígbà tí àwọn áàpù Android ń tẹ̀síwájú lílo nẹ́tíwọ́kì àìlẹ́gbẹ́ fọ́nù náà. Kò sí nnkan tí ń dènà wọn, nítorí kò sí nnkan tí sọ fún Android pé VPN wà.

Ìyọrísí kejì ni èyí tí ó léwu. Bí chroot bá ń pín ààyè orúkọ nẹ́tíwọ́kì Android, èyí tí ó ń ṣe ní àìlẹ́gbẹ́, ìlànà tí ó ní àṣẹ tó lè fi àwọn ọ̀nà àti ìbáraẹnisọ̀rọ̀ TUN kún un tí yóò nípa lórí gbogbo fọ́nù. Nígbà náà ọ̀nà abẹ́lẹ̀ yóò ṣiṣẹ́ fún gbogbo áàpù, pẹ̀lú àwọn tí o kò ní èrò láti gbà kọjá, ìsopọ̀ fọ́nù yóò sì gbára lé èmí tí kò ní ìṣàkóso àyíká ìgbésí ayé, àmì ìsopọ̀ tàbí ìlànà ṣíṣe nígbà gbogbo.

Èwo nínú àwọn méjèèjì tí o rí ni a lè dájú pẹ̀lú àṣẹ kan. Fi ip route nínú chroot wé àṣẹ kan náà láti ibi ìkọ̀wé Android ní ìta. Ìjáde tí ó dọ́gba túmọ̀ sí pé chroot wà nínú ààyè orúkọ olùgbani, ìyípadà nẹ́tíwọ́kì èyíkéyìí tí ó ṣe kan gbogbo fọ́nù. Ìjáde tí ó yàtọ̀ túmọ̀ sí pé olùbẹ̀rẹ̀ ṣe ààyè orúkọ fún un, ọ̀nà abẹ́lẹ̀ rẹ̀ kò sì hàn sí Android nípa ìtòlẹ́sẹẹsẹ rẹ̀.

Nnkan tí chroot yí padà àti nnkan tí kò yí padà

ObjectEffect of a chroot
Pathname resolutionChanged: lookups start at the new root
Kernel and driversUnchanged: the phone's kernel, its TUN driver, its limits
Network namespaceUnchanged unless the launcher creates one
Android VPN registrationUnchanged: no app consented, no VPN is selected

Ìpè ètò chroot ń ṣe nnkan kan: ó ń yí àpòpọ̀ tí a ń lò fún yíyanjú orúkọ ọ̀nà padà. Ojú-ìwé man sọ ní kedere pé kì í ṣe ààlà ààbò, kò sì sọ nnkan kan nípa àwọn ìbáraẹnisọ̀rọ̀, ọ̀nà tàbí ipò VPN. Gbogbo nnkan tí àwọn ènìyàn ń retí láti inú àpótí Linux — ìkójọpọ̀ nẹ́tíwọ́kì àdáni, ètò fáìlì tí a yọ, ààlà àwọn ohun èlò — wá láti inú àwọn ọ̀nà mìíràn tí olùbẹ̀rẹ̀ lè ti lò tàbí kò lò.

Ìdí nìyí tí àwọn ọ̀rọ̀ pé chroot yà VPN sọ́tọ̀ fi ń dáhùn ìbéèrè tí kò tọ́. Ìbéèrè tí ó bá a mu ni ààyè orúkọ tí ìlànà ń ṣiṣẹ́ nínú àti ìkójọpọ̀ SELinux tí ó wà nínú, àti pé àwọn méjèèjì jẹ́ àbùdá bí a ṣe bẹ̀rẹ̀ rẹ̀, kì í ṣe àbùdá ọ̀rọ̀ chroot.

TUN nílò nnkan mẹ́ta, ipò ẹ̀rọ jẹ́ ọ̀kan nìkan

Ọ̀nà abẹ́lẹ̀ ààyè olùlò ìbílẹ̀ nílò ẹ̀rọ TUN tí ó lè ṣí, àtìlẹ́yìn kérnẹ́lì fún ẹ̀rọ náà, àti àṣẹ láti ṣètò ìbáraẹnisọ̀rọ̀ àti àwọn ọ̀nà. Ìwọ̀nyí jẹ́ àwọn àìní ọ̀tọ̀ọ̀tọ̀, dídá orúkọ ọ̀nà lábẹ́ /dev kò sì ní ìdún dóòwó kan nínú wọn fúnra rẹ̀:

ls -l /dev/net/tun
ip tuntap add dev tun0 mode tun

Lórí Android kérnẹ́lì sábà ní àtìlẹ́yìn TUN tí a kó pọ̀, nítorí pé iṣẹ́ VPN ti pẹpẹ fúnra rẹ̀ ń lò ó, ṣùgbọ́n èyí kò túmọ̀ sí pé ìlànà rẹ le lò ó. Ṣíṣètò ìbáraẹnisọ̀rọ̀ nílò agbára ìṣàkóso nẹ́tíwọ́kì, SELinux sì ń pinnu bóyá ìlànà le dé ipò ẹ̀rọ náà rárá. Ìkọ̀sílẹ̀ dà bí àṣìṣe àṣẹ láìsí ìdí tí ó hàn, ìdáhùn sì wà nínú àkọsílẹ̀ àyẹ̀wò:

dmesg | grep avc
logcat -d | grep "avc: denied"

Root kò yanjú èyí. SELinux ń dín àwọn ìlànà tí ń ṣiṣẹ́ gẹ́gẹ́ bí uid 0 kù gẹ́gẹ́ bí àwọn mìíràn, nítorí náà chroot tí a bẹ̀rẹ̀ láti ibi ìkọ̀wé root ṣì lè kọ̀ ẹ̀rọ tí ó rí. Pípa ìfipá mú kí olùṣe ìfisín àtijọ́ lè ṣiṣẹ́ jẹ́ ìpinnu fún gbogbo fọ́nù pẹ̀lú àwọn ìyọrísí tí ó jìnnà ju ọ̀nà abẹ́lẹ̀ lọ, kì í sì í ṣe àtúnṣe fáìlì bínárì tí ó di àtijọ́.

Ìdí tí àwọn áàpù Android fi ń kà ọ̀nà abẹ́lẹ̀ rẹ sí nnkan àìní

Àwòṣe tí Android ṣe àtìlẹ́yìn ni áàpù VPN tí ń forúkọ sílẹ̀ nípasẹ̀ iṣẹ́ VPN ti pẹpẹ, tí ń béèrè ìfọwọ́sí olùlò lẹ́ẹ̀kan, tí ó sì ń gba àpèjúwe fáìlì fún ọ̀nà abẹ́lẹ̀ rẹ̀. Pẹpẹ yóò wá darí ìsọfúnni sínú àpèjúwe náà kí ó sì fi ààlà áàpù tí olùlò tàbí aláṣẹ yàn ṣiṣẹ́, ìdí nìyí tí ọ̀nà kan náà lè jẹ́ ti áàpù kọ̀ọ̀kan, ti profáìlì kọ̀ọ̀kan, tí a sì lè so pọ̀ mọ́ ètò ṣíṣe nígbà gbogbo àti dídènà láìsí VPN. Ìtọ́sọ́nà ìdàgbàsókè VPN Android ṣàlàyé ìfọwọ́sowọ́pọ̀ yẹn, kókó pàtàkì sì ni pé ìforúkọsílẹ̀ ni, kì í ṣe ọgbọ́n ìdarí ọ̀nà.

Èmí nínú chroot kò forúkọ sílẹ̀ láé. Kò sí ìjíròrò ìfọwọ́sí, kò sí àmì kọ́kọ́rọ́ lórí pẹ̀pẹ̀ ipò, kò sí àkójọ ìfikún tàbí ìyọkúró fún áàpù kọ̀ọ̀kan, kò sì sí ìkópa nínú ìlànà ṣíṣe nígbà gbogbo. Nítorí náà àwọn áàpù ń tẹ̀síwájú lílo nẹ́tíwọ́kì àìlẹ́gbẹ́, ọ̀nà abẹ́lẹ̀ sì ń gbé ohun tí ibi ìkọ̀wé fúnra rẹ̀ rán nìkan.

Lílo ọ̀nà kejì kò rànwọ́ pẹ̀lú. Títì àwọn ọ̀nà sínú ààyè orúkọ olùgbani ń mú gbogbo nnkan, pẹ̀lú ìsọfúnni tí pẹpẹ retí láti pa mọ́ sí ibi, ó sì ń ṣe é láìsí ìṣàkóso fún áàpù kọ̀ọ̀kan àti láìsí ọ̀nà fún olùlò láti rí tàbí fagilé. Kò sí ètò àárín tí èmí chroot yóò fi darí ìsọfúnni fún áàpù kan ṣoṣo.

Ìbáramu bínárì jẹ́ ògiri ọ̀tọ̀

Pàápàá bí ẹ̀gbẹ́ nẹ́tíwọ́kì bá fani mọ́ra, fáìlì tí a ń ṣiṣẹ́ ní àwọn àìní tirẹ̀: ìtòlẹ́sẹẹsẹ CPU, olùgbékkalẹ̀ alágbèéká, ilé-ìkàwé C, àti àwọn ohun èlò kérnẹ́lì tí ó retí. Android ń lò bionic dípò glibc, bínárì àtijọ́ tí a kọ́ fún ìpínpín orí tábìlì sì lè nílò àwọn ilé-ìkàwé tí kò sí lórí ẹ̀rọ mọ́.

Sísopọ̀ orúkọ fáìlì ilé-ìkàwé mọ́ ẹ̀yà tuntun nípasẹ̀ àmì kò dá ìbáramu ABI, ilé-ìkàwé ìpamọ́ ààbò tí a fipamọ́ láti inú àkójọ ọdún mẹ́wàá kì í sì í ṣe apá tí a ń tọ́jú. Bí ètò bá gbára lé ìyẹn, ètò ni láti máa ṣiṣẹ́ kóòdù tí a kò tọ́jú pẹ̀lú àṣẹ nẹ́tíwọ́kì lórí fọ́nù.

Fi hàn nínú àyíká Android kí o sì tún ṣe

Dán ohun tí ó ṣe pàtàkì fún ọ gan-an wò, láti ẹ̀gbẹ́ tí ó ṣe pàtàkì: ṣí áàpù pàtó kan, dé ibi àdáni pàtó kan, jẹ́rìí irú olùyanjú tí ó dáhùn, lẹ́yìn náà gé ọ̀nà abẹ́lẹ̀ kí o sì jẹ́rìí ìhùwàsí tí a kọ sílẹ̀. Ìyọrísí láti inú tẹ́mínà nínú chroot jẹ́ ẹ̀rí nípa àyíká ìṣiṣẹ́ tẹ́mínà yẹn nìkan, kì í ṣe nnkan mìíràn.

Bí o bá yí àwọn ọ̀nà olùgbani padà nígbà ìdánwò, dá wọn pada kí o sì kọ ohun tí o yí padà. Lẹ́yìn náà yẹ̀wò bóyá fọ́nù ní VPN ṣíṣe nígbà gbogbo tí a ṣètò, nítorí ìdánwò àtijọ́ tí ó fi ìlànà sílẹ̀ lè dà bí àṣìṣe pẹpẹ lẹ́yìn àwọn oṣù.

Fún àìní ìwọlé látọ̀ọ́kè gan-an, lo kíláìàńtì tí iṣẹ́ náà ṣe àtìlẹ́yìn tàbí àwòṣe ẹnubodè tí a fọwọ́sí. Ìbéèrè tí ó yẹ kí a béèrè kì í ṣe bóyá a lè mú olùṣe ìfisín root ṣiṣẹ́, bí kò ṣe bóyá ìmúṣẹ tí a ṣe àtìlẹ́yìn ń gbé àwọn áàpù tí o nílò kọjá ààlà tí o ní lọ́kàn, láìfi àwọn ìyípadà àṣẹ láìní olówó sílẹ̀ lórí ẹ̀rọ.

Àwọn àpilẹ̀kọ tó jọra