您现在的位置: 晨光科技 >> 文章 >> 技术 >> IT >> 正文  
  RVA字串乾坤大挪移--偏移量转换器的简单用法         
RVA字串乾坤大挪移--偏移量转换器的简单用法
[ 作者:佚名    转贴自:http://www.anqn.com/jiamijiemi/gongjujiqiao/2009-01-19/a09105821.shtml    点击数:130    更新时间:2010/11/27    文章录入:admin ]
[注:本站登载的某些文章并不代表本站支持或反对其观点或肯定其真实性]

首先声明的是,我只是结合一个极简单的例子来浅浅的说说,希望对你的汉化有所帮助。还需要强调的一点是很多 ASCII 字串并不是 RVA字串,只有 RVA 字串才能使用这种方法。如果你对 RVA 字串的定义和分类还比较模糊,请先关闭此文档,先去看看伟乾写的 ASCII 资源的汉化文章,这是基础。不然你可能说,我按照你的方法,算出 RVA 偏移量,但是在文件中找不到(或改了无效),都是因为不是这种 RVA 字串的缘故。
  例子程序是 B-jigsaw 4.1,一个拼图游戏,5.0 已经出来了,不过 5.0 中没有我们可利用的 RVA 字串加以代换,所以还是拿老版本说说,界面如下图所示,这是一个经过初期汉化后的软件开始界面。

图1

  大家可以看到,那个“OK”暂时没有汉化,当然你也可以译为“好”或“是”,不过今天我们要把它译为“确定”,再来看看这个 OK 在UE 中的样子吧。如图2

图2

  注意到,字符不足以让我们把“OK”汉化为“确定”,所以我们采用RVA字串的替换来实现它的汉化。再往后看,使用乾坤挪移,在这个具体的例子中,后面有个“Invalid registration code!”的 ASCII 字串,把它译为“无效注册码!”后,多出的字符位置修改为“确定”绰绰有余。(当然如果你在前期已经汉化了此字串,后面如果有足够的 00 就可加以利用),就从这里入手。将光标定位在“OK”处的首字符处,在UE的状态栏就会显示当前的实偏移量,一个是十六进制的,一个是十进制的。如图 3,639f2h 是十六进制,408050 为十进制。

图3

  打开 PosConv (偏移量转换器),图标是一个笑脸哎,软件秉承了点晴系列软件的一贯风格,简捷明快,小巧实用,主界面如下,如图4。PosConv ,支持 PE 格式的文件,(32 位 Windows 程序的格式),不支持 NE 格式的文件。( NE 是 16 位 Windows 程序的格式), 当然,也不支持 Dos 程序。:) 
    目前的最新版本是 0.94 版,相比较以前的版本,新版本提供热键(F12)呼出支持,这下使用就更方便啦!

图4

图5

  偏移量转换器支持鼠标拖曳,找到需汉化的程序文件“bjigsaw.exe”直接拖到程序选择窗口就行了,见图5。当然你也可以通过点击“...”浏览选定需汉化的程序文件。选定文件后,我们可以点击“顶端”按钮,这样偏移量转换器就永远停留在最顶端,对于我们下面的查找替换工作来说非常方便;当然如果你不想让她停留在最顶端,再次点击“顶端”按钮取消该功能即可。
    图 6 ,直接在实偏移栏中输入 OK 的十六进制实偏移值,即 639f2,代码栏则显示计算出来的代码RVA值,本例中为 F2454600。你可以看到程序已经自动根据你输入的实偏移显示了区段名,本例中为.data 区段。如图 8。点击“至剪贴板”即可将代码值复制到剪贴板内,方便以后的操作。

图6

图7

    对于绝大多数软件来说,一般不需要你来选择区段,如本例,程序可智能根据实偏移值来判断并自动选择区段。只有某些很少见的软件出现区段重叠时才需要用户进行区段选择。那位朋友可能要问了,如果我“不幸”碰到一个这样的情况,该如何处理呢?问得好,其实不用麻烦你,偏移量转换器觉察到有区段重叠时,会自动跳出对话框来提示你,还是看看图吧,唉,这样的例子还真不好找,嗯,找到了,大家看看。

