Posso usar este script para corrigir adequadamente um executável?

2

Eu tive uma ajuda com um script de substituição de texto recentemente e imaginei se ele poderia ser usado para fins de correção. Eu costumo usar HxD , e pensei que se é essencialmente um bloco de notas glorificado, que diferença existe entre editar um executável em um editor de texto e um editor hexadecimal? Decidi testar minha teoria e colocar o script no teste, enquanto pode substituir as strings especificadas, ele adiciona informações ao executável.

O que me impressiona é que, se for usado para substituir texto em um documento de texto, ele apenas substitui as strings e não adiciona bytes ao documento, a menos que a nova string seja maior que a anterior. Eu acredito que isso é porque o script é projetado para editar documentos de texto e modifica o cabeçalho por causa disso. Eu usei HxD para comparar o antes e o depois e com certeza o cabeçalho foi modificado. Aqui está o script que tenho atualmente:

@echo off
setlocal enableextensions disabledelayedexpansion

set search=OutDir=Old String
set replace=OutDir=New String
set textFile=Document.txt

:PowerShell
SET PSScript=%temp%\~tmpStrRplc.ps1
ECHO (Get-Content "%~dp0%textFile%").replace("%search%", "%replace%") ^| Set-Content "%~dp0%textFile%">"%PSScript%"

SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"
EXIT

(As strings que eu estarei substituindo são do mesmo tamanho, então o tamanho do executável não será alterado, e a corrupção de strings não está sendo usada.)

Gostaria de observar que sou novo no PowerShell, então ainda estou aprendendo como isso funciona. Eu observei a variável %~dp0%textFile% . Se eu estou interpretando essa variável corretamente, ele diz ao script do PowerShell para manipular o arquivo definido para ser modificado como um documento de texto. Indo com esta lógica (se estiver correta) , existe uma variável semelhante que irá ignorar o formato ou manipular o arquivo de entrada como um executável? Meu script é capaz de mudar o que eu defino, mas quebra o executável. É possível corrigir meu script?

    
por Mr. Mendelli 19.02.2018 / 13:33

1 resposta

1

Extraído de um exemplo que vi recentemente:

# Description: set your.exe resolution 0 to any x/y specified
# By knowning the offset for these values hard coded in your 
# executable
# - None of this is real world... example only


Set-Location(Split-Path $MyInvocation.MyCommand.Path)

# Prompt resolution

$resolutionX = Read-Host -Prompt "Width"
$resolutionY = Read-Host -Prompt "Height"
# Resolution Z is just hard coded as 32

# Patch bytes

$bytes  = [System.IO.File]::ReadAllBytes("your.exe")

# Arbitrary locations and values for example

$offsetX = 0x0039CA70
$offsetY = $offsetX + 4
$offsetZ = $offsetY + 4

$resolutionX = [BitConverter]::GetBytes([Int16]$resolutionX)
$resolutionY = [BitConverter]::GetBytes([Int16]$resolutionY)
$resolutionZ = [BitConverter]::GetBytes([Int16]32)

# SMASH your new values into the exe

$bytes[$offsetX] = $resolutionX[0]
$bytes[$offsetX+1] = $resolutionX[1]
$bytes[$offsetY] = $resolutionY[0]
$bytes[$offsetY+1] = $resolutionY[1]
$bytes[$offsetZ] = $resolutionZ[0]

# And save the result

[System.IO.File]::WriteAllBytes("your.exe", $bytes)



Read-Host -Prompt "Press Enter to exit"
    
por 23.03.2018 / 16:16