|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Редактировать hex значения в файле |
|
|
VBA - Редактировать hex значения в файле
|
Старожил Сообщения: 329 |
Приветствую. Возможно ли сделать так как показано на скринах ниже. Одна фотку до, другая после.
Тк offset разные, то нужно реализовать поиск и замену значений. Естественно, файл бинарный. А то надоело это делать winhex'ом руками. Вес файла около 300кб. Ну и естественно, вес файла и offset должны остаться теми же, что и до редактирования. |
|
Отправлено: 19:46, 19-05-2019 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать blackeangel, можно. Выложите образец файла в архиве на DropMeFiles, напишите, что мы ищем, и на что меняем (и то, и другое — в Hex).
|
Отправлено: 22:39, 19-05-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Давайте откроем в winhex любую и найдём в текстовой части "This program ...." и заменим эти 16 значения на "20 00 20 00 20 00 20 00 20 00 ..." то есть на пробелы. Мне по большей части надо понять суть как это делать, как это реализовывать. Я начал читать вот это https://www.experts-exchange.com/que...X-to-File.html , но тк у меня проблемы с иностранным языками, то почти ничего не понял. |
|
Отправлено: 22:50, 19-05-2019 | #3 |
Ветеран Сообщения: 20133
|
Профиль | Отправить PM | Цитировать blackeangel, патч сделать не пробовали?
|
------- Отправлено: 23:28, 19-05-2019 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата blackeangel:
Скрытый текст
Option Explicit Sub Sample() Const adTypeBinary = 1 Const adSaveCreateOverWrite = 2 Dim strFindString As String Dim strReplaceString As String Dim arrHex() As String Dim arrFind() As Byte Dim arrReplace() As Byte Dim i As Long, j As Long Dim arrContent() As Byte Dim bFound As Boolean Dim lngOffset As Long ' «This program cannot be run in DOS mode.» strFindString = "54 68 69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F 74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20 6D 6F 64 65 2E" strReplaceString = "FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF" ' Convert hex values from find string to Byte Array arrHex = Split(strFindString) ReDim arrFind(UBound(arrHex)) For i = 0 To UBound(arrHex) arrFind(i) = CByte("&H" & arrHex(i)) Next i ' Convert hex values from replace string to Byte Array arrHex = Split(strReplaceString) ReDim arrReplace(UBound(arrHex)) For i = 0 To UBound(arrHex) arrReplace(i) = CByte("&H" & arrHex(i)) Next i ' Read content from file to Byte Array With CreateObject("ADODB.Stream") .Type = adTypeBinary .Open .LoadFromFile "C:\Мои проекты\0262\accessibilitycpl.dll" arrContent = .Read() ' Search find Byte Array in content of file For i = 0 To UBound(arrContent) bFound = True For j = 0 To UBound(arrFind) If arrContent(i + j) <> arrFind(j) Then bFound = False Exit For End If Next j If bFound Then lngOffset = i Exit For End If Next i ' If found — replace part by replace Byte Array If bFound Then .Position = lngOffset .Write arrReplace .SaveToFile "C:\Мои проекты\0262\accessibilitycpl3.dll", adSaveCreateOverWrite Else MsgBox "Can't find source string", vbExclamation + vbOKOnly, "Not found" End If End With End Sub ![]() |
||
Отправлено: 00:12, 20-05-2019 | #5 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Цитата yurfed:
Iska, что то как то длинно. На Питоне писал, 14 строк(https://dropmefiles.com/Us2l8). Всё равно спасибо, буду пробовать. |
|
Последний раз редактировалось blackeangel, 20-05-2019 в 13:57. Отправлено: 07:38, 20-05-2019 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата blackeangel:
blackeangel, когда вставляете ссылки, не полагайтесь на движок, лучше делайте вручную. |
|
Отправлено: 13:51, 20-05-2019 | #7 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
||
Отправлено: 13:58, 20-05-2019 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать blackeangel, в смысле? Не можете скопировать четырнадцать строк текста?!
|
Отправлено: 14:46, 20-05-2019 | #9 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
import os, sys fopen='C:\\Program Files\\,.......\\KDScanViewerDll.dll' wfind=b'\x1e\x04\x31...…' wrepl=b'\x20\x00\x20\x00.....' if os.path.exists(fopen): with open(fopen, 'rb') as file: data=file.read() data=bytearray(data) data=data.replace(wfind, wrepl) with open(fopen, 'wb)as file: file.write(data) else: print('File "KDScanViewerDll.dll" not found!') |
|||
Отправлено: 15:01, 20-05-2019 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] замена значения в xml-файле | firstarey | Скриптовые языки администрирования Windows | 20 | 13-11-2017 11:24 | |
VBS/WSH/JS - Проверка существования значения в файле | Nic_odin | Программирование и базы данных | 4 | 23-03-2015 00:21 | |
Разное - [решено] Hex значения | O L E G | Программирование и базы данных | 8 | 03-12-2014 13:42 | |
Любой язык - копирование значения ключа реестра в .reg файле | paerpo | Скриптовые языки администрирования Windows | 12 | 20-02-2013 19:10 | |
работа с файлами в HEX формате, поиск и замена по 16ричному адресу значения в файле. | andr_mozg | AutoIt | 3 | 10-03-2012 10:20 |
|