MacOS, iOS(iPhone, iPad) Devices 에서의 메모리 변조

보통 안드로이드, 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 쓰게되면 댓글로 남겨놓겠습니다 :)