![]() |
eXeL@B —› Софт, инструменты —› WCRPatcher |
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 . >> |
Посл.ответ | Сообщение |
|
Создано: 24 декабря 2006 18:50 · Поправил: Модератор · Личное сообщение · #1 |
|
Создано: 14 января 2011 16:53 · Личное сообщение · #2 |
|
Создано: 14 января 2011 17:24 · Поправил: Kindly · Личное сообщение · #3 В моем понимании, когда байты патчаться не по смещениям, а по анализу двух массивов обеих файлов. В полученном результирующем файле, должны находиться только изменения, при внесении которых патченый файл должен по структуре совпадать с патченым оригиналом (который у крэкера). Именно так делает либа DeltaMax - сканирует два файла, получает патч-файл с изменениями, вносит изменения. Ради интереса возьми два непакованых файла, поправь ресурсы редактором ресурсов, сравни в DeltaMax и в Dup например. Либа сгенерирует только изменения в несколько байт или килобайт, а дуп будет шустрить по оффсетам, которые поменялись, и результирующий патч будет внушительных размеров. Думаю, ты разобрался, на всякий случай: Source: Оригинал Target: Патченый Diff file: результирующий патч-файл Encode: сравнить и сгенерировать патч-файл Decode: применить патч файл к указанному Source файлу, сохранив его как указанный Target файл. (это пример MFC60Client.exe) Ты имел ввиду что сам реализуешь такой патчинг? Я лишь хотел сэкономить твое время. Сам, так сам. ----- Array[Login..Logout] of Life ![]() |
|
Создано: 14 января 2011 18:39 · Личное сообщение · #4 |
|
Создано: 14 января 2011 22:29 · Поправил: Kindly · Личное сообщение · #5 По точно такому же принципу еще работает VPatch, который можно прикручивать к инсталяторам NSIS и Inno, но дело не в этом. Можешь глянуть: Самый интересный сорец - Patch Generator (C++), будет тут: Source\GenPat32\PatchGenerator.cpp Лучше самому конечно накодить, чем прикручивать тяжеленькую буржуйскую dll, да и еще требующей ActiveX регистрации. ----- Array[Login..Logout] of Life ![]() |
|
Создано: 15 января 2011 11:20 · Поправил: WatCheR · Личное сообщение · #6 |
|
Создано: 16 января 2011 12:27 · Личное сообщение · #7 WatCheR пишет: стукни мне в аську если можешь)) Нэт аска ![]() Есть предложения, а ты уже рассматривай: 1. Встроить в патчер резчик байтов по шаблону (иногда бывает полезно вырезать кусок байтов из бинарников, можно будет резать xml, да и ini там всякие и т.д.) 2. Сделать опцию удаления цифровой подписи после патчинга (исходники есть у Jupiter-а, если что) ----- Array[Login..Logout] of Life ![]() |
|
Создано: 16 января 2011 15:33 · Поправил: WatCheR · Личное сообщение · #8 Kindly пишет: Нэт аска жабер? Kindly пишет: Встроить в патчер резчик байтов по шаблону можно, только опиши чуть подробней как оно будет работает. вследствие потребления некоторых сорняковых растений моск думать наотрез не хочет ![]() Kindly пишет: Сделать опцию удаления цифровой подписи после патчинга Вот это я считаю дельным предложением, сразу появилась мысль сделать опцию установки правильной CRC в РЕ заголовке. надо? ![]() |
|
Создано: 16 января 2011 16:51 · Поправил: Kindly · Личное сообщение · #9 WatCheR пишет: можно, только опиши чуть подробней как оно будет работает. например, указываются байты до начала отрезаемых (шаблон start), и байты после окончания (шаблон end) - содержимое между ними отрезается, а сам файл естественно склеивается и сохраняется. Могут например в оверлеях хранится пошифрованые пароли к содержимому, которые можно срезать или там шелуха всякая типа цифровой подписи или ватермарков. К резчику можно было еще сделать и действие наоборот, т.е. добавлять байты между указанными шаблонами, это в основном служило бы для правки текстовых файлов. У дияблы почти такая фишка реализована (Text Patch), но предложеная будет более суровая и универсальная. WatCheR пишет: надо? да, некрасиво, когда ЦП остается недействительной после патча ![]() Как-то давно просил диаблу сделать process killer, чтобы перед патчингом требуемый процесс (или процессы) автоматом прекращались, но что-то он не захотел это делать. Не знаю, полезно это или нет, но зачем юзеру лишний раз лезть в диспетчер задач, если патчится сервис какой или прога в трее где-то? ----- Array[Login..Logout] of Life ![]() |
|
Создано: 16 января 2011 16:56 · Личное сообщение · #10 |
|
Создано: 16 января 2011 16:58 · Личное сообщение · #11 Чексумму можно обнулять, она нахрен не нужна. Сертификат резать - ума особо не нужно, просто глянуть в PE заголовок. А вот умники типа резать-добавлять - приведите алго ![]() ![]() ----- От многой мудрости много скорби, и умножающий знание умножает печаль ![]() |
|
Создано: 16 января 2011 17:00 · Поправил: Kindly · Личное сообщение · #12 ajax пишет: А вот умники типа резать-добавлять - приведите алго Можете в hiev попробовать, с сохранением работоспособности Никто не говорит, что это для PE. С ними конечно сложно, высчитывать размеры секций, адреса - этого никто не просит. Kindly пишет: 1. Встроить в патчер резчик байтов по шаблону (иногда бывает полезно вырезать кусок байтов из бинарников, можно будет резать xml, да и ini там всякие и т.д.) ressa пишет: в планах поддержка скинов есть? сначала функционал ![]() ----- Array[Login..Logout] of Life ![]() |
|
Создано: 16 января 2011 17:28 · Личное сообщение · #13 |
|
Создано: 16 января 2011 21:19 · Личное сообщение · #14 Kindly process killer я уже давно задумал... но вот почему-то все забывают про такую штуку как консоль. это конечно не bash но можно делать вполне универсальные патчи. тот же убица процессов, остановка-запуск служб, импорт файлов реестра (в месте с Add Files), запускать свои/чужие ехе и многое другое. не от балды же я это делал ![]() функционал в первую очередь, что тут говорить, еще движок не допилен. скины в приоритете в будушем. ![]() |
|
Создано: 21 января 2011 06:21 · Личное сообщение · #15 |
|
Создано: 21 января 2011 06:39 · Личное сообщение · #16 |
|
Создано: 21 января 2011 16:20 · Поправил: WatCheR · Личное сообщение · #17 Нарисовалось пару вопросов. Что еще в классический offset patch добавить? Что у нас есть: имя файла, check size, check crc, backup, save options и думаю добавим выпиливание сертификатов + имеем стандартный список изменяемых байт и смещений с возможностью сравнения файлов и ручное изменение/добавление/очистка данных. Переменные среды нам надо? И вообще в предидущей версии была фитча доставать пути к каталогу/файлу из реестра. В некоторых случаях это довольно таки удобно, юзеру не надо кидать патч в каталог. На сколько это актуально? И нужны ли свои переменные среды? ADD: Прошу отписатся всех у кого имеются замечания/дополнения/идеи т.к. лучше это организовать сейчас (на стадии проектирывания) чем потом допиливать и заниматся сексом с готовым. ![]() |
|
Создано: 21 января 2011 16:35 · Личное сообщение · #18 |
|
Создано: 21 января 2011 17:42 · Личное сообщение · #19 |
|
Создано: 21 января 2011 21:00 · Поправил: Kindly · Личное сообщение · #20 WatCheR пишет: Переменные среды нам надо? Вроде как патчинг может понадобиться в System, ApplicationData или CommonFiles и т.д. но это так редко на практике, может и надо, но в одну из последних очередей. Наверное, есть смысл сделать Silent Mode, в нем же опции: делать ли бэкап, удалять ли сертификат. На практике такие патчи могут вшиваться в инсталляторы софта или игр, например, для тихой русификации (это если ты реализуешь "патчинг массивов"). Я выложил небольшую прогу, в которой ты можешь посмотреть сам принцип работы "массивного патчинга" (на основе DeltaMAX). Хотелось бы что-то на подобие в твоем будущем патчере. (только в этой проге есть баг - некорректная обработка и создание нерабочего патча, если ключевые файлы указаны в подпапках, а не в основной папке) Еще есть небольшая просьба: Search&Replace байты сделай без разделителя -, а еще лучше сделай радио батоны с указанием типа бинарной строки: с пробелами (как из ольки) или слитные без пробелов (как из WinHEX) Еще есть такая прикольная опция в uPPP - User Input. Я такую фишку также когда-то реализовывал в своих кряко-установщиках. Принцип работы примерно такой: крэкер патчит имя в эбауте на ненужную строку, скажем, в пределах 20 символов. Эту строку он обнуляет, а пользователю выдает запрос - "Введите имя" (можно системное по дефолту вставлять в эдит). Патч считывает введенные данные и патчит обнуленную строку по указанному крекером оффсету. В результате в эбауте будет введенный в UserInput текст. (Дополнительно можно указать ASCII или Unicode формат вносимых данных). Но это в принципе понты. ----- Array[Login..Logout] of Life ![]() |
|
Создано: 21 января 2011 22:29 · Личное сообщение · #21 WatCheR пишет: Переменные среды нам надо? И вообще в предидущей версии была фитча доставать пути к каталогу/файлу из реестра. В некоторых случаях это довольно таки удобно, юзеру не надо кидать патч в каталог. На сколько это актуально? И нужны ли свои переменные среды? всё оставляй =) вот пару дней назад в кое веки зарелизил патч - именно с реестра путь к файлу и выдёргивал =) ----- Do Not Get Mad Get Money! ;) ![]() |
|
Создано: 22 января 2011 14:34 · Личное сообщение · #22 Kindly пишет: Вроде как патчинг может понадобиться в System, ApplicationData или CommonFiles и т.д. но это так редко на практике, может и надо, но в одну из последних очередей. Я про другое. Я про собственные переменные среды! Эти-то понятно, они поддерживаются с первых версий, тут ничего сложного... Тут же мы, допустим, в определенном разделе имеем список своих переменных сред, ${PROGRAM_DIR} = C:\Program Files\WinRar, или ${PROGRAM_DIR} = (взять из HKEY_LOCAL_MACHINE\Software\WinRar::Installation Directory или ${PROGRAM_DIR} = (спросить у пользователя) etc и уже в патчинге определенного файла прописывать его каталог отдельной опцией как? Kindly пишет: Наверное, есть смысл сделать Silent Mode, в нем же опции: делать ли бэкап, удалять ли сертификат. На практике такие патчи могут вшиваться в инсталляторы софта или игр, например, для тихой русификации (это если ты реализуешь "патчинг массивов"). Это тоже есть в задумках ![]() ![]() ![]() |
|
Создано: 22 января 2011 14:51 · Поправил: Kindly · Личное сообщение · #23 |
|
Создано: 22 января 2011 15:02 · Личное сообщение · #24 Kindly пишет: Только при чтении из реестра учти удаление кавычек и получение пути, если в реестре прописан путь вместе с файлом, например, InstallPath = "C:\Program Files\WinRAR\WinRAR.exe" это всё мы уже давно прошли ![]() Kindly пишет: Не помешает Не помешает или всё таки это нужно? На самом деле это не так просто как кажется ![]() ![]() |
|
Создано: 22 января 2011 15:52 · Поправил: Kindly · Личное сообщение · #25 WatCheR пишет: Потрахатся придется... Может не совсем то, но я такое в инсталляторе на паскале писал: Code:
В переменную ResultStr (или твоя ${PROGRAM_DIR}) вносим путь, если не реестр, то указанная системная переменная, если файла и там нету, можно и у юзера спросить. В последнюю очередь проверяется наличие файла рядом с патчем. Потом с полученым результатом ResultStr манипулируем в дальнейшем, ес-но функцию инициализируем либо при запуске патча, либо по батону Patch. Вроде все просто, или это все равно не то? ----- Array[Login..Logout] of Life ![]() |
|
Создано: 23 января 2011 17:51 · Поправил: WatCheR · Личное сообщение · #26 |
|
Создано: 27 января 2011 00:38 · Поправил: Kindly · Личное сообщение · #27 Откопал у себя либу для проигрывания формата ym (ZX Spectrum). Может прикрутишь заодно? В аттаче либа, сорцы (асм/дельфи) и сконвертированые чипы (dll на офсайте нету, еле раньше нашел). ![]() ----- Array[Login..Logout] of Life ![]() |
|
Создано: 27 января 2011 01:38 · Личное сообщение · #28 |
|
Создано: 27 января 2011 09:08 · Личное сообщение · #29 Kindly пишет: Откопал у себя либу для проигрывания формата ym (ZX Spectrum). Может прикрутишь заодно? Не вопрос. Только до музыки еще далеко. ![]() ![]() int пишет: Это стеб, или опечатка? "програмирЫвания" на сайте. Былая безграмотность ![]() ![]() |
|
Создано: 29 января 2011 14:24 · Личное сообщение · #30 |
|
Создано: 29 января 2011 14:47 · Личное сообщение · #31 |
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 . >> |
![]() |
eXeL@B —› Софт, инструменты —› WCRPatcher |