关于二进制(16)文件读写的操作
在论坛找了一下关于二进制(16)文件读写的帖子,没有多少,有的帖子写的是调用自定义函数。我另想了一个办法。请看代码
先用普通打开文件的方式,读入数据然后写入数据到另一文件
$TESTFILE="C:\TEMP"
$TESTFILE1="C:\TEMP1"
$FILE=FILEOPEN($TESTFILE,0)
$READDATA=FileRead ($FILE)
$FILE1=FILEOPEN($TESTFILE1,2)
FileWrite ($TESTFILE1,$READDATA)
FileClose ($TESTFILE1)
FileClose ($TESTFILE)
如果是正常的文本文件没有问题,但是如果是其它类型就无法正常写入,如果是采用二进制读写就ok了。
请看代码:
$TESTFILE="C:\TEMP"
$TESTFILE1="C:\TEMP1"
$FILE=FILEOPEN($TESTFILE,16)
$READDATA=FileRead ($FILE)
$FILE1=FILEOPEN($TESTFILE1,18)
FileWrite ($TESTFILE1,$READDATA)
FileClose ($TESTFILE1)
FileClose ($TESTFILE)
这仅仅只是能完整读写,但是往往会进行其它操作,比如,查找,替换,截取
如果是用字符串函数,会出现错误
StringInStr检查某个字符串是否含有指定的子字符串.
StringMid 取某个字符串的部分字符.
StringLen返回指定字符串的字符总数.
.......
等等,都会不正确。
如果就使用标准函数,不用自定义的函数,那么应该怎么做呢
应该使用以下的函数
BinaryLen返回一个二进制变量的所用字节数.
BinaryMid 取出二进制变量里面X字节的内容.
BinaryToString转换一个二进制变量为一个字符串
StringToBinary 转换字符串为二进制数据
这样就可以正常操作了。
有了这些,你就可以写个二进制操作的代码了,如果大家想参考我的代码,我想以一个金币价格来发布(没钱用,只能想此招) 至今没有处理过二进制文件,学习了解一下可能下次用的到。二进制文件如果用文本编辑软件打开是不是乱码啊? 下面是我自己用的东西 替换自身exe的16进制代码生成新文件$ddd = FileOpen(@AutoItExe, 16)
$ddds = FileRead($ddd)
$ddds2 = StringInStr($ddds, "4175746F4974")
If $ddds2 > 0 Then
TrayTip("生成新文件中....", "生成完毕后将自动删除源文件!", 10)
$rans = Random(1200, 9999, 1) & Random(1200, 9999, 1) & Random(1200, 9999, 1)
$ddds = StringReplace($ddds, "4175746F4974", $rans)
$hong = @extended
$rans = Random(10, 99, 1) & "00" & Random(10, 99, 1) & "00" & Random(10, 99, 1) & "00" & Random(10, 99, 1) & "00" & Random(10, 99, 1) & "00" & Random(10, 99, 1) & "00"
$ddds = StringReplace($ddds, "4100750074006F0049007400", $rans)
$hong = $hong + @extended
$dddsaa = @ScriptDir & "\new" & @MON & @MDAY & @MIN & ".exe"
$xier = FileOpen($dddsaa, 18)
FileWrite($xier, $ddds)
FileClose($xier)
$JIAKES = ""
$suijiya = Random(6, 9, 1)
$dos = "upx.exe -" & $suijiya & " " & $dddsaa
_RunDOS($dos)
$JIAKES = "已自动加壳"
$sancu = MsgBox(4, "", "生成成功! " & $JIAKES & " 请运行新文件 " & $dddsaa & @CR & "是否删除旧文件?", 5)
If $sancu = 6 Or $sancu = -1 Then
Run(@ComSpec & ' /c ping 127.0.0.1 -n 3&del /q "' & @ScriptFullPath & '"', @ScriptDir, @SW_HIDE)
EndIf
Exit
EndIf
页:
[1]