Reverse Engineering the Subway Android App

click fraud protection

Приємно спостерігати за дедалі більшим впровадженням закріплення сертифікатів у програмах Android. Коли я стикаюся з програмою, яка видає помилки підключення під час спроби проксі-запитів, я, як правило, більше зацікавлений у зануренні глибше. Так було, коли я нещодавно використовував додаток Subway. Скасування APK виявило закріплення сертифіката серед інших цікавих знахідок.

Запуск програми під час проксі-запитів викликав цю помилку:

Закріплення досить просто обійти. Я почав з декомпіляції програми та аналізу вихідного коду для закріплення ключових слів. Насправді я знайшов реалізації закріплення у двох окремих класах, які реалізували X509TrustManager. Ось один із методів примусового закріплення:

 // Code removed at request of Subway leadership

Обійти це було так само просто, як додати оператор return у код 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 також визначав, чи був пристрій користувача рутованим. Я пошукав у джерелі та підтвердив згадки про методи виявлення коренів.

 // Code removed at request of Subway leadership

Це чудовий приклад того, як програма дуже серйозно ставиться до безпеки, але я не зовсім впевнений у міркуванні процесу кореневої перевірки. Хоча методи закріплення сертифіката та перевірки підпису загалом є хорошою ідеєю, вони лише трохи перешкоджають процесу зворотного проектування.