Пример замены строки "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
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
|