리버스 엔지니어링은 앱의 바이너리 코드(Binary Code)를 디컴파일(Decompile)하여 원래의 소스 코드나 그에 가까운 형태를 복원하는 과정입니다.
Android의 APK 파일이나 iOS의 IPA 파일은 각각 디컴파일을 통해 분석할 수 있습니다.
이 방법은 주로 앱의 내부 로직을 이해하거나 데이터 통신 방법을 파악하기 위해 사용됩니다.
리버스 엔지니어링을 회피하기 위한 특별한 처리를 한 앱에 대해서는 분석이 안될수도 있습니다.
아래는 Android APK 리버스 엔지니어링과 iOS IPA 리버스 엔지니어링을 각각 나누어 정리해보았습니다.
1.1. Android APK 리버스 엔지니어링
도구: jadx, APKTool, Dex2jar 등
1.1.1. Android APK 리버스 엔지니어링을 통한 진행 절차
Google Play Store에서 APK 파일을 다운로드합니다.
APKTool 같은 도구를 사용하여 APK 파일을 디컴파일합니다.
디컴파일된 소스 코드를 분석하여 앱의 로직, API 엔드포인트, 데이터 구조 등을 파악합니다.
네트워크 패킷을 분석하거나 로그를 확인하여 데이터 통신 방법을 파악합니다.
1.2. iOS IPA 리버스 엔지니어링
도구: Hopper, IDA Pro, Ghidra 등
1.2.1. iOS IPA 리버스 엔지니어링을 통한 진행 절차
App Store에서 IPA 파일을 다운로드합니다.
선택한 도구를 사용하여 IPA 파일을 디컴파일합니다.
디컴파일된 소스를 분석하여 앱의 내부 로직, 데이터 통신 방법 등을 이해합니다.
2.OCR
OCR (Optical Character Recognition)은 앱 화면을 캡처하여 그 이미지에서 텍스트를 추출하는 방법입니다.
OCR의 정확도는 다양한 요소에 의해 영향을 받습니다.
텍스트의 크기, 폰트, 배경색 등이 정확도에 영향을 줄 수 있습니다.
이는 높은 정확도를 기대하기 어려운 경우가 있어 추천하는 방법이 아닙니다.
그러나 API나 소스코드에 접근이 불가능하거나, 다른 방법으로 데이터를 얻기 어려운 상황에서는 유용한 방법일 수 있습니다.
2.1. OCR 도구
Tesseract: 가장 널리 알려진 오픈 소스 OCR 엔진입니다.
Google Cloud Vision API: Google이 제공하는 OCR 서비스로, 높은 정확도와 다양한 언어 지원이 가능합니다.
ABBYY FineReader: 상용 OCR 소프트웨어로 높은 정확도를 제공합니다.
2.2. OCR 도구를 통한 진행 절차
대상 앱에서 필요한 정보가 표시되는 화면을 캡처합니다.
OCR의 정확도를 높이기 위해 이미지의 전처리가 필요할 수 있습니다. 이를 위해 이미지에서 노이즈를 제거하거나, 명도와 대비를 조절하는 작업을 진행합니다.
전처리된 이미지를 OCR 도구를 통해 텍스트로 변환합니다.
OCR을 통해 얻은 텍스트는 정제되지 않았거나 오류가 있을 가능성이 있으므로, 이를 정제하는 작업이 필요합니다.
정제된 텍스트를 분석하고 필요한 데이터를 저장합니다.
3. 패킷 스니핑(Packet Sniffing)
패킷 스니핑은 네트워크에서 데이터 패킷을 캡처하고 분석하는 과정입니다.
이 방법은 앱 크롤링에서 해당 앱이 서버와 어떻게 데이터를 주고받는지를 이해하려고 할 때 유용합니다.
패킷 스니핑을 통해 앱의 내부 로직, 사용되는 API 엔드포인트, 인증 메커니즘 등을 분석할 수 있습니다.
3.1. 패킷 스니핑 도구
Wireshark: 가장 널리 사용되는 패킷 스니핑 도구입니다.
Charles Proxy: 주로 웹 개발과 모바일 앱 분석에 사용됩니다. SSL 프록싱 기능을 제공해 HTTPS 트래픽도 분석 가능합니다.