В случае с веб-приложениями можно найти доступную OpenAPI-спецификацию или извлечь данные о запросах из JavaScript-файлов. Однако для мобильных приложений эта задача усложняется: HTTP-запросы могут формироваться из множества внутренних классов, а сам код часто бывает обфусцирован.
Наш эксперт Сергей Бобров написал на основе jadx-декомпилятора утилиту BFScan, которая помогает решать такие задачи при анализе JAR/WAR/APK приложений. Скачать эту тулзу можно здесь:
https://github.com/klsecservices/BFScan
Утилита BFScan формирует сырые HTTP-запросы и OpenAPI-спецификацию по конфиг-файлам и аннотациям классов и методов. При этом поддерживаются как клиентские библиотеки (например, Retrofit), используемые в APK для взаимодействия с бэкендом, так и серверные технологии, такие как Spring-аннотации. Это облегчает тестирование API в тех случаях, когда тело HTTP-запроса необходимо сформировать из множества вложенных классов.
Дополнительно BFScan анализирует строковые константы в Java-классах и ресурсах приложения для поиска строк, похожих на URL, пути или захардкоженные секреты.
Пример работы утилиты с классом, использующим Spring-аннотации:
@RestController
@RequestMapping("/api")
public class UserController {
@PostMapping("createUser")
public String create(@RequestParam Optional<String> someParamName, @RequestBody User user) {
return "response";
}
В результате утилита формирует такой запрос:
POST /api/createUser?someParamName=value HTTP/1.1
Host: localhost
Connection: close
Content-Type: application/json
{
"name": "name",
"age": 1
}
Утилиту BFScan удобно использовать как для анализа клиентских мобильных приложений, так и в случае, если вы получили скомпилированный JAR/WAR от серверного приложения, для поиска в нём захардкоженных секретов или дальнейшего анализа API-эндпоинтов, которые обрабатываются в приложении.
А если приложение обфусцировано, то используя jadx, можно легко сформировать mapping-файлы для переименования обфусцированных классов и корректного формирования HTTP-запросов.