-
JEB를 이용한 동적 디버깅리버싱/모바일 2023. 7. 3. 17:22
먼저 ro.debuggable 값을 0에서 1로 바꾸는 과정부터 간편하게 설명
https://github.com/liwugang/android_properties
GitHub - liwugang/android_properties: Android get/set system properties
Android get/set system properties. Contribute to liwugang/android_properties development by creating an account on GitHub.
github.com
위 주소로 가서 자기 디바이스 시스템에 맞는 파일을 다운찾는다
adb의 /data/local/tmp 폴더로 push 한다
이걸친다
굿
그럼 이제 전에 풀었던 문제의 동적 디버깅을 실시해보겠다
일단 쉘에 명령어를 작성
am 명령어로 패키지내의 액티비티를 실행하는 명령어 인데, 디버깅을 해야하니 -D 옵션을 -n 옵션으로 네이티브
힙메모리를 덤프를 하게 해줌(라고 책에 써잇음)
위 명령어를 치면 이런 창이나온다
그리고 JEB에서 디버거를 실행하면
연결된 장치와 이름이 있고 실행중인 패키지 이름이 나타남
요런식으로 나오고
이렇게 원하는 곳에 브레이크 포인트를 설정할 수 있다(컨트롤 + B)
키 값을 만드는 과정에 브레이크 포인트를 걸어봤음
이미 알지만 실제로 값이 어떤 식으로 처리되는지 한줄씪 알아봅시다
위에 v2에 문자값을 저장하는데 실제로도 이렇게 변수가 저장이 되있습니다
그 다음은 v3 에 2
ㅎㅇ
그리고 base 64 디코딩 발사한 뒤 그 값을 v0에 넣어줍니다
실제 코드와 비교
v0에 디코딩된 후 값인 sik2016가 저장된 모습
그럼 이제 키값을 알았으니 정답과 틀린답에 따라 어떻게 처리되는지가 궁금해진다
<틀린 값을 입력했을 때>
저기가 분기인데
if-nez v0은 v0의 값을 0과 비교해서 0이 아니면 :38로 점프하는 문임(맞나?)
v0은 현재 false값이 저장되어있음
int로 보니 0이 저장 되어있네요
그러면 그대로 쭉 내려가면서 땡 토스트 메시지가 나오게됩니다
왜 v0에 0이 저장되어 있냐구요??
equlas 메소드를 통해 입력값과 sik2016 을 비교해서 그 값을 v0에 저장하기 때문
이렇게 밖에 요약못합니다 나도 저게 정확히 뭔소린지 잘 모르겟어요
<맞는 값을 입력했을 때>
반대로 맞는 값을 입력하면 위 과정을 거치고 나서
v0에 트루값이 저장된다
그럼 이렇게 :38로 뛰게된다
invoke는 함수를 실행하는 문인데 k() 함수를 실행하란 뜻인갑다
k 함수의 모습, 성공 다이얼로그 창을 띄우는건 보면 알죠
그 안에 레이아웃에 대한 내용들을 정의하는 뭐 암튼
짠
'리버싱 > 모바일' 카테고리의 다른 글
안드로이드 리버싱 실습 with JEB (0) 2023.06.30 안드로이드 apk 구성 및 리버싱 도구 (0) 2023.06.28 안드로이드 구성요소 (0) 2023.06.26 안드로이드 모바일앱 모의해킹 - 2 - ~ADB 설명 및 사용법편~ (0) 2023.04.05 안드로이드 모바일앱 모의해킹 - 1 - 인시큐어뱅크 설치편 (0) 2023.03.30