주의사항 : 이 포스팅은 개인 학습 및 교육적 목적으로 작성되었으며, 제공하는 정보를 악용하여 불법적인 행위를 하는 것은 엄격히 금지되어 있습니다. 타인의 시스템에 대한 접근 권한을 얻기 위해 명시적인 동의를 받아야 하며, 이러한 기술을 사용하여 발생하는 모든 결과에 대한 책임은 사용자에게 있습니다.
: 애플리케이션 패칭 취약점은 앱의 바이너리 파일을 변조하여 영구적으로 변경된 로직을 사용할 수 있는 취약점으로, 애플리케이션 위·변조라고도 부른다.
앱의 바이너리 파일을 추출 - 패칭 - 서명값 변조 - 덮어쓰기 과정을 거치는 것이 일반적이지만, DVIA 의 IPA 파일을 ZIP 으로 변환하여 Payload 에 위치한 바이너리 파일을 패칭 후 앱을 재설치하는 과정을 통해 결과를 살펴보겠다.
: 사용자가 입력한 계정 정보와 상관없이 항상 로그인이 가능하도록 패칭
: 항상 탈옥 탐지 우회가 되어 있는 상태로 바이너리를 패칭
// CheckForJailbreak.js
var realBase = Module.findBaseAddress('DVIA-v2')
console.log("[+] 실제 앱 주소 : " + realBase)
var Patching_point = realBase.add('0x1cbdd0')
console.log("[+] 분기점 주소 : " + Patching_point)
Interceptor.attach(Patching_point,{
onEnter:function(args){
console.log("[+] w0 레지스터 값 확인 : ")
console.log(JSON.stringify(this.context))
}
})
아직 탐지 되지 않는다고 뜬다.
※ 의도대로 동작하지 않은 원인 : tbz 명령어의 두번째 변수가 숫자 or boolean 값을 저장하는 것이 아니라 비트를 지정하는 변수였다.
tbz Rn, #imm, label
Rn : 테스트할 레지스터
imm : 테스트할 비트의 위치
label : 분기할 목적지
: 경고 문구가 임의의 내용으로 출력되도록 패칭
조작
: 앱 종료 버튼을 눌러도 앱이 종료되지 않도록 패칭
출처
https://takudaddy.tistory.com/611
https://www.inflearn.com/questions/130882
https://ch4njun.tistory.com/165