Stop COVID Android app — მიმოხილვა (Reverse Engineering)
Disclaimer: არ გაკეთებულა ეს ანალიზი ცუდი მიზნებისთვის და ნუ ეცდებით რაიმე მავნებლობას. რაც წერია ემსახურება იმას რომ უფრო მეტი ინფორმაცია გვქონდეს სერვისზე.
ესეიგი რა ხდება. ამ პოსტში ვეცდები ავხსნა როგორ მუშაობს ახალი Stop Covid აპლიკაცია, რომელიც დიდი იმედი მაქ რომ არ შეიცვლება მუშაობის პრინციპი.
TL; DR: ამ ეტაპზე აპლიკაცია იმას აკეთებს რაც მოეთხოვება და არაფერი საშიში არ ჩანს, კარგი იქნებოდა stopcov.ge-ს გაეკეთებინა ასეთი ვრცელი განმარტება ჩემს ნაცვლად, რომ გასაგები ყოფილიყო ყველასთვის
პირველ რიგში ეს არის წყარო, ორიგინალი საიდანც აიწყო ეს აპლიკაცია: ამიტომ ეს კოდი გავარჩიე და როგორც მუშაობს იმ პრინციპს მოგიყვებით.
გაითვალისწინეთ ეს SDK შემდგომ გამოიყენებულია აპლიკაციაში, ამიტომ მიმდინარე აპლიკაციის სორსში დაგვხდებათ სხვა ფაილებიც.
არამგონია გაშვებულ ვერსიაში რამე იყოს ისეთი შეცვლილი, ამ ეტაპზე ვერ ვხედავ ყოველ შემთხვევაში,სმს თანხმობის გარდა
რატომ მიკროფონზე წვდომა?
დავიწყოთ იმით რომ აპლიკაცია ითხოვს ლოკაციაზე წვდომას ძირითად ეტაპზე + იყენებს Android Nearby ტექნოლოგიას. რას ნიშნავს ეს? ეს არის ტექნოლოგია რომელიც უზრუნველყოფს ტელეფონებს შორის კონტაქტს ახლო მანძლზე და მცირე მესიჯების გაცვლას ან ბლუთუზით, ან შიდა ქსელის საშუალებით ან ულტრაბგერების მეშვეობით. ამიტომ არის სწორედ რომ ითხოვს აუდიო და ბლუთუზ უფლებებს, თუმცა ამას ითხოვს Android Nearby და არა COVID აპლიკაცია. ასევე შეუძლია BLE beacon-ებთან კონტაქტი.
Android Nearby-ს რაც შეეხება https://developers.google.com/nearby/overview აქ არის მაგაზე ინფო და გაკვირთაც წერია რად უნდა აუდიო.
ტესტები: https://source.android.com/compatibility/cts/near-ultrasound
რა ხდება შემდგომ?
მშვიდად გიდევთ ტელეფონი ჯიბეში, ეთანხმებით რომ ყველა ეს სერვისი ჩართულია. როდესაც სხვა ადამიანთან ახლოს მოხვდებით და იმასაც აქვს გააქტიურებული აპლიკაციაში ეს ყველაფერი აპლიკაცია თქვენს შეუწუხებლად თავისით დაეკონტაქტება ახლო ტელეფონებს და გაცვლის ინფორმაციას. კერძოდ უნიკალურ იდენტიფიკატორს თავისას და ანალოგიურად მიიღებს სხვისას. ჩაიწერს ამას ლოკალურ მონაცემთა ბაზში და ასევე აიღებს მიმდინარე გეოგრაფიულ კოორდინატებს (latitude, longitude) + დროს. გააგრძელებთ ისევ ცხვორებას. ასევე იწერს დაახლოებით რა დროის პერიოდში გქონდათ კონტაქტი, რამოდენიმეჯერ პინგავს და ისე. ანუ ქუჩაში თუ ჩაივლით მთელს ქუჩას სავარაუდოდ არ მიუვა შეტყობინება. უნდა აკმაყოფილებდეს რამოდენიმე პირობას.
მნიშვნელოვანია ასევე ვიცოდეთ, აპლიკაცია ასევე თვალს ადევნებს ჩვენს აქტივობის ტიპებს Google სერვისების მეშვეობით: მანქანაში ხართ თუ არა, ველოსიპედზე, დგახართ, დარბიხართ, დადიხართ თუ ირყევით.
გასათვალისწინებელია რომ 5 დღის წინანდელ კონტაქტებს და ლოკაციებს შლის ბაზიდან (მიმდინარე აპლიკაციაც დღეს)
შეტყობინება და დადასტურება
გავიდა დრო და ვიღაც დაინფიცირდა, გაიკეთა ტესტი. ვალდებული იქნება აპლიკაციით დაარეგისტრიროს თავისი ავადმყოფობა. ამისთვის აჭერს report და შეყავს ტელეფონის ნომერი, მოუვა დადასტურების სმს, სმს ავტომატურად შეავსებს ტელეფონი.
ეს ნაწილი არ არის ორიგინალ კოდში რაც დავლინკე, ის მხოლოდ SDK არის, ამ ფუნქციონალის მისაღწევად შემდგომ დაამატეს საჭირო ბიბლიოთეკები და კლასები, მიმდინარე აპლიკაცის დეკომპილაციისას ჩანს. შესაბამისად ჩვენი ტელეფონის ნომრით ხდება იდენტიფიცირება უშუალოდ ადამიანის. სხვა მონაცემებთან კორელაციით და reverse engineering-ით შესაძლებელია ყველა სხვა კონტაქტის რეალურად მოძიებაც.
კონფირმაციის შემდგომ აგზავნის ყველა იმ კონტაქტს და ლოკაციებს ვისაც შეხვდა. შემდგომ ყველა თქვენგანს მოგივათ ნოტიფიკაცია რომ ვისაც შეხვდით ამ დღეებში დაუდგინა COVID-19 და წადით თვითიზოლაციაში. თუ რამეა და მოგნებითაც მარტივად მოგაგნებენ, როგორც ახლა ადგენენ ვისთნა ქონდათ კონტაქტი, უბრალოდ უფრო ზუსტად ეცოდინებათ კონტაქტის შეხვედრის მისამართები.
ორიგინალი კოდი იყენებს https://customer.io/ ნოტიფიკაციებისთვის და აქაც დატოვებულია იგივე.
ორიგინალი ჩანაფიქრი კარგია და ცდილობს მინიმუმამდე დაიყვანოს პირადი ინფორმაციის გაჟონვა.
რათქმაუნდა ანალიტიკა გროვდება სტანდარტულად, როდის ჩაირთო აპლიკაცია და ა.შ.
დაკვირვება
საერთოდ დაკვირვების შემდგომ ვფიქრობ რომ აპლიკაცია აქ არ გაკეთებულა და რომელმა ორგანიზაციამაც გააკეთა SDK, იმათვე დაუკვეთეს მთლიანი გადაწყვეტა.
გარდა ამისა რა დიზაინითაც გხვდება აპლიკაცია სწორედ ამ ორგანიზაციის საიტზეა ნაჩვენები, Github წყაროში კი ეგ არ გხვდება.
https://www.novid20.org/en/our-solution
შედეგი
ახლა რაშია საქმე? მომავალში შეიძლება ისე შეიცვალოს საქმე რომ მუდმივად აიტვირთოს ჩვენი ლოკაცია კონფირმის მიუხედავად და სულ დავითრექოთ. პროგრამულად ძალიან მარტივია ამის გაკეთება. და თითოეულ განახლება უნდა ვამოწმოთ მაშინ დაინტერესებულმა პირებმა, ასევე მომავალ განახლებებში არ ვიცით შეიძლება სხვა პერმიშენებიც მოითხოვოს რომელსაც ბევრი უსიტყვოდ დაეთანხმება.
თუმცა ამ ეტაპზე ასეა საქმე.