목록분류 전체보기 (553)
Self-Improvement
Launch Code를 입력하라고 되어있다. InputValidation3Activity 클래스를 확인해보면 DivaJni 클래스로 djni 객체를 생성한 후 initiateLaunchSequence() 메소드를 수행하여 return 값이 0이 아니면 "Launching in T - 10 ..." 메시지가 출력된다. DivaJni 클래스를 확인해보면 divajni 라이브러리를 로드하고 있고 initiateLaunchSequence() 메소드는 네이티브로 작성되어 있는 것을 확인할 수 있다. divajni 라이브러리의 initiateLaunchSequence() 함수를 보면 궁극적으로 return 하는 곳에서 strncmp() API로 ".dotdot" 문자열과 비교를 하고 있다. 중요한 것은 입력한 값을..
소스코드 내에 vendor key 값을 알아내는게 목적이다. Hardcode2Activity 클래스를 보자면 DivaJni 클래스의 djni 객체를 생성한 후 access() 메소드를 호출하여 입력한 값과 비교한 후 같으면 Access granted!가 출력된다. DivaJni 클래스를 보면 divajni 라이브러리가 로드되고 access() 메소드가 네이티브 함수로 작성되어 있다. divanjni 라이브러리의 access() 함수를 확인해보면 strncmp() API로 "olsdfgad;lh" 값과 비교하게 된다. 해당 값을 입력하면 맞다고 출력하게 된다.
classes.dex 파일을 동적 디버깅하기 위해서는 android:debuggable 을 설정하거나 루팅할 시 ROM에 ro.debuggable을 1로 고정 셋팅이 필요하다. 위 방식을 할 수 없다면 mprop 바이너리(https://github.com/wpvsyou/mprop) 파일을 실행해서 메모리에 ro.debuggable을 1로 설정해주는 것도 가능하지만 필자의 갤럭시 s9에서는 제대로 동작되지 않았다. 찾아보던 중 MagiskHide Props Config 방식으로 설정하는 방식을 알았으며 많은 사람들이 알 수 있지만 정리 차원에서 적어둔다. 안드로이드 폰을 루팅하게 되면 Magisk 어플이 기본적으로 설치되며 Magisk 어플을 실행한 후 "MagiskHide Props Config" 모듈을..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
FridaLab Challenge 1 Change class challenge_01's variable 'chall01' to:1 MainActivity 에서 challenge_01 클래스의 getChall01Int() 메소드를 호출하여 chall01 변수의 값이 1이면 해결된다. Frida Java.perform(function() { var challenge1 = Java.use('uk.rossmarks.fridalab.challenge_01'); challenge1.chall01.value = 1; }); Challenge 2 Run chall02() chall02() 메소드는 MainActivity에 존재하지만 사용하지 않고 있다. 임의로 chall02() 메소드를 호출해준다. Frida chal..
보호되어 있는 글입니다.
보호되어 있는 글입니다.