Обратно инженерство на приложението Subway за Android

click fraud protection

Страхотно е да се види нарастващото приемане на фиксирането на сертификати в приложенията за Android. Когато попадна на приложение, което хвърля грешки при свързване, докато се опитва да прокси заявки, имам склонност да се интересувам повече от гмуркане по-дълбоко. Такъв беше случаят, когато наскоро използвах приложението Subway. Обръщането на APK разкри фиксиране на сертификат сред някои други интересни открития.

Стартирането на приложението по време на прокси заявки причини тази грешка:

Фиксирането е достатъчно просто за заобикаляне. Започнах с декомпилиране на приложението и анализиране на изходния код за фиксиране на ключови думи. Всъщност намерих реализации на закрепване в два отделни класа, които са имплементирани X509TrustManager. Ето един от методите, които налагат фиксиране:

 // Code removed at request of Subway leadership

Заобикалянето на това беше толкова просто, колкото добавянето на израз за връщане в smali кода, за да се пропусне кодът за фиксиране в метода по-горе. Обърнете внимание на добавянето на връщане-невалиден изявление по-долу:

 // Code removed at request of Subway leadership

След прекомпилирането на приложението и инсталирането бях изненадан да видя тази нова грешка:

Subway използва персонализиран процес за проверка на подписа на приложението, за да предотврати обръщането на техния APK. Отчитайки източника за споменавания на този процес, го проследих до следния метод:

 // Code removed at request of Subway leadership

Това беше интересен опит за предотвратяване на обратното инженерство, въпреки че всъщност предизвика само леко забавяне. За да заобиколя този процес, просто добавих ред, за да пропусна изпълнението на метода, като добавих друг връщане-невалиден линия, подобно на процеса на байпас на закрепване по-горе.

 // Code removed at request of Subway leadership

След прекомпилиране и инсталиране на приложението, успях успешно да прокси заявки:

По време на моето проучване се натъкнах на тази публикация в Reddit. Очевидно Subway също е определял дали устройството на потребителя е руутнато. Потърсих из източника и потвърдих споменаванията на методи за откриване на root.

 // Code removed at request of Subway leadership

Това е чудесен пример за приложение, което приема сигурността много сериозно, но не съм съвсем сигурен в мотивите зад процеса на проверка на root. Въпреки че техниките за фиксиране на сертификати и проверка на подписа като цяло са добра идея, те само леко възпрепятстват процеса на обратно инженерство.