有兴趣修改 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 是否兼容程序
打指令
就会看到是兼容 ARMv6 及 ARMv7 的通用程序
(3) 要修改,首先要把 Inotia3 切开 (用 iPhone 的 lipo 也可以, 请看 此帖 )
把 Inotia3 切开为 Inotia3.v6
把 Inotia3 切开为 Inotia3.v7
(4) 反汇编 Inotia3.v6 及 Inotia3.v7
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
由
mov r0, r5
修改为
mov r0, r4
要找到ARM指令代码, 用 vim 或 nano 建立 armv6test.s 如下
汇编 arm 打
便看到
(6) 假设要修改 Inotia3.v7
由
mov r0, r6
修改为
mov r0, r4
要找到ARM指令代码, 用 vim 或 nano 建立 armv7test.s 如下
汇编 arm 打
便看到
(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/
下载后, 编译方法
(8) 修改后用 Mac ldid 签名 (用 iPhone 的 ldid 也可以)
Mac 的 ldid 可在这里下载
http://bbs.weiphone.com/read-htm-tid-429111.html
(9) 合并 Inotia3.v6 及 Inotia3.v7 为兼容 ARMv6 及 ARMv7 的通用程序 (用 iPhone 的 lipo 也可以)
(10) 上传 iPhone / iPad 真机作测试 ,可试试这个修改后的作弊版本,Inotia 3 卖东西有很多钱
【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 是否兼容程序
打指令
- /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/otool -f Inotia3
- /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/otool -h Inotia3
就会看到是兼容 ARMv6 及 ARMv7 的通用程序
- architecture 0
- cputype 12
- cpusubtype 6
- architecture 1
- cputype 12
- 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
- /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/lipo -thin armv6 Inotia3 -output Inotia3.v6
把 Inotia3 切开为 Inotia3.v7
- /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/lipo -thin armv7 Inotia3 -output Inotia3.v7
(4) 反汇编 Inotia3.v6 及 Inotia3.v7
- /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/otool -otV Inotia3.v6 > Inotia3.v6.txt
- /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
- 0003ccc0 e1a00005 mov r0, r5
由
mov r0, r5
修改为
mov r0, r4
要找到ARM指令代码, 用 vim 或 nano 建立 armv6test.s 如下
- .file "armv6test.s"
- .code 32
- _main:
- mov r0, r5
- mov r0, r4
汇编 arm 打
- /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/as -arch armv6 armv6test.s -o armv6test.o
- /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/otool -tv armv6test.o
便看到
- armv6test.o:
- (__TEXT,__text) section
- _main:
- 00000000 e1a00005 mov r0, r5
- 00000004 e1a00004 mov r0, r4
(6) 假设要修改 Inotia3.v7
- 0002b022 4630 mov r0, r6
由
mov r0, r6
修改为
mov r0, r4
要找到ARM指令代码, 用 vim 或 nano 建立 armv7test.s 如下
- .file "armv7test.s"
- .thumb_func
- .code 16
- _main:
- mov r0, r6
- mov r0, r4
汇编 arm 打
- /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/as -arch armv7 armv7test.s -o armv7test.o
- /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/otool -tv armv7test.o
便看到
- armv7test.o:
- (__TEXT,__text) section
- _main:
- 00000000 4630 mov r0, r6
- 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/
下载后, 编译方法
- tar xzvf vbindiff-3.0_beta4.tar.gz
- cd vbindiff-3.0_beta4
- ./configure
- make && make install
(8) 修改后用 Mac ldid 签名 (用 iPhone 的 ldid 也可以)
- export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate; ldid -s Inotia3.v6
- 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 也可以)
- /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/lipo -create Inotia3.v6 Inotia3.v7 -output Inotia3.patched
(10) 上传 iPhone / iPad 真机作测试 ,可试试这个修改后的作弊版本,Inotia 3 卖东西有很多钱