1.Python 설치
- Use admin privileges when installing py.exe 선택
- Add pytho.exe to PATH 선택

- Disale path length limit 선택


cmd에서 python 버전 확인

python --version
2. Frida 설치
cmd창에서 진행
설치: pip install frida-tools
업그레이드: pip install frida-tools --upgrade
버전 확인: frida --version
1-1.frida 설치(버전 지정)
pip install frida=="16.5.2"
pip install frida-tools==13.6.0
frida --version


frida 버전 확인
frida --version

1.2 frida 설치(최신 버전) 최신 버전은 뒤에 버전을 안 붙여도 된다.(1-1했으면 안해도 된다)
pip install frida-tools

3. 안드로이드 ADB 설치
안드로이드 Android Debug Bridge 사용을 위한 SDK Manager 설치가 필요하다.
adb(platform-tools) 설치
https://developer.android.com/studio

Next > Next > Next > Install

Next를 누르고 License Agreement에서 Accept를 누른다.

환경 변수 설정하기
경로를 따로 설정하지 않았다면 아래로 환경변수를 설정한다.
C:\Users\사용자명\AppData\Local\Android\Sdk\platform-tools
참고) AppData는 숨김폴더라 숨김해체 후 볼 수 있다.
1) 시스템 환경변수 편집> 환경 변수
2) 시스템 변수 Path 편집
3) adb경로 추가
4) 적용 후 PC 재부팅

4. Frida 서버 설치 및 실행
Frida-release page에서 아키텍처에 맞는 frida- server 다운로드
server arm64
frida-server-16.5.2-android-arm64 다운로드(frida와 server 버전이 맞아야 한다.)
https://github.com/frida/frida/releases

안드로이드 내부로 프리다(Frida) 서버옮기기
adb push [프리다 서버]/data/local/tmp
adb shell //원격 쉘 접속
cd /data/local/tmp
adb push: 파일 올리기
adb pull: 파일 내리기
안드로이드프리다(Frida) 서버 백그라운드로 실행한다. 백그라운드로 안하면 진행이 안됨
chmod 755 [프리다서버]
./[프리다 서버]&
정리
adb shell
su
cd /data/local/tmp
ls -al
chmod 777 frida-server-16.5.2-android-arm64
ls -al
./frida-server-16.5.2-android-arm64 &

오류가 나면 휴대폰 설정-USB장치 해체하거나 adb kill하거나 cmd창을 새로 켜서 해본다.
frida-ps -Uai
frida-ps -Ua


5.jadx 설치
jadx를 설치한다.


frida 코드 알려주는 곳
Frida CodeShare
Unleash the power of Frida. "If I have seen further, it is by standing on the shoulders of giants." -Sir Issac Newton The Frida CodeShare project is comprised of developers from around the world working together with one goal - push Frida to its l
codeshare.frida.re
6. Scrpy 설치
scrcpy파일을 다운로드한다. (안드로이드 장치의 화면을 볼 수 있다.)
https://github.com/Genymobile/scrcpy/releases/tag/v3.3.4
adb install C:\Users\A3SC\Downloads\UnCrackable-Level1.apk
7. Uncreackable1 실습
Tip. js코드 틀
함수명이 같을 수도 있으니까 패키지.함수명을 쓴다.
Java.perform(function(){
var root = Java.use("패카지명.클래스");
root.함수.implementation = function(){
var retval = this.a();
console.log(retval)
return false;
}
});
unCreakable1 1단계
1단계 정답코드
Java.perform(function(){
var root = Java.use("sg.vantagepoint.a.c");
root.a.implementation = function(){
var retval = this.a();
console.log(retval)
return false;
}
});
Java.perform(function(){
var root = Java.use("sg.vantagepoint.a.c");
root.b.implementation = function(){
var retval = this.b();
console.log(retval)
return false;
}
});
Java.perform(function(){
var root = Java.use("sg.vantagepoint.a.c");
root.c.implementation = function(){
var retval = this.c();
console.log(retval)
return false;
}
});
Tip
리소스 AndroidMainifest.xml을 보기
MainActivity - OnCreate - 함수를 타고 들어간다.
(안드로이드 생명주기 OnCreate가 먼저 시작)
알림창 Root detected!를 타고 들어가서 보기
후킹 방식도 여러 개
- 리턴값을 변조 false를 true로 변경하거나
- 함수를 안타게 할 수도 있다.
- exit(0)을 종료0을 1로 변경하거나
.js파일이 있는 곳에서 실행한다.
frida-ps -Uai // 프로세스 패키지 이름 확인
frida -U -f owasp.mstg.uncrackable1 -l test.js//js파일 실행


후킹 전
Root detected!
확인 누르면 창이 꺼짐

후킹 후

종료
exit()

unCreakable1 2단계
2단계 정답코드
Java.perform(function(){
var secret = Java.use("sg.vantagepoint.uncrackable1.a");
secret.a.implementation = function(str){
return true;
}
});
vscode(추천) 또는 노트패드에 .js파일로 저장
1단계, 2단계 코드를 분리해 저장해서 돌렸지만 한 번에 같은 파일에 코드를 넣어도 상관없음
frida -U -f 패키지명 -l test.js //앱 다시 시작
frida -U -f 패키지명 -l test.js -l test2.js //코드 2개 동시
frida -U -F -p pid -l test.js // 앱 안꺼지고 후킹 실행
frida -U -f owasp.mstg.uncrackable1 -l test.js -l test1.js

후킹 후

'cs > sec' 카테고리의 다른 글
| UnCrackable Level3(후킹을 활용한 실습 문제 분석) (1) | 2026.01.15 |
|---|---|
| UnCreakable Level2 실습(후킹을 활용한 실습 문제 분석) (0) | 2026.01.15 |
| [모의해킹]도파민을 이용한 iOS 15.8 탈옥 후 Burp (0) | 2026.01.11 |
| [모의해킹]안드로이드 Galaxy S10e 루팅(Rooting) with Magisk (1) | 2026.01.11 |
| [실습] 쉘 코드의 GetPC 루틴 구현 및 디버깅 실습 (FSTENV 패턴) (0) | 2025.12.19 |