so文件成品评论【整理】
| 这是我的 @布加迪20 AZ在一篇文章中写道:<汉化so文件的心得>中的技术附件做的简洁性整理。原来的看起来不是非常方便。一起分享学习.. |
正文
SO文件汉化心得
--By布加迪20 2014/08
我自己也是新手。研究了好久。网上也找不到相关教程。所以决定写一个比較具体的教程。教程是关于汉化so文件时出现的字符串长度不够的问题,后面还有做字库的简单教程。相关文件都在文章结尾处,假设出现排版问题。建议在手机上用WPS看,选适应手机就好了。
汉化so改动偏移
IDA在电脑上用。HE是安卓上的十六进制编辑器HexEditor。以“浮游生物2:孢子的世界”(版本号1.0.1.1)为例。手机上用HE打开libcocos2dcpp.so,找到“MostDepth:"如图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemloYW8yMDEy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
(libcocos2scope.so能够用Xplore管理器导出,长按安装包。选以zip方式打开。在lib里)记下M的位置为004eea07。
“START”和“Most Depth:”相应游戏中位置,例如以下图:
能够看到,“Most Depth:"前面的“START"要汉化成“開始”位置不够(一个汉字抵三个字母,每一个词前后都要有00隔开),而后面的“Most Depth:"能够改成“MostDepth:"也能够汉化为“最深处:”,也就能够在“START"后面移出一个空格,正好能够汉化为“開始”。如图:
记下这时M的位置为004eea08。可是这时侯“START”偏移没变,“MostDepth:"的偏移变了,游戏里是显示不出的:
以上在手机上完毕,电脑上能够用其他十六进制编辑器,推荐UE32。
这时候就须要用到IDA,用IDA打开电脑上的so文件,在“查找”里选“文本”,输入“Most Depth:"(我电脑里的还是原文件)。找到这里
记下198112 。
然后打开一个十六进制计算器,用之前“Most Depth:"里M的位置减去198112,即“4eea07-198112”。得到3568f5,这时候要用HE在so文件中搜索f56835(要反过来),找到了。
我们要改的就是这个,之后用改过的“MostDepth:"里M的位置减198112。即“4eea08-198112",得3568f6,之后要做的就是把“f56835"改成“f66835",如图:
接下来保存文件,打开游戏測试吧
能够看到,“MostDepth:"已经显示出来了。
做字体库汉化
当然,要汉化这个游戏还须要做字库,下面附简单教程。
字库我是用hiero做的。游戏里的字库都在assests/fonts里:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemloYW8yMDEy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
有7种字,每种都要做一个,打开hiero,以segoe_ui-16_0.png和segoe_ui-16.fnt为例:
选微软雅黑(我认为和游戏字体挺像),在右边的“Sample Text"里输入“開始”,并选定字号为16。选“Glyph cache"。把宽高都设为2048(方便以后字多了能够一张图解决)。
软件有点问题,所以Rendering里没有显示字体,只是无论它,点File→Save BMF on files (text)...。文件名称就写“segoe_ui-16_0.fnt",点保存就会生成两个文件“segoe_ui-16_0.fnt”和“segoe_ui-16_0.png",注意之后把“segoe_ui-16_0.fnt”改成“segoe_ui-16.fnt”。
其它字体以同样的方式生成,然后替换assests/fonts里的字体(教程里的仅仅添加了“開始”两个字)。
然后用HE打开so文件,我们刚刚在“START"后面添加了一个空格,能够改成“開始”了。用HE搜索到“START ”,并查到“開始”的十六进制为“e5 bc 80 e5 a7 8b”。替换掉原来的。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemloYW8yMDEy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
打开游戏看看效果:
能够看到汉化成功了“開始”。
借助“空位”汉化so
这是我自己的汉化心得。拿出来分享一下,这个教程仅仅是简介一下添加字符串长度的一种方法。适用于前后有多余的空位(一般是汉化其他语句留下来的),只是要是前后都没有空位,就要用还有一种方法
这样的方法事实上也是改动偏移,看这里的字符串:
一大堆挤在一起。汉化成中文位置根本不够,可是我们能够看到so文件中有非常多空白的地方,比方这里:
看这里有这么大一片空白,足够我们改了!随便从哪里開始,比方我想把“Game Over”改成“游戏结束”。
就在把任何位置的空字符串替换成“e6b8b8 e6888f e7bb93 e69d9f”
(别忘了在字库里加入新的字。不然会出现两种情况:1.显示不出字。2.进游戏直接卡死。
)
接着依照上面的方法把“Game Over”的偏移改动到“游戏结束”的位置,就能够了。
注意
1、不是哪里的空白位置都能够改,这个叫空白数据段,通常像这样的前后都有字符串而中间空出来的一般就是了。(好像有寻找exe或dll数据段位置的工具,可是so的好像没有。所以不清楚是不是空白数据段时,能够自己改动试试)
2、每一次改动一定记得备份。改这样的十六进制的东西特别easy出错,假设没备份的话。后果非常严重。。。。。。
有关下载
以下是一些相关工具的链接,非常多版本号都低了。只是也没什么影响
浮游生物:孢子的世界
Hex editor
shareid=3434074993&uk=3324813120">http://pan.baidu.com/share/link?shareid=3434074993&uk=3324813120
IDA
http://pan.baidu.com/share/link?shareid=3454802130&uk=3324813120
Hiero
Hiero(已有java环境的直接用)
http://pan.baidu.com/share/link?shareid=3510464528&uk=3324813120
Xplore文件管理器
http://pan.baidu.com/share/link?shareid=3543020754&uk=3324813120
| 原文完。谢谢全部技术的无私分享,交流才有有进步... |
版权声明:本文博主原创文章,博客,未经同意不得转载。
so文件成品评论【整理】的更多相关文章
- 【我的Android进阶之旅】Android 混淆文件资源分类整理
之前将所有的混淆都配置在一个 proguard-rules.pro 这个Android Studio新建项目时自动生成的文件里面,而随着项目功能迭代越来越多,代码量越来越多,引用的第二方库.第三方库都 ...
- podSpec文件相关知识整理
上一篇文章整理了我用SVN创建私有库的过程,本文将整理一下有关podSpec文件的相关知识. podSpec中spec的全称是“Specification”,说明书的意思.顾名思义,这是用来描述你这个 ...
- 【Fine学习笔记】python 文件l操作方法整理
python脚本可以对excel进行创建.读.写.保存成指定文件名,保存到指定路径的操作.整理了以下处理方法: 首先区别几个操作方式: "r" 以读方式打开,只能读文件 , 如 ...
- Javascript 文件操作(整理版)
Javascript 文件操作 一.功能实现核心:FileSystemObject 对象 其实,要在Javascript中实现文件操作功能,主要就是依靠FileSystemobject对象.在详细介绍 ...
- day 10 字符编码和文件处理 细节整理
pycharm是文本编辑器. 大概理解为: 输出到屏幕上的时候,是解码过的字符串,用 decode 处理的时候要编码成相应的流, encode 成你要用的格式就可以了 1 .字符编码: 字符==== ...
- EBS预置文件作用收集整理
在EBS之中,有很多的配置选项(profile),系统管理员只需要对它们做一些简单的配置,就可以达到控制流程开关.安全访问.个人喜好等等方面的要求. 以HR: Security Profile为例,该 ...
- 将excel按照某一列拆分成多个文件(方案整理)
1解决方案:将excel按照某一列拆分成多个文件 https://blog.csdn.net/ntotl/article/details/79141314 2遇到的问题:解决vbe6ext.olb不能 ...
- 【总结】java 后台文件上传整理
public Map<String,String> clientUploadAttachment(Long belongId, String fileSource, MultipartFi ...
- Spring读取加密属性文件处理--待整理
引言:Spring框架俨然已经是目前Java WEB项目开发的一个宠儿,更有人将Spring, Struts,和Hibernage称之为Java WEB项目开发的3件利器.Spring的依赖.注入.A ...
随机推荐
- UWP 新手教程1——UWP的前世今生
文件夹 引言 设备族群 UI 和通用输入模式 通用控件和布局面板 工具 自适应扩展 通用输入处理 引言 在本篇文章中,可以掌握下面知识: 设备族群,怎样决定目标设备 新的UI控件和新面板帮助你适应不同 ...
- Dynamics CRM 2015/2016 Web API:Unbound Function 和 Bound Function
今天我们来看看Dynamics CRM Web API Function 吧, 这是一个新概念,刚接触的时候我也是比較的迷糊.这种命名确实是和之前的那套基于SOAP协议的API全然联系不上.好了,不说 ...
- Log4net.confager配置官方文档
http://logging.apache.org/log4net/release/config-examples.html
- 【习题 5-11 UVA 12504 】Updating a Dictionary
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 不确定某个map里面是否有某个关键字的时候. 要用find来确定. 如果直接用访问下标的形式去做的话. 会强行给他加一个那个关键字( ...
- Linux中U盘和SD卡加载卸载命令
U盘挂载命令U盘插入的时候会显示启动信息,启动信息中sda: sda1指U盘的设备名为sda1dev设备目录下有一个sda1设备文件,此设备文件就是我们插入的U盘,我们将这个设备文件挂载到Linux系 ...
- Android系统开发(5)——Eclipse for C/C++
一.下载JDK 官方下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 二 ...
- 基于Android Fragment功能的样例
通过近期空暇时候对Fragment的学习,尝试着写了一个小Demo,将在开发的时候能经常使用到的Fragment知识放在一起,写过了这个Demo对Android Fragment的了解更加深入了,以后 ...
- 【LeetCode-面试算法经典-Java实现】【104-Maximum Depth of Binary Tree(二叉树的最大深度)】
[104-Maximum Depth of Binary Tree(二叉树的最大深度)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a binary t ...
- docker nginx实现一个主机部署多个站点
原文:docker nginx实现一个主机部署多个站点 在某站租赁的虚拟机快到期了,续费得花200多,想到在阿里云新买的服务器,不如把这个也转移过去.域名我就用真实的吧,大家别黑我网站就好了,谢谢各位 ...
- JavaScript实现form表单的多文件上传
form表单的多文件上传,具体内容如下 formData对象可以使用一系列的键值对来模拟一个完整的表单,然后使用Ajax来发送这个表单 使用<form>表单初始化FormData对象的方式 ...