找回密码
 加入
搜索
查看: 6988|回复: 7

[系统综合] [已解决]EXE文件末尾的办法。

  [复制链接]
发表于 2011-11-10 14:56:44 | 显示全部楼层 |阅读模式
本帖最后由 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位数字

评分

参与人数 1威望 +5 金钱 +60 贡献 +6 收起 理由
ceoguang + 5 + 60 + 6 感谢修改分类

查看全部评分

 楼主| 发表于 2011-11-10 15:45:41 | 显示全部楼层
自己顶一下,各位好心人知道的请帮下忙。
发表于 2011-11-10 16:58:54 | 显示全部楼层
本帖最后由 xms77 于 2011-11-10 17:01 编辑

可执行文件修改比较困难啊,没有源代码,只能以二进制模式代开,二进制文件转码的话,不知道文本是哪些二进制代码啊?貌似比做外挂还难!等待楼下高人出现!
 楼主| 发表于 2011-11-10 18:05:00 | 显示全部楼层
哎、蛋疼的事
发表于 2011-11-10 21:03:21 | 显示全部楼层
楼主你到底是为什么要改啊,我以前就搞过改软件版本。
发表于 2011-11-10 22:50:14 | 显示全部楼层
FileOpen、FileGetSize、FileSetPos、FileWrite,这几个函数足够了。
 楼主| 发表于 2011-11-11 01:19:28 | 显示全部楼层
本帖最后由 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的话 实在无解了,老大指点一下。
 楼主| 发表于 2011-11-11 15:11:02 | 显示全部楼层
谢谢pusofalse和ceoguang的帮助以及my788521的原始贴
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-1 09:32 , Processed in 0.093242 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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