论坛风格切换切换到宽版
  • 2685阅读
  • 8回复

请教前辈们,怎样去除非标字符串的长度限制,谢谢! [复制链接]

上一主题 下一主题
离线ycz
 

发帖
11
金钱
70
威望
7
只看楼主 倒序阅读 0 发表于: 2015-07-10
例如:
Quicksearch 的 UTF-8 码 是11字节
快速搜索 的 UTF-8 码 是12字节
翻译出来只能显示"快速搜"
怎样去除字符串长度限制?????

前辈们,能告诉怎样解决吗?
十分感谢!!@
离线wanfu

发帖
2711
金钱
11950
威望
1195
只看该作者 1 发表于: 2015-07-10
用 Passolo + 非标宏可以自动修改长度标识符。
不过如果不是 Delphi 字符串,需要自己定义一个字串类型。
贴出字串前后 16 个字节以上的十六进制代码,我帮你分析一下。
离线ycz

发帖
11
金钱
70
威望
7
只看该作者 2 发表于: 2015-07-11
离线wanfu

发帖
2711
金钱
11950
威望
1195
只看该作者 3 发表于: 2015-07-11
从上图看,字串前并没有长度标识符存在。要看看引用地址前的情况。
可能的话,给出这个文件的下载地址。
离线wanfu

发帖
2711
金钱
11950
威望
1195
只看该作者 4 发表于: 2015-07-12
再仔细看了一下你询问的内容,发现这是个翻译超长移位写入的问题,并不是长度标识符问题。
解决这个问题的前提是该字串被引用,可以用 Passolo 非标宏提取并查看其是否有引用。或者使用非标宏中的引用搜索功能搜索一下。
非标宏可以自动移位被引用的超长翻译,非常方便,建议你试用一下。
当然,Radialix 3、Athena-A 也可以用来处理翻译超长问题。不过 Radialix 3 只支持 PE32 文件。



离线ycz

发帖
11
金钱
70
威望
7
只看该作者 5 发表于: 2015-07-12
foo_quicksearch.zip (141 K) 下载次数:6
离线wanfu

发帖
2711
金钱
11950
威望
1195
只看该作者 6 发表于: 2015-07-12
用非标宏提取了字串,发现 Quicksearch 有被引用,故可以移位。·
原始字串    Quicksearch        
原始字串所在节名    .rdata        
原始字串开始地址    223004        
原始字串结束地址    223014        
原始字串最大地址    223015        
原始字串字节长度    11        
原始字串最大允许字节长度    11        
原始字串代码页    65001        
原始字串引用代码    1C730310        
原始字串引用地址    30017,33118
原始字串跟随引用地址的字串类型    0,5        
原始字串引用次数    2
    
分析了一下 Quicksearch 字串引用地址前的代码,发现此字串有跟随引用地址的字串字节长度标识符。见下图:

图中选定部分为第二个引用地址的引用代码,引用代码前的第二个字节 0B 即为字串字节长度的十六进制值,它的前后分别有 6A 和 68 二个字节。
所以估计需要修改 0B 为翻译长度的十六进制值 0C 才能正确显示,但由于没有完整程序,无法测试。
不过这里介绍一下自定义跟随引用地址的字串类型的方法和操作步骤。

1、按下图增加一个自定义字串类型(这里我用 foobar2000 文件名,因为这个软件的部分字串的标识符也是跟随引用地址的)


2、按下图设置提取选项,并选定“自定义字串”选项,并在弹出的列表编辑框中选择 foobar2000 字串类型。


3、提取后的字串列表


4、过滤显示自定义字串类型 foobar2000


5、过滤显示后的 foobar2000 字串类型的字串列表


6、写入时的状况


7、跟随引用地址的字串长度标识符的修改结果
翻译字串    快速搜索        
翻译字串所在节名    .rdata        
翻译字串开始地址    264208        
翻译字串结束地址    264219        
翻译字串最大地址    264221        
翻译字串字节长度    12        
翻译字串最大允许字节长度    13        
翻译字串代码页    65001        
翻译字串引用代码    10140410        
翻译字串引用地址    30017,33118        
翻译字串跟随引用地址的字串类型    0,5        
翻译字串引用次数    2        
翻译字串的字串类型字节长度    0  
上面的“翻译字串跟随引用地址的字串类型 0,5“ 显示了2 个引用地址的不同字串类型


图中选定部分为修改后的引用代码(因为已经移位),引用代码前的第二个字节 0C 即为字串字节长度的十六进制值。

注意:
因为第一个引用地址的字串类型为 0(即标准字串类型),非标宏必须升级到 2015.07.12 最新版,否则写入时无法修改第 2 个引用地址的字串长度值。
离线ycz

发帖
11
金钱
70
威望
7
只看该作者 7 发表于: 2015-07-12
解释好详细,太感谢了!!!!!!
离线wanfu

发帖
2711
金钱
11950
威望
1195
只看该作者 8 发表于: 2015-07-12
单击帮助菜单中的检查更新菜单,或进入设置,在自动更新中单击 [检查] 按钮即可进行自动更新。