Вверх ↑
Ответов: 703
Рейтинг: 148
#1: 2024-02-28 11:30:25 ЛС | профиль | цитата
Пример замены строки "This program must be run under Win32", которая находится по смещению 0x00000050 в exe-файле, на свою такой же длинны. Пропатченная программа продолжит работать без каких-либо проблем. Зачем это делать? Пусть каждый решает для себя сам.

Add(MainForm,2953706,84,224)
{
Width=212
Height=142
Point(onClose)
link(onCreate,13223982:doExecute,[])
}
Add(ODialog,13223982,140,238)
{
link(onExecute,1196495:doEvent1,[])
}
Add(FileStream,3596279,245,252)
{
link(onLoad,11044859:doConvert,[])
}
Add(StreamConvertor,11044859,287,252)
{
link(onResult,5537819:doReplace,[])
}
Add(StreamConvertor,11651509,392,252)
{
Mode=1
link(onResult,10578036:doCopyFromStream,[])
}
Add(Memory,14419925,294,140)
{
Default=String(This program must be run under Win32)
link(onData,12731330:doStrPad,[])
}
Add(StreamConvertor,3077251,245,140)
{
Mode=2
Point(Data)
link(onResult,14419925:doValue,[])
link(Data,2353895:Text,[])
}
Add(Hub,1196495,189,238)
{
OutCount=5
link(onEvent1,3077251:doConvert,[(214,244)(214,146)])
link(onEvent2,5041833:doReplace,[(221,251)(221,195)])
link(onEvent3,3596279:doOpen,[])
link(onEvent4,3596279:doClose,[])
link(onEvent5,12257923:doString,[(235,272)(235,314)])
}
Add(Replace,5537819,329,252)
{
link(onReplace,11651509:doConvert,[])
link(Sub_str,14419925:Value,[(342,183)(300,183)])
link(Dest,11115230:Value,[(349,180)(447,180)])
}
Add(Replace,5041833,392,189)
{
SubStr="."
DestStr="-Patched."
link(onReplace,9531005:doValue,[])
}
Add(FileStream,10578036,441,238)
{
Mode=1
AutoCopy=0
Point(doCopyFromStream)
link(FileName,7730295:Var2,[])
}
Add(Memory,9531005,441,189)
{
}
Add(Memory,11115230,441,140)
{
Default=String(This program must be run under Win32)
}
Add(StreamConvertor,4210091,392,140)
{
Mode=2
link(onResult,11115230:doValue,[])
}
Add(StrPad,12731330,343,140)
{
PadString=" "
PadLength=36
link(onStrPad,4210091:doConvert,[])
link(String,7604597:Text,[])
}
Add(VisualStrings,2353895,245,70)
{
Lines=#36:This program must be run under Win32|
Width=200
}
Add(VisualStrings,7604597,343,98)
{
Lines=#9:Hi hiasm!|
Width=88
}
Add(Message,6222676,413,308)
{
link(onMessage,2953706:doClose,[(463,314)(463,359)(74,359)(74,251)])
}
Add(FormatStr,12257923,364,308)
{
Mask="Файл - %1\r\nПропатчен! \r\nНовое имя файла - %2"
link(onFString,6222676:doMessage,[])
link(Str2,7730295:Var1,[(377,229)])
}
Add(GetDataEx,7730295,441,224)
{
link(Data,9531005:Value,[])
}

Просмотреть результаты можно любым HEX- просмотрщиком (Hex Viewer, Winhex и др.).
Без установки дополнительных программ содержимое бинарных файлов можно просмотреть с помощью:
1. Входящей в состав Windows (начиная с 7-ки) утилиты Certutil

Add(MainForm,8465996,91,56)
{
Point(onClose)
link(onCreate,13591510:doDelete,[])
}
Add(TempFileStream,13032543,308,56)
{
Extention=".bat"
link(onCreate,6551185:doExec,[])
}
Add(WinExec,6551185,350,56)
{
Mode=0
RunEvent=1
Point(onConsoleResult)
Point(doConsoleExec)
link(onExec,8465996:doClose,[(389,62)(389,48)(81,48)(81,83)])
}
Add(StreamConvertor,5465620,266,56)
{
Mode=7
Point(Data)
link(onResult,13032543:doCreate,[])
}
Add(FormatStr,16443353,224,56)
{
Mask="certutil -encodehex "%1" file.txt\r\nnotepad file.txt\r\nexit\r\n\r\n"
link(onFString,5465620:doConvert,[])
}
Add(ODialog,5706125,182,56)
{
link(onExecute,16443353:doString,[])
}
Add(FileTools,13591510,140,56)
{
FileName="file.txt"
link(onEnd,5706125:doExecute,[])
}

2. PowerShell (устанавливаем смещение и размер просматриваемого блока)

Add(MainForm,8465996,63,105)
{
Width=705
Height=361
Point(onClose)
link(onCreate,5706125:doExecute,[])
}
Add(WinExec,6551185,217,105)
{
FileName="powershell"
Mode=0
Point(onConsoleResult)
Point(doConsoleExec)
Point(onConsoleError)
link(onConsoleResult,14519708:doWork2,[])
link(onConsoleError,14519708:doWork3,[(270,132)])
}
Add(FormatStr,16443353,161,119)
{
DataCount=3
Mask="$offset = %1\r\n$chunkSize = %2\r\n$file = Get-Item '%3'\r\n$filestream = $file.OpenRead()\r\n[void]$filestream.Seek($offset, [System.IO.SeekOrigin]::Begin)\r\n$buffer = [byte[]]::new($chunkSize)\r\n$readCount = $filestream.Read($buffer, 0, $buffer.Length)\r\n$filestream.Dispose()\r\nif($readCount -lt $buffer.Length){\r\n $tmp = [byte[]]::new($readCount)\r\n [Array]::Copy($buffer, $tmp, $readCount)\r\n $buffer = $tmp\r\n}\r\n$buffer | Format-Hex"
link(onFString,6551185:doConsoleExec,[])
link(Str1,14057836:Text,[])
link(Str2,4658652:Text,[(174,96)(181,96)])
}
Add(ODialog,5706125,112,119)
{
link(onExecute,16443353:doString,[])
}
Add(Memo,9148442,336,119)
{
Width=689
Height=322
Align=5
Font=[Consolas,10,0,0,204]
ScrollBars=3
}
Add(Charset,9628050,287,119)
{
link(onCharset,9148442:doAdd,[])
}
Add(HubEx,14519708,266,119)
{
link(onEvent,9628050:doCharset,[])
}
Add(VisualStrings,14057836,161,42)
{
@Hint=#6:offset|
Lines=#10:0x00000000|
Width=74
AddHint(102,-20,41,13,@Hint)
}
Add(VisualStrings,4658652,175,70)
{
@Hint=#4:Size|
Lines=#10:0x00000100|
Width=74
AddHint(100,-15,35,13,@Hint)
}

3. Блокнота (только текстовые строки), просто открываем exe-файл в notepad.exe
ASCII text in exe.PNG
карма: 15

0