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

Показать сообщение отдельно

Ветеран


Сообщения: 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