用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, 例如 3 C CC0 减去 1000 得到 3 B CC0

修改 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 卖东西有很多钱

你可能感兴趣的:(用Mac修改iPhone游戏作弊版教程)