图8

    程序提醒我们有区段重叠,并且给出了重叠的区段名称,即“BSS”和“.tls”。点击“选择”按钮,进入区段选择界面,如图 9。我们只需把重叠的区段前的复选框的“√”清除即可。如图10。点击确定继续进行,够智能吧?顺便再多说两句,进行区段选择时,当你点击任一.text、.data等区段,(装入程序不同,区段名也会有所不同),filemin,filemax,将显示该区段中实偏移量的最大值与最小值,你也可以根据实偏移量的范围来判断具体处于那个区段,不过,我很懒,所以都交给偏移量转换器代劳了。

图9 图10

     好了,还是回到例子中来吧,在 UE 中打开查找功能,将剪贴板内保存的代码值粘贴至查找窗口后,如图9设置。向上搜索此代码,并记下位置。(这个向上搜索不一定,大多数情况下是在字串的前面不远的地方,不过也有在后面的例子)。

图11

  在这个程序中只找到了一处,位于0x2364处。如下图所示。对于其它软件,有时我们找到的不止一处,那么倒底是那个代码需要修改呢?这就需要我们进行修改测试啦,虽然大多情况下我们找到的并不会很多,如果逐个修改测试还是比较麻烦,汉化新世纪的伟@伟乾介绍了一个比较简单的方法,+1,如 F2454600 改为 F3454600 ,存盘看看运行的界面原来显示 OK 是否变成了 K ,如果是说明我们找到了,如果不是,说明这个不是,查找下一个。如果还是没有找到,只能说明你老兄粗心,计算步骤有错,再试试。“什么什么,已经检查好几遍了,还是找不到RVA偏移量”,这个不是RVA字串,请认真看看有关文章。

图12

  现在可以回去修改程序了,例子程序中我在“无效注册码!”的后面隔两个00的位置上添加“确定”字符,即“C8B7B6A8”,如图所示。当然你也可以在其它位置修改,但要注意必须和上一字串至少要有一个00相隔。

图13

  接着,我们把光标定位在“确定”的首字符处,读出它的实偏移量,如图12所示。十六进制为63a5cH。再次启用偏移量转换器,此偏移量仍位于data区段,如图13,输入63a5c,计算出其代码偏移量为5C464600。(这里又有一个技巧了。我们用鼠标选择,从“OK”开始,一直选择到“确定”前面,看看我们选择的代码的长度,然后RVA代码减去或加上这个长度,就是我们需要修改后的RVA代码。注意,这里的RVA代码是低位在前,高位在后显示的。在本例中,距离是比较短的,所以这个技巧就很方便了。如果你乾坤挪移功力太高,距离太远了,我们可以将光标定位在两个字串的首字符处,将实偏移相减就是距离了。不过在远距离操作中,若超出了区段,这个技巧就无法适用了。)

图12

图13

  在 UE 中,跳转到0x2364处,将“F2454600”修改为“5C464600”。如图14所示。

图14

  存盘,试运行一下,下图就是结果图,我们的目的实现了。原来的“OK”我们并没有动它,这就是乾坤大挪移!

图15

  文章到这里就结束了,这里主要是结合一个 RVA 字串的汉化讲了一下偏移量转换器的使用方法,希望对你有所帮助。

  • 上一篇文章: PE文件头

  • 下一篇文章: SSH和VPN凸墙的区别与联系分析
  •    
    [注:标题搜索比内容搜索快]
    发表评论】【告诉好友】【打印此文】【关闭窗口
     最新5篇热点文章
  • 轨道钢承重计算公式及应用[109]

  • 【选型】如何为变频器选取阻值…[86]

  • AIS2023参展厂商名录[345]

  • AGV综合选型[170]

  • APIE 2023第4届亚太国际智能装…[138]

  •  
     最新5篇推荐文章
  • 外媒:正在唤醒中国的习近平[305]

  • 中国反伪科学运动背后的CIA黑手…[494]

  • [转载]袁隆平真言:中国最大的…[668]

  • 台专家:当年我们造IDF时 大陆…[572]

  • 旅日华人:中国严重误判日本民…[577]

  •  
     相 关 文 章
    没有相关文章

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
        没有任何评论
    设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 | 
    版权所有 Copyright© 2003 晨光科技        站长:璀璨星辰        页面执行时间:250.00毫秒
    Powered by:MyPower Ver3.5