보통 안드로이드, iOS 모두 메모리 변조를 할때 치팅 툴(게임 해킹 관련해서 검색하면 많이 나오는 것들..)을 대체로 사용합니다. (솔직히 편하긴해요)
Command line에서 제어할 일이 있어서 찾아본 도구중에 괜찮은게 있어 정리해둡니다.
MH?
https://github.com/sskaje/mh 로 유명한 도구는 아닙니다. (그냥 저처럼 개인이 만들어두고 쓰시는 것 같아요) 기본적인 메모리 뷰/변조, Convering 등을 지원하고 Js 코드를 지원한다고 합니다.(잘 쓰면 프리다라 붙임성이 있을지도!?)
# Clone
git clone https://github.com/sskaje/mh.git
cd mh
# Submodule 설치
git submodule update --init --recursive
# SDK, duktape 설치
bash tools/download_sdks.sh
bash tools/duktape_prepare.sh
빌드 환경 구성은 위에 정도면 충분하고, OS 아키텍쳐 별로 빌드하셔서 사용하시면 됩니다.
# Build for macOS
bash build/build-osx.sh
# Build for ARMv7 iDevices
bash build/build-ios-armv7.sh
# Build for ARMv7s iDevices
bash build/build-ios-armv7s.sh
# Build for ARM64 iDevices, iOS 10.2
bash build/build-ios-armv64.sh
# Build for deb package for all iOS device
bash build/build-ios-deb.sh
빌드하게 되면 아래 경로(./build)에 빌드된 내용이 담기는 디렉토리가 생기고 이 안에서 바이너리 파일을 확인할 수 있습니다.
> ls build/
build-ios-arm64.sh build-ios-armv7s.sh build-mac.sh ios-armv7 layout
build-ios-armv7.sh build-ios-deb.sh ios-arm64 ios-armv7s
> ls build/ios-arm64
CMakeCache.txt Makefile mh_cli tests
CMakeFiles cmake_install.cmake mh_script
macos의 경우 바로 사용하시면 되고 다른 iOS 기기의 경우 scp로 넣어주고 사용하시면 될듯합니다.
#> scp build/ios-arm64/mh_* root@192.168.0.13:///bin/
기본적인 명령어 리스트는 help 옵션 주면 확인이 가능하고 별도 옵션이 없으면 대화형 프롬프트로 넘어갑니다. (여기서도 help 되요)
#> mh_cli
MH[nil] >
How to find? How to Edit?
우선은 메모리 변조를 할 앱을 찾아야합니다. “process-list” 명령으로 프로세스 확인해주시고, pid로 해당 프로세스를 열어줍니다.
MH[nil] > process-list
PID UID bits Name
0 0 64bit kernel_task
1 0 64bit launchd
188 0 64bit amfid
318 0 64bit jailbreakd
MH[nil] > open 1717
Current PID=1717
MH[1717] >
아래는 뭐 help 보시면 금방 따라할 내용입니다.. 그냥 search-string 찾고자 하는 데이터를 찾고, result로 그 결과를 볼 수 있습니다.
MH[1717] > search-string hhhhhh
Found 9 result(s).
MH[1717] > result
update search @address:0000000108abaaf1
[5] 0x000000016f030000-0x000000016f0b8000 size=0x100000010 offset=0000000000000000, rw-/rwx, STACK
000000016f0b1ee8 68 68 68 68 68 68 68 00 00 00 00 00 00 00 00 00 hhhhhhh.........
update search @address:000000016f0b1ee9
[6] 0x000000016f030000-0x000000016f0b8000 size=0x100000010 offset=0000000000000000, rw-/rwx, STACK
000000016f0b1ee9 68 68 68 68 68 68 00 00 00 00 00 00 00 00 00 3f hhhhhh.........?
메모리 내용이랑 주소값을 같이 주는데, memory-write 명령으로 메모리 내 데이터 수정이 가능합니다. 다른 메모리 변조와 동일하게 오버되는 길이는 프로그램 동작에 영향을 줄 수 있으니 크기 잘 계산하셔서 넣어주시면서 테스트하시는게 좋습니다. (지지난주인가.. 장난치다가 아이패드 리붓됬고, 결국 재탈옥의 단계를 접어섰었네요..)
MH[1717] > memory-write 000000016f0b1ee8 "HAHWUL"
0000000000000000 48 41 48 57 55 4c HAHWUL
Js 지원 관련해선 테스트해본건 없는데, 아마 자바스크립트로 mh 기능 자체를 불러와서 쓰는걸 의미하는 것 같습니다. (그냥 이 기능을 api 부르듯이 쓸 수 있다? 느낌, Js로 로직을 만들 수 있다 정도?)
혹여나 Js 쓰게되면 댓글로 남겨놓겠습니다 :)