找回密码
 加入
搜索
查看: 3164|回复: 2

[系统综合] 关于二进制(16)文件读写的操作

[复制链接]
发表于 2011-9-20 09:59:11 | 显示全部楼层 |阅读模式
在论坛找了一下关于二进制(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 转换字符串为二进制数据
这样就可以正常操作了。
有了这些,你就可以写个二进制操作的代码了,如果大家想参考我的代码,我想以一个金币价格来发布(没钱用,只能想此招)
发表于 2011-9-20 12:40:22 | 显示全部楼层
至今没有处理过二进制文件,学习了解一下可能下次用的到。二进制文件如果用文本编辑软件打开是不是乱码啊?
发表于 2011-9-20 17:52:58 | 显示全部楼层
下面是我自己用的东西 替换自身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
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 10:11 , Processed in 0.155279 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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