找回密码
 加入
搜索
查看: 2065|回复: 8

关于hex的转化的一个具体问题

[复制链接]
发表于 2009-6-25 23:42:25 | 显示全部楼层 |阅读模式
本帖最后由 autoit3CN 于 2009-6-30 16:01 编辑

Dim $bData = "8C0234000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE000001000000010000000000000003000000000000000000000000000400000000000000000000000000000000000000" _
                                & "EA010000010053007400720069006E006700460069006C00650049006E0066006F000000C601000001003000340030003900300034006200300000007E003300010043006F006D006D0065006E0074007300000041002000360" _
                                & "0340062006900740020006100750074006F00690074002000650078006500630075007400610062006C0065002000770069007400680020006D006F0064006900660069006500640020007200650073006F0075007200630065" _
                                & "0073002E000000000066001F000100460069006C0065004400650073006300720069007000740069006F006E0000000000410020006E0069006300650020006C006900740074006C00650020006400650073006300720069007" _
                                & "000740069006F006E002000680065007200650000000000300008000100460069006C006500560065007200730069006F006E000000000031002E0030002E0030002E00300000009600390001004C006500670061006C004300" _
                                & "6F007000790072006900670068007400000043006F00700079006C0065006600740020003200300030003800200054006800650020004B0061006E0064006900650020004D0061006E00200041006C006C00200052006900670" _
                                & "0680074007300200041007200650020004E006F00740020005200650073006500720076006500640000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E" _
                                & "0073006C006100740069006F006E00000000000904B004"


谁帮帮忙将以上hex解读一下,请尽量先自己用函数测试
_HexToString貌似不行
发表于 2009-6-26 07:33:55 | 显示全部楼层
Dim $bData = "8C0234000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE000001000000010000000000000003000000000000000000000000000400000000000000000000000000000000000000" _
                                & "EA010000010053007400720069006E006700460069006C00650049006E0066006F000000C601000001003000340030003900300034006200300000007E003300010043006F006D006D0065006E0074007300000041002000360" _
                                & "0340062006900740020006100750074006F00690074002000650078006500630075007400610062006C0065002000770069007400680020006D006F0064006900660069006500640020007200650073006F0075007200630065" _
                                & "0073002E000000000066001F000100460069006C0065004400650073006300720069007000740069006F006E0000000000410020006E0069006300650020006C006900740074006C00650020006400650073006300720069007" _ 
                                & "000740069006F006E002000680065007200650000000000300008000100460069006C006500560065007200730069006F006E000000000031002E0030002E0030002E00300000009600390001004C006500670061006C004300" _
                                & "6F007000790072006900670068007400000043006F00700079006C0065006600740020003200300030003800200054006800650020004B0061006E0064006900650020004D0061006E00200041006C006C00200052006900670" _
                                & "0680074007300200041007200650020004E006F00740020005200650073006500720076006500640000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E" _
                                & "0073006C006100740069006F006E00000000000904B004"


$tBinary = DllStructCreate("byte[" & BinaryLen("0x" & $bData) & "]")
$pBinary = DllStructGetPtr($tBinary)
$tWchar = DllStructCreate("wchar[" & BinaryLen("0x" & $bData) / 2 & "]", $pBinary)
DllStructSetData($tBinary, 1, "0x"& $bData)

Dim $sString, $sChar
For $i = 1 to BinaryLen("0x" & $bData) / 2
        $sChar = DllStructGetData($tWchar, 1, $i)
        If $sChar <> Chr(0) Then
                $sString &= $sChar
        Else
                $sString &= @LF
        EndIf
Next

$tWchar = 0
$tBinary = 0
$sString  = StringRegExpReplace($sString, @LF & "+", @LF)
Msgbox(0, '', $sString)
没啥有用的信息,结果自己看吧。

评分

参与人数 1金钱 +5 收起 理由
autoit3CN + 5 感激万分!!!

查看全部评分

 楼主| 发表于 2009-6-27 16:00:48 | 显示全部楼层
2# pusofalse
非常感激你的出手相助,这个hex转化问题对于我来说是非常有意义的
我正在解决一个问题,其中这个hex转化就是关键中的关键
所以希望能再帮助我深入探讨下以下这个问题:
首先,根据你的方法代码读出的数据如下:

