吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 24021|回复: 28
收起左侧

[Android 分享] 〖全民汉化〗Android软件汉化教程之图文第九课————安卓游戏汉化破解教程

  [复制链接]
OPkyd 发表于 2013-11-27 07:18
本帖最后由 OPkyd 于 2013-11-27 11:28 编辑

写在前面的话

      本教程转自夏达@安智,教程内容可能有些难懂,需要具备一定的汇编和IDA使用知识。如果哪里写错了,烦请各位高手轻虐。
      本次作为示例的游戏是Vritra 1.02版,教程主要讲述绕过Resource.car校验的思路和过程,至于十六进制汉化,以后有空再讲(难度不大)。
     
问题描述

   用APKTOOL解开游戏Vritra,在Assets目录下会看到一个文件:resource.car。游戏中的部分文字在此处,用十六进制编辑器打开此文件,搜索我们最容易测试到的文字,比如“Quit App”:     
   
                                  163719omobye7myeje9be9.jpg

将其修改为任意字符,保存。然后用APKTOOL打包签名并安装,再打开游戏,游戏会出现如下报错:  

1637202xp2n3p7t7pxtfez.png

很明显,游戏对这个car文件进行了校验,但是校验的机制不明,如果时间足够长的话,可以找出它的校验机制,但是本例用的是绕过验证的方法。
最初的解决思路

通常碰到这样的报错信息,第一反应就是先搜索报错的字符串。于是搜索整个文件夹,找到\lib\armeabi-v7a\libcorona.so偏移量为0x0014A860处有此字符串
163720wrtd1k5jkatndau1.jpg

看到so文件,我们的神器IDA就必须出场了。用IDA打开libcorona.so,然后搜索报错的字符串,定位到此处:  

163751w88pzvjtv8h0vh3b.jpg

