用Mac修改iPhone遊戲作弊版教程

有興趣修改 iPhone 遊戲的朋友,可看這帖
【ipod4g出品】用 iPhone 修改及調試遊戲作弊版教程
【ipod4g出品】用 cygwin 修改 iPhone 遊戲作弊版教程



寫這教程主要是因爲

① iPhone 的 otool 及 as 工具不能處理 ARMv7 指令集
② 現在大部份的 iPhone 遊戲程序都是兼容 ARMv6 及 ARMv7 的通用程序 (Universal Binary)


初代 iPhone 使用 ARMv6 CPU 指令集, 直到3GS, iPad, IPhone 4設備蘋果開始採用了 ARMv7 CPU 指令集, 
修改遊戲現在是必須要處理 ARMv7 指令集及處理兼容程序的簽名

這教程, 以 Inotia 3:Children of Carnia 艾迪諾亞3:卡尼亞的孩子們 爲例子作修改


Inotia 3 v1.0.1



(1) Mac 的編譯工具是 iOS SDK, 可在 developer.apple.com 下載
安裝 iOS SDK 後會在 /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/


(2) 檢查 Inotia3 是否兼容程序

打指令
  1. /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/otool -f Inotia3
  2. /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/otool -h Inotia3


就會看到是兼容 ARMv6 及 ARMv7 的通用程序

  1. architecture 0
  2.     cputype 12
  3.     cpusubtype 6
  4. architecture 1
  5.     cputype 12
  6.     cpusubtype 9


引用
/usr/include/mach/machine.h
#define CPU_TYPE_ARM                       ((cpu_type_t) 12)
#define CPU_SUBTYPE_ARM_V6         ((cpu_subtype_t) 6)
#define CPU_SUBTYPE_ARM_V7         ((cpu_subtype_t) 9)



(3) 要修改,首先要把 Inotia3 切開 (用 iPhone 的 lipo 也可以, 請看此帖)

把 Inotia3 切開爲 Inotia3.v6
  1. /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/lipo -thin armv6 Inotia3 -output Inotia3.v6



把 Inotia3 切開爲 Inotia3.v7
  1. /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/lipo -thin armv7 Inotia3 -output Inotia3.v7



(4) 反彙編 Inotia3.v6 及 Inotia3.v7
  1. /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/otool -otV Inotia3.v6 > Inotia3.v6.txt
  2. /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/otool -otV Inotia3.v7 > Inotia3.v7.txt


 Inotia3.v6.txt.zip (4599 K) 下載次數:125 
 Inotia3.v7.txt.zip (4622 K) 下載次數:29 

發現 Inotia3.v6.txt 是 32 bits 的指令及 Inotia3.v7.txt 是 32 bits 及 16 bits 的 thumb-2 混合指令
 

反彙編 ARMv7 也可用 IDA Pro Advanced v5.5 
下載 : http://bbs.weiphone.com/read-htm-tid-363306.html
 


(5) 假設要先修改 Inotia3.v6

  1. 0003ccc0        e1a00005        mov     r0, r5



mov     r0, r5
修改爲
mov     r0, r4

要找到ARM指令代碼, 用 vim 或 nano 建立 armv6test.s 如下
  1.     .file "armv6test.s"
  2.     .code 32
  3. _main:
  4.     mov     r0, r5
  5.     mov     r0, r4


彙編 arm 打
  1. /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/as -arch armv6 armv6test.s -o armv6test.o
  2. /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/otool -tv armv6test.o


便看到
  1. armv6test.o:
  2. (__TEXT,__text) section
  3. _main:
  4. 00000000    e1a00005    mov         r0, r5
  5. 00000004    e1a00004    mov         r0, r4



(6) 假設要修改 Inotia3.v7

  1. 0002b022            4630        mov     r0, r6



mov     r0, r6
修改爲
mov     r0, r4

要找到ARM指令代碼, 用 vim 或 nano 建立 armv7test.s 如下
  1.     .file "armv7test.s"
  2.     .thumb_func
  3.     .code 16
  4. _main:
  5.     mov     r0, r6
  6.     mov     r0, r4


彙編 arm 打
  1. /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/as -arch armv7 armv7test.s -o armv7test.o
  2. /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/otool -tv armv7test.o


便看到
  1. armv7test.o:
  2. (__TEXT,__text) section
  3. _main:
  4. 00000000        4630    mov         r0, r6
  5. 00000002        4620    mov         r0, r4



(7) 用 vbindiff 修改 Inotia3.v6 及 Inotia3.v7, 或 Mac 其他的 HexEdit / Hex Friend 也可以(用 iPhone 的 vbindiff 也可以)

留意: 修改程式的地址位置要減去十六進制0x1000, 例如 3CCC0 減去 1000 得到 3BCC0

修改 Inotia3.v6 地址 3BCC0 爲 04
修改 Inotia3.v7 地址 2A022  爲 20

 


vbindiff 可在這裏下載 http://www.cjmweb.net/vbindiff/

下載後, 編譯方法
  1. tar xzvf vbindiff-3.0_beta4.tar.gz
  2. cd vbindiff-3.0_beta4
  3. ./configure
  4. make && make install



(8) 修改後用 Mac ldid 簽名 (用 iPhone 的 ldid 也可以)
  1. export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate; ldid -s Inotia3.v6
  2. export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate; ldid -s Inotia3.v7


Mac 的 ldid 可在這裏下載
http://bbs.weiphone.com/read-htm-tid-429111.html


(9) 合併 Inotia3.v6 及 Inotia3.v7 爲兼容 ARMv6 及 ARMv7 的通用程序 (用 iPhone 的 lipo 也可以)
  1. /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/lipo -create Inotia3.v6 Inotia3.v7 -output Inotia3.patched



(10) 上傳 iPhone / iPad 真機作測試,可試試這個修改後的作弊版本,Inotia 3 賣東西有很多錢
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章