이번에 트윅 개발을 위해 세팅을 진행할려고 한다.

본 환경은 맥북 m1 pro  환경에서 진행 되고 필자가 오늘 설치한 방법이니 참고하면 좋겠다.

기본적으로 트윅은 theos라는 툴을 이용하여 제작한다. 여러 라이브러리 및 기본 세팅을 도와주는 좋은 툴이다.

 

기본 세팅에 대한 정보는 hackcattml 님에게 얻었습니다.

https://hackcatml.tistory.com/107

 

THEOS 설치

frida로 후킹 시 알수 없는 이유로 크래시나는 경우가 있습니다. 그럴 경우, Theos 후킹 트윅 개발을 고려해볼수 있습니다. 저 같은 경우 탈옥탐지우회를 위해 fopen함수를 frida로 후킹하였는데, 알

hackcatml.tistory.com

맥에는 Homebrew가 세팅되어야 나중에 설정이 안꼬입니다.

 

# git과 ldid 설치
brew install git
brew install ldid

# user명 아래 파일에 theos 폴더와 안에 staging명으로 폴더 생성
mkdir ~/theos
mkdir ~/theos/staging

# theos와 staging을 환경 변수로 설정
echo "export THEOS=~/theos" >> ~/.zshrc
echo "export THEOS_STAGING_DIR=~/theos/staging" >> ~/.zshrc

# theos device 라이브러리를 다운로드
git clone --recursive https://github.com/theos/theos.git $THEOS

# ios sdk 중 원하는 버전을 다운로드 필자는 우선 다 다운로드함
# tmp이라는 거는 임시 폴더를 생성해야 불필요한 파일 생성을 줄이기 위해 임시 폴더 이용
curl -LO https://github.com/theos/sdks/archive/master.zip
TMP=$(mktemp -d)
unzip master.zip -d $TMP
mv $TMP/sdks-master/*.sdk $THEOS/sdks
rm -r master.zip $TMP

# 환경 변수에 추가
export workzone="$HOME/theos/bin"

# 환경 변수 적용을 위해서는 아래 명령어를 실행해야함
source ~/.zshrc

# 환경 변수 문제가 없다면 빨간 표시 없이 아무것도 뜨지 않을것이다.

위 세팅이 끝나면

theos/bin 내부에 있는 nic.pl을 실행시키면 된다

다만 ~경로가 아닌 theos 내부에서 프로젝트 생성이 아래 에러가 날것이다. 그렇기 때문에 ~경로에서 nic.pl을 실행하여

~디렉토리 바로 아래에 프로젝트를 생성한다.

[error] Cowardly refusing to make a project inside $THEOS

 

Project Name 은 소문자로 작성

특정 패키지 명으로 설정하고 싶으면 아래와 같이 설정 ex) com.hack.test

Package Name [com.yourcompany.tio]: com.hack.test
  • "이름 <메일>" 형식으로 작성
Author/Maintainer Name [Tyrell]:  <root@tyrell.kr>

SpringBoard에서 작동 시키고 싶다면 그냥 스킵을 위해 엔터

만약 특정 bundle id에 만 트윅이 작동하기 위해서는 세팅에 아래와 같이 설정

[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.aaa.bbb
  • 설치 후 적용을 위해 지정한 앱 강제 종료
  • 강제 종료 원하지 않으면 "-"
  • 무시 "enter"로 스킵
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]: (enter)

이제 code ./Tweak.x 명령어로 트윅 코딩을 시작하면 된다.

# vscode로 tweak.x를 여는 명령어
code ./Tweak.x

# 아래 둘다 가능하고 작성 코드를 기반으로 deb 아이폰 설치 파일을 만들어 주는 명령어
make package
# 빌드 번호 없이 파일명으로 생성
make package FINALPACKAGE=1

만약 빌드가 다 완료되었을 경우 

scp를 이용하여 deb 파일을 기기 내로 이동시킨다.

# 파일 보내기
# 폴더 전송시 -r 옵션을 주면 됨
scp [옵션] [파일명] [원격지_id]@[원격지_ip]:[받는 위치]
scp testfile root@[IP]:/tmp/data/local/  
# 파일 가져오기
cp [옵션] [원격지_id]@[원격지_ip]:[원본 위치] [받는 위치]
scp root@[IP]:/tmp/data/local/testfile /tmp

만든 트윅 파일 설치

dpkg -i [deb패키지파일]

설치 시

/Library/MobileSubstrate/DynamicLibraries 에 해당 트윅이 설치된 것을 확인가능

해당 트윅이 정상 작동 안할 시 SpringBoard 리스프링 할 것

killall SpringBoard

+ Recent posts