【已解决】关于在可执行文件中查找数据
本帖最后由 chishingchan 于 2019-9-18 07:34 编辑下面这段代码可以完成工作,但是效率很差!
我的构思:
先试查找 $Hex 的一个字节,找到一个字节就查找添加到两个字节,直到找到12个字节的位于文件中的地址。
请帮忙完善一下代码,谢谢!
Local $InstallDir, $File, $FileSize, $Read, $Position
Local $Hex = "0x534E415345524E554D008F0A"
$File = @ScriptDir & "\snapshot.exe"
If FileExists($File) Then
$FileSize = FileGetSize($File)
$ado_stream = ObjCreate("ADODB.Stream")
$ado_stream.Type = 1
$ado_stream.open
$ado_stream.LoadFromFile($File)
For $i =0 To $FileSize - 1 Step 1
$ado_stream.position = $i
$Read = $ado_stream.Read((StringLen($Hex) - 2) / 2)
If $Read = $Hex Then
$Position = $i
ExitLoop
EndIf
Next
$ado_stream.Close
MsgBox(0,"找到的地址及数据", $Position & @CRLF & $Hex)
EndIf
snapshot.exe
StringInstr 不行?
附件是损坏的 afan 发表于 2019-9-17 19:38
StringInstr 不行?
附件是损坏的
其实随便换个文件也是可以的,关键是想效率快点,有想法但是编写不出来。 那就是我下的不好,只下了4遍 afan 发表于 2019-9-17 19:58
那就是我下的不好,只下了4遍
会不会是系统的防毒软件在作怪? chishingchan 发表于 2019-9-17 20:22
会不会是系统的防毒软件在作怪?
从没遇到过~你确定能下载解压? afan 发表于 2019-9-17 19:58
那就是我下的不好,只下了4遍
我的那个示例是每1个位置就要读取12字节,所以感觉效率存在问题!
一般人所想到的是找到对应第1个字节后再看看第2个字节是否相同,如果所有12个字节都相同就得出地址并结束了。如果前某几个字节不同就进入下一个位置再检测。 本帖最后由 afan 于 2019-9-17 21:01 编辑
不要用垃圾点评功能啦,没办法引用回复
没那么高版本的WinRAR,这东西完全没必要高版本……
一个文件直接传就是,压缩都不需要
之前问你 StringInstr 不行?
afan 发表于 2019-9-17 20:58
不要用垃圾点评功能啦,没办法引用回复
没那么高版本的WinRAR,这东西完全没必要高版本……
看顶楼的图,非纯文本。 chishingchan 发表于 2019-9-17 21:41
看顶楼的图,非纯文本。
二进制也是字符串。
费劲,不聊了 afan 发表于 2019-9-17 20:58
不要用垃圾点评功能啦,没办法引用回复
没那么高版本的WinRAR,这东西完全没必要高版本……
WinRAR 5.61 官方中文注册版
https://www.lanzous.com/i681x9c chishingchan 发表于 2019-9-17 21:44
WinRAR 5.61 官方中文注册版
https://www.lanzous.com/i681x9c
不需要这东西,非要压缩我就不下了。 本帖最后由 chishingchan 于 2019-9-17 21:55 编辑
afan 发表于 2019-9-17 21:45
不需要这东西,非要压缩我就不下了。
老大,已换了7z 的包,我下面再发一个给你。
这软件使用upx压缩后容量只有4百多K,我的IBMX40搜索到地址也花了15秒!
afan 发表于 2019-9-17 21:45
不需要这东西,非要压缩我就不下了。
老大,顶楼的附件已换了 偷懒的办法,既然已知在文件末尾,那就直接倒序循环呗,也是瞬间找到~
页:
[1]
2