下面解释一下这部分ARM汇编代码的意思(只学过80x86的汇编,ARM是刚刚恶补
[AppleScript] 纯文本查看 复制代码
BL              _ZN18NativeToJavaBridge11GetInstanceEv ; NativeToJavaBridge::GetInstance(void)[/size]
[size=14px]LDR             R1, =(aError - 0x60590)[/size]
[size=14px]LDR             R2, =(aThisApplicatio - 0x60598)[/size]
[size=14px]MOV             R3, R7[/size]
[size=14px]ADD             R1, PC, R1 ; "Error"[/size]
[size=14px]STR             R7, [SP,#0x2C8+var_2C8][/size]
[size=14px]ADD             R2, PC, R2 ; "This application encountered a Lua erro"...[/size]
[size=14px]STR             R7, [SP,#0x2C8+var_2C4][/size]
[size=14px]BL              _ZN18NativeToJavaBridge15ShowNativeAlertEPKcS1_PS1_iPN3Rtt11LuaResourceE ;


第一个指令BL,意思是带链接的跳转,本例意思是执行后面那个函数;

第二个LDR是装载和存储单一字节或字的数据从/到内存,本例的意思是将后面地址的数据载入到R1寄存器上;
第三个类似第二个;
第四个MOV在8086中很常见,本例的意思如果不求甚解的话可以理解为R3=R7;
第五个ADD意思是将把两个操作数加起来,把结果放置到目的寄存器中;
第六个STR在本例的意思是将R7的内容存储到“#0x2C8+var_2C4”合成的地址,其中var_2C4在程序起始处有定义;
剩下几个参照前面所述。
知道了这些就很好改这部分,我们的目的是将错误对话框去掉,所以只需要把BL跳转语句修改为NOP。在ARM中NOP可以使用如下语句实现:

[AppleScript] 纯文本查看 复制代码
MOV R0,R0


这个语句相当于做一次无用功,也就相当于实现了NOP。      
      接下去就是怎么修改机器码的部分。先查询手册,查到MOV的机器码是0xE1A0(此处可能不同,主要看自己IDA反汇编出来的机器码是多少),然后用十六进制编辑器定位到最后一个BL的机器码,可直接用IDA查看HEX VIEW-A。偏移位为:0x00060598,然后再用十六进制编辑器跳到该位置,将其十六进制改为00 00 A0 E1。(有人可能会问,为什么机器码明明是0xE1A0,改的时候却要变成0xA0E1,原因在于高八位和低八位在文件中是倒置的)。
保存,然后重新打包签名并安装。      

     很遗憾,报错的对话框没有了,但是游戏停在启动画面,然后自动退出。           
   

又一个解决思路

        看来单纯的除去对话框在本例中无法解决问题,于是夏达在和朋友们开了几个小时CS大战后(我的水平超级菜,十发子弹,五发打队友,四发打天上,还有一发射墙上~),又重新打开IDA,一个函数一个函数的看(泪奔啊~)。
        终于,在IDA分析出来的函数列表中发现了这样的函数块:


1637525hhhqeq8zyy0s0qq.jpg

虽然我的英语不是很好,但是还是模模糊糊隐隐约约的看得懂Verify这个单词的意思,速度点击进入此函数块。

163820gooofol1pkghaowu.jpg

解释一下红线绿线的意思,红线是no,绿线是yes。      
代码就不再分析了,和上面说的类似,思路也一样,我们要做的就是将两个BEQ跳转直接置为NOP。方法和上面一样。(我好累,就不一一截图了)。


CAR的汉化

考虑到还是有部分朋友不会做十六进制汉化,在本例一并说了吧。
首先选择一款你喜欢和上手的十六进制编辑器,夏达最喜欢用的是HEX WORKSHOP。打开Resource.car,找到要汉化的字符串,比如问题描述里说的“Quit App”,然后找一个工具算出“退出”二字的UTF-8码是0xE98080 0xE587BA,替换掉原来的字符串(大小要相等,少的用空格补)

测试汉化成功:
   

163722a6ynadbs6qddnmq4.png


部分资料下载
ARM指令查询手册:  
百度盘:http://pan.baidu.com/s/148VA6

                修改后的so文件:

百度盘:http://pan.baidu.com/s/16AK2z



教程到此完成,若有不足日后再完善,欢迎提出意见。



~相信自己,汉化简单致死!~

   传送门:                                                                                                               
第一课:  http://www.52pojie.cn/thread-225285-1-1.html
第二课http://www.52pojie.cn/thread-225295-1-1.html
第三课http://www.52pojie.cn/thread-225298-1-1.html
第四课http://www.52pojie.cn/thread-225309-1-1.html
第五课http://www.52pojie.cn/thread-225314-1-1.html
第六课http://www.52pojie.cn/thread-225319-1-1.html
第七课http://www.52pojie.cn/thread-225323-1-1.html
第八课http://www.52pojie.cn/thread-225327-1-1.html
第九课http://www.52pojie.cn/thread-225364-1-1.html
第十课http://www.52pojie.cn/thread-225368-1-1.html




免费评分

参与人数 3热心值 +3 收起 理由
qwerttqqaz + 1 我很赞同!
X雷廷X + 1 谢谢@Thanks!
Smallhorse + 1 精品内容

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Smallhorse 发表于 2013-11-27 07:32
果断支持,精品内容啊!少见的如此详细分析安卓,顶起!
大爱如花和似玉 发表于 2014-7-10 01:57
clf3211147 发表于 2013-11-27 08:03
huanglin6359 发表于 2013-11-27 08:10

感谢提供精品内容
linglong2013 发表于 2013-11-27 08:12
支持原创
辰龙飞飞 发表于 2013-11-27 08:21
谢谢楼主分享
hackest 发表于 2013-11-27 08:43
围观楼主签名档
tclgb 发表于 2013-11-27 09:04
这一课有点难,而且耗时,多谢指导
w小杰 发表于 2013-11-27 09:16
看看哦  感谢分享 亲
永恒篆刻 发表于 2013-11-27 09:23
感谢楼主的分享!!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 13:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表