吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7027|回复: 34
收起左侧

[原创] 记事本存储格式之诡异UTF-8

[复制链接]
yietlqwr 发表于 2020-4-20 08:00
本帖最后由 yietlqwr 于 2020-4-20 16:44 编辑


记事本存储格式之诡异UTF-8

本帖意图:希望众大神出手解决两个问题:
1、让系统自带记事本在以UTF-8格式存储时,BOM头为EF BB BF,且一个汉字以3字节保存;
2、去除utf-8-tool.exe的自校验,进而汉化界面。
(感谢610100 朋友,在他的帮助下已解决)

utf-8-tool样本下载地址:https://yietlqwr.lanzouj.com/ibmfpng

一、系统自带记事本的问题
文本文档,默认是ANSI格式,转存为UNICODE格式时,加上了BOM头FF FE,一个汉字2字节,编码当然也变了,这个没有问题,属正常现象;但是以UTF-8格式存储时,却是仅在UNICODE基础上再加上FF FE头,一个汉字还是2字节,且编码与UNICODE完全相同,如下图:
001.JPG
找了个工具utf-8-tool.exe,
002.JPG
将文档转化,得到BOM头为EF BB BF的真正UTF-8格式文档,此时一个汉字为3字节编码,如图
003.JPG
这个结果和以前XP下的记事本UTF-8格式是一样的。
更诡异的是,转来转去,将utf-8-tool.exe也同化了,转带BOM头的UTF-8时也变成和记事本一样了!此后,utf-8-tool.exe死活也转不成BOM头为EF BB BF一汉字3字节的UTF-8了!真是吊诡!!!

二、utf-8-tool.exe汉化去校验的问题
经查utf-8-tool.exe无壳,显示由Microsoft Visual C++ 6.0 [Overlay]编译
004-1.JPG
由关键字定位到代码,仅修改一字符,将t改成T,软件就不能正常运行,出现
004.JPG
005.JPG
006.JPG

再由关键字定位到代码的3AE0处进而找到1350处,却不知如何去校验了……
007.JPG
008.JPG
009.JPG


感谢610100 朋友,在他的帮助下解决了第二个问题,

这个utf-8-tool.exe工具中即用了3字节表示一个汉字UTF-8编码,而有些地方又是2字节一汉字,有些乱。

011.JPG

010.JPG

免费评分

参与人数 3吾爱币 +8 热心值 +3 收起 理由
Lucifer_BW + 1 + 1 热心回复!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
hs_f + 1 谢谢@Thanks!

查看全部评分

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

紫蝶冰澜 发表于 2020-4-20 21:43
本帖最后由 紫蝶冰澜 于 2020-4-21 09:04 编辑

UTF-8是可变长的编码方式,从1到6字节不等,可以根据编码的高位标记1和占位0判断出具体读取多少个字节,把x提取出来就是UNICODE的编码

UNICODE和UTF-8转换对照表

Unicode UTF-8
0000 0000-0000 007F 0xxx xxxx
0000 0080-0000 07FF 110x xxxx 10xx xxxx
0000 0800-0000 FFFF 1110 xxxx 10xx xxxx 10xx xxxx
0001 0000-0010 FFFF 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx
0020 0000-03FF FFFF 1111 10xx 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx
0400 0000-7FFF FFFF 1111 110x 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx

1字节时,与ASCII兼容
2字节时,兼容ISO8859-1,支持西欧和希腊
3字节时,兼容GBK、BIG5
等等

//“汉字” UTF-8          11100110,10110001,10001001    11100101,10101101,10010111
//  提取x               ____0110,__110001,__001001    ____0101,__101101,__010111
// 重新整理一下      0110 1100 0100 1001    0101 1011 0101 0111
// 转16进制         6c,49,5b,57
// 加上BOM          fe,ff,6c,49,5b,57
//这就是“汉字”的UNICODE

转换为UNICODE标准后,建议用BOM来区分字节序,因为在不同的系统中,存在大端和小端(字节编码的正序逆序)
UTF-8 BOM:EF BB BF,“汉字”:EF BB BF, E6 B1 89, E5 AD 97
UTF-16 LE:FF FE,FF在左边,HEX的左边是高位,“汉字”:FF FE, 49 6C, 57 5B
UTF-16 BE:FE FF,FF在右边,HEX的右边是高位,“汉字”:FE FF, 6C 49, 5B 57

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
hybin + 1 + 1 用心讨论,共获提升!
Hmily + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

头像被屏蔽
tlf 发表于 2020-4-20 08:42
hs_f 发表于 2020-4-20 08:26
落叶知秋zdz 发表于 2020-4-20 08:36
很详细的讲解
头像被屏蔽
tlf 发表于 2020-4-20 08:56
提示: 作者被禁止或删除 内容自动屏蔽
wwusq 发表于 2020-4-20 08:57
这个是字符编码的问题吗
 楼主| yietlqwr 发表于 2020-4-20 09:05
tlf 发表于 2020-4-20 08:56
试了一下,用MS的笔记本另存为:ANSI,UNICDOE,UTF8 转来转去都正常。

表面现象。伪UTF-8,要看编码,不是说字符显示正常。
茕茕白兔. 发表于 2020-4-20 09:15
感谢指导
cc78947 发表于 2020-4-20 09:17
大佬怎么刨这么细的, 如何拥有此技能
Rx0 发表于 2020-4-20 09:34
还真没注意这个问题,原本还在纳闷,有些文本文档用Notepad3打开会是乱码,用Everedit就不会,用Everedit重新保存一次,再用Notepad3打开就正常了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-16 12:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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