Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Редактировать hex значения в файле

Ответить
Настройки темы
VBA - Редактировать hex значения в файле

Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


Изменения
Автор: blackeangel
Дата: 19-05-2019
Изображения
Тип файла: jpg IMG_20190518_082647.jpg
(235.7 Kb, 7 просмотров)
Тип файла: jpg IMG_20190518_082820.jpg
(215.2 Kb, 5 просмотров)
Приветствую. Возможно ли сделать так как показано на скринах ниже. Одна фотку до, другая после.
Тк offset разные, то нужно реализовать поиск и замену значений.
Естественно, файл бинарный.
А то надоело это делать winhex'ом руками.
Вес файла около 300кб.
Ну и естественно, вес файла и offset должны остаться теми же, что и до редактирования.

Отправлено: 19:46, 19-05-2019

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


blackeangel, можно. Выложите образец файла в архиве на DropMeFiles, напишите, что мы ищем, и на что меняем (и то, и другое — в Hex).

Отправлено: 22:39, 19-05-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата Iska:
blackeangel, можно. Выложите образец файла в архиве на DropMeFiles, напишите, что мы ищем, и на что меняем (и то, и другое — в Hex).
К сожалению, файл выложить не могу из-за его физического на текущий момент отсутствия. Давайте на примере любой .dll винды попробуем.
Давайте откроем в 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


Аватара для yurfed

Ветеран


Сообщения: 20041
Благодарности: 3121

Профиль | Отправить PM | Цитировать


blackeangel, патч сделать не пробовали?

-------
Хочу ли я - Могу ли я - Говно ли я - Магнолия

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:28, 19-05-2019 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата blackeangel:
Давайте на примере любой .dll винды попробуем.
Давайте откроем в winhex любую и найдём в текстовой части "This program ...." и заменим эти 16 значения на "20 00 20 00 20 00 20 00 20 00 ..." то есть на пробелы.
Мне по большей части надо понять суть как это делать, как это реализовывать. »
Пробуйте:
Скрытый текст
Код: Выделить весь код
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


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата yurfed:
blackeangel, патч сделать не пробовали?
Патч обычно делается по фиксированному offset, а тут он плавающий.

Iska, что то как то длинно. На Питоне писал, 14 строк(https://dropmefiles.com/Us2l8). Всё равно спасибо, буду пробовать.

Последний раз редактировалось blackeangel, 20-05-2019 в 13:57.


Отправлено: 07:38, 20-05-2019 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата blackeangel:
На Питоне писал, 14 строк »
Вы не могли бы их привести здесь?

blackeangel, когда вставляете ссылки, не полагайтесь на движок, лучше делайте вручную.

Отправлено: 13:51, 20-05-2019 | #7


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата Iska:
Цитата blackeangel:
На Питоне писал, 14 строк »
Вы не могли бы их привести здесь?

blackeangel, когда вставляете ссылки, не полагайтесь на движок, лучше делайте вручную.
К сожалению я даже скопировать не могу, только сфоткать. А фотку я выложил постом выше (ссылку поправил)

Отправлено: 13:58, 20-05-2019 | #8


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


blackeangel, в смысле? Не можете скопировать четырнадцать строк текста?!

Отправлено: 14:46, 20-05-2019 | #9


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата Iska:
blackeangel, в смысле? Не можете скопировать четырнадцать строк текста?!
да, не могу. Тк код находится на ПК, на котором нет usb разъмов и выхода в интернет. Могу только переписать его сюда, но не весь, тк hex значения больно длинные)))

Цитата Iska:
Цитата blackeangel:
На Питоне писал, 14 строк »
Вы не могли бы их привести здесь?

blackeangel, когда вставляете ссылки, не полагайтесь на движок, лучше делайте вручную.
Код: Выделить весь код
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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Редактировать hex значения в файле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход