[已解决]EXE文件末尾的办法。
本帖最后由 qq724174 于 2011-11-11 15:08 编辑需要用au3获取指定exe文件末尾的一个数值 进行替换后写入exe
看过pcbar发的文件自身crc32写入文件尾,但是只能追加写入 不知道怎么实现替换写入$f=FileOpenDialog("EXE文件CRC32校验码插入程序",@ScriptDir,'程序文件(*.exe)')
If Not FileExists($f) Then
MsgBox(64,"错误!","文件不存在。",10)
Exit
EndIf
$file=FileOpen($f,16)
$fs=FileRead($file)
MsgBox(0,0,$file)
;MsgBox(0,0,BinaryToString($fs,5))
FileClose($file)
FileWrite($f&'.bak',$fs)
MsgBox(0,'之前文件长度',BinaryLen($fs))
$crc='123456'
$file=FileOpen($f,17)
FileWrite($file, Binary($crc))
FileClose($file)
$file=FileOpen($f,16)
$fs=FileRead($file)
FileClose($file)
MsgBox(0,'之后文件长度',BinaryLen($fs))
;FileSetPos这样的效果是会在exe的末尾追加123456进去 但是没办法把原有的替换
比如原exe文件末尾有个abcd1234 我需要把这个1234替换成5678 请各位大侠帮帮忙
这里的abcd是固定的 1234可能是2-6位数字 自己顶一下,各位好心人知道的请帮下忙。 本帖最后由 xms77 于 2011-11-10 17:01 编辑
可执行文件修改比较困难啊,没有源代码,只能以二进制模式代开,二进制文件转码的话,不知道文本是哪些二进制代码啊?貌似比做外挂还难!等待楼下高人出现! 哎、蛋疼的事 楼主你到底是为什么要改啊,我以前就搞过改软件版本。 FileOpen、FileGetSize、FileSetPos、FileWrite,这几个函数足够了。 本帖最后由 qq724174 于 2011-11-11 05:07 编辑
回复 6# pusofalse $sss = _tihuan("test1.exe", "abcd1234", "abcd5780.", "asc")
MsgBox(0, "替换成功次数", $sss)
Func _tihuan($file, $a, $b, $num = 0)
$files = FileOpen($file, 16)
$fileshex = FileRead($files)
FileClose($files)
$isin = StringInStr($fileshex, _txt2hex($a))
If $isin = 0 Then
Return 0 ;$a不存在
Else
$ddds = StringReplace($fileshex, _txt2hex($a), _txt2hex($b), $num)
If @extended > 0 Then
$re = @extended
$files = FileOpen($file, 18)
If FileWrite($files, $ddds) = 0 Then Return -1
Return $re
Else
Return -2
EndIf
EndIf
EndFunc ;==>_tihuan
Func _txt2hex($sString) ;thanks 丨悠闲丨
Dim $BinaryString
For $i = 1 To StringLen($sString)
$STR = StringMid($sString, $i, 1)
If String(Binary($STR)) > 0xFF Then Return Binary($sString)
If String(Binary($STR)) < 0x80 Then
$BinaryString &= String(Binary($STR))
Else
$BinaryString &= String(Binary($STR & $STR))
EndIf
Next
$BinaryString = StringReplace($BinaryString, '0x', '')
Return $BinaryString
EndFunc ;==>_txt2hex找遍论坛所有关于hex的例子,以上代码可以成功替换
但是郁闷的事"abcd1234"要是固定的值,不知道怎么在这里面使用正则找出abcd后面的2-6位纯数字。$iId = StringRegExp($test, '(?i)abcd(\d+)', 1)这样在 $test是普通文本的时候可以正则提取到1234但是hex的话 实在无解了,老大指点一下。 谢谢pusofalse和ceoguang的帮助以及my788521的原始贴
页:
[1]