问题已经解决一大半了
现在我恳请再帮我解惑:如何将截图所得的结果反译为hex代码?
就是假如我想通过以下字段如何得到对应的hex一楼的hex代码呢?
?4
VS_VERSION_INFO
??
 
 
 【这部分字符复制无效了,请注意!】
 
?
 StringFileInfo
?
 040904b0
~3 Comments
A 64bit autoit executable with modified resources.
f FileDescription
A nice little description here
0 FileVersion
1.0.0.0
?9 LegalCopyright
Copyleft 2008 The Kandie Man All Rights Are Not Reserved
D
 VarFileInfo
$ 
Translation
??
本人对hex这个转化问题比较陌生,非常渴望这个问题能得到解决
从而学习更多关于这一方面的技术
万分感激...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2009-6-27 16:05:26 | 显示全部楼层
如果其他朋友也能解决这个问题的
恳请出手相助
在下感激万分!!
 楼主| 发表于 2009-6-27 16:15:42 | 显示全部楼层
; Binary ANSI to String 
$buffer = StringToBinary("A nice little description here")
MsgBox(4096, "String() representation" , $buffer)
$buffer = BinaryToString($buffer)
MsgBox(4096, "BinaryToString() ANSI representation" , $buffer)

; Binary UTF16-LE to String 
$buffer = StringToBinary("A nice little description here", 2)
MsgBox(4096, "String() representation" , $buffer)
$buffer = BinaryToString($buffer, 2)
MsgBox(4096, "BinaryToString() UTF16-LE representation" , $buffer)

; Binary UTF16-BE to String 
$buffer = StringToBinary("A nice little description here", 3)
MsgBox(4096, "String() representation" , $buffer)
$buffer = BinaryToString($buffer, 3)
MsgBox(4096, "BinaryToString() UTF16-BE representation" , $buffer)

; Binary UTF8 to String 
$buffer = StringToBinary("A nice little description here", 4)
MsgBox(4096, "String() representation" , $buffer)
$buffer = BinaryToString($buffer, 4)
MsgBox(4096, "BinaryToString() UTF8 representation" , $buffer)
找到这段,测试过但是都无法成功还原以上的代码
 楼主| 发表于 2009-6-27 16:27:38 | 显示全部楼层
_StringToHex转换的代码货不对板啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2009-6-27 16:52:06 | 显示全部楼层
本帖最后由 autoit3CN 于 2009-6-27 17:18 编辑

再认真对比增加了一下2楼的代码
#include <string.au3>
#AutoIt3Wrapper_UseAnsi=y
Dim $String
Dim $bData = "8C0234000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE000001000000010000000000000003000000000000000000000000000400000000000000000000000000000000000000" _
                                & "EA010000010053007400720069006E006700460069006C00650049006E0066006F000000C601000001003000340030003900300034006200300000007E003300010043006F006D006D0065006E0074007300000041002000360" _
                                & "0340062006900740020006100750074006F00690074002000650078006500630075007400610062006C0065002000770069007400680020006D006F0064006900660069006500640020007200650073006F0075007200630065" _
                                & "0073002E000000000066001F000100460069006C0065004400650073006300720069007000740069006F006E0000000000410020006E0069006300650020006C006900740074006C00650020006400650073006300720069007" _ 
                                & "000740069006F006E002000680065007200650000000000300008000100460069006C006500560065007200730069006F006E000000000031002E0030002E0030002E00300000009600390001004C006500670061006C004300" _
                                & "6F007000790072006900670068007400000043006F00700079006C0065006600740020003200300030003800200054006800650020004B0061006E0064006900650020004D0061006E00200041006C006C00200052006900670" _
                                & "0680074007300200041007200650020004E006F00740020005200650073006500720076006500640000000000440000000100560061007200460069006C00650049006E0066006F00000000002400040000005400720061006E" _
                                & "0073006C006100740069006F006E00000000000904B004"


$tBinary = DllStructCreate("byte[" & BinaryLen("0x" & $bData) & "]")
$pBinary = DllStructGetPtr($tBinary)
$tWchar = DllStructCreate("wchar[" & BinaryLen("0x" & $bData) / 2 & "]", $pBinary)
DllStructSetData($tBinary, 1, "0x"& $bData)

Dim $sString, $sChar
For $i = 1 to BinaryLen("0x" & $bData) / 2
        $sChar = DllStructGetData($tWchar, 1, $i)
        If $sChar <> Chr(0) Then
                $sString &= $sChar
        Else
                $sString &= @LF
        EndIf
Next

$tWchar = 0
$tBinary = 0
$sString  = StringRegExpReplace($sString, @LF & "+", @LF)
Msgbox(0, '', $sString)

$Hex = _StringToHex($sString)
MsgBox(0, "Hex", "Original String: " & $String & @LF & " Hex: " & $Hex)
发现_StringToHex得到的hex都是少了00的,比如
string为VS_VERSION_INFO
hex是【得到的结果貌似16进制的】
56535F56455253494F4E5F494E464F
对应的我想要的就是
560053005F00560045005200530049004F004E005F0049004E0046004F00
貌似已经找到规律了
只是究竟是想得到我要的结果是什么进制转什么进制呢?该怎么写脚本呢?试了一下这里提供的转法,得到的都是空白字符
http://www.autoitx.com/forum.php?mod=viewthread&tid=5747
发表于 2009-6-27 19:13:36 | 显示全部楼层
Re autoit3CN:
Dim $bData = 

"8C0234000000560053005F00560045005200530049004F004E005F0049004E0046004F0000000000BD04EFFE000001000000010000000000000003000000000

000000000000000000400000000000000000000000000000000000000" _
                                & 

"EA010000010053007400720069006E006700460069006C00650049006E0066006F000000C601000001003000340030003900300034006200300000007E0033000

10043006F006D006D0065006E0074007300000041002000360" _
                                & 

"0340062006900740020006100750074006F00690074002000650078006500630075007400610062006C0065002000770069007400680020006D006F006400690

0660069006500640020007200650073006F0075007200630065" _
                                & 

"0073002E000000000066001F000100460069006C0065004400650073006300720069007000740069006F006E0000000000410020006E0069006300650020006

C006900740074006C00650020006400650073006300720069007" _ 
                                & 

"000740069006F006E002000680065007200650000000000300008000100460069006C006500560065007200730069006F006E000000000031002E0030002E003

0002E00300000009600390001004C006500670061006C004300" _
                                & 

"6F007000790072006900670068007400000043006F00700079006C0065006600740020003200300030003800200054006800650020004B0061006E0064006900

650020004D0061006E00200041006C006C00200052006900670" _
                                & 

"0680074007300200041007200650020004E006F00740020005200650073006500720076006500640000000000440000000100560061007200460069006C006500

49006E0066006F00000000002400040000005400720061006E" _
                                & "0073006C006100740069006F006E00000000000904B004"


$tBinary = DllStructCreate("byte[" & BinaryLen("0x" & $bData) & "]")
$pBinary = DllStructGetPtr($tBinary)
$tWchar = DllStructCreate("wchar[" & BinaryLen("0x" & $bData) / 2 & "]", $pBinary)
DllStructSetData($tBinary, 1, "0x"& $bData)

Dim $sString, $sChar
For $i = 1 to BinaryLen("0x" & $bData) / 2
        $sChar = DllStructGetData($tWchar, 1, $i)
        If $sChar <> Chr(0) Then
                $sString &= $sChar
        Else
                $sString &= @LF
        EndIf
Next

$tWchar = 0
$tBinary = 0
$sString  = StringRegExpReplace($sString, @LF & "+", @LF)
Msgbox(0, '', $sString)

; 还原, $sString中的NULL字符chr(0)已经被转化为换行符chr(0x0a) (@LF), 所以原16进制数据中的0000或被转换为000a.


$tWchar = DllStructCreate("wchar[" & StringLen($sString) * 2 & "]")
$pWchar = DllStructGetPtr($tWchar)
$tBinary = DllStructCreate("byte[" & StringLen($sString) * 2 & "]", $pWchar)
DllStructSetData($tWchar, 1, $sString)
Msgbox(0, '', DllStructGetData($tBinary, 1))
$tWchar = 0
$tBinary = 0

评分

参与人数 1金钱 +5 收起 理由
autoit3CN + 5 谢谢帮助!!!

查看全部评分

 楼主| 发表于 2009-6-30 16:00:48 | 显示全部楼层
pusofalse 的解答是正确的,只是我发现这个思路对于我想真正解决的问题还是没有帮助
不管如何,谢谢你了!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-13 15:28 , Processed in 0.103275 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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