уни-патч для линукса и для макоси
X

Привет дорогой друг

Наш сайт существует и развиваетется за счет рекламы. Пожалуйста, отключите блокировку рекламы AdBlock или подобное, для нашего сайта. Спасибо!
Показано с 1 по 10 из 48

Древовидный режим

  1. #2
    Спец PRO
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    249
    Сказал(а) спасибо
    69
    Поблагодарили 1811 раз(а) в 395 сообщениях

    По умолчанию уни-патч для линукса и для макоси

    UNI-patch для 64-bit линукса есть давно, называется 1C8_UP.exe (размер 30720 байт).
    Но в случае с 64-bit бэкбейс.so после патча либа становится нерабочей.
    Далее я объясню как внедрять UNI-patch в либу бэкбейс для 64-bit линукса и для макоси (она вроде только 64-bit) так, чтобы результат был рабочим, ну или, по крайней мере, чтобы патченная либа была основой для будущих репаков - сейчас в коде линуксовой либы не наблюдается поиск наличия патчей, как это сейчас делается в изделии для винды, но в будущем это вскоре появится и в линуксовых и в макосных изделиях.

    Кроме уни-патча ещё очень необходим "правильный" делик-патч (deLIC-patch), но в этой теме я для краткости изложения про него не буду писать, а то букафф будет оч.много.
    Что нам понадобится? виндовый 1с8_UP.exe (размер 30720 байт) и железнодорожная кувалда весом около 3кг.


    1) Виндовый 1C8_UP.exe можно применить к линуксовой либе бэкбейс и узнать адрес HASP-API-EP - начиная с этого адреса 1C8_UP запишет 64-битный уни-патч размером 0x2A00, последний полезно сохранить в отдельном файле, назовем его up64.bin (в нем, скорее всего, будет дамп ключика для 0x64=100 клиентских лицензий), из него можно легко получить заготовки уни-патчей up05.bin, up10.bin, up20.bin, up50.bin для 5,10,20,50 к.л..

    найдем начало блока "уни-патч-х64":
    Код:
    $ hexdump -C 1c8_UP.exe | grep "51 53 52"
    00002200  51 53 52 57 56 e8 88 13  00 00 00 00 00 00 00 00  |QSRWV...........|
    сохраним блок "уни-патч-х64" в файл:
    Код:
    $ dd if=1c8_UP.exe of=up64.bin bs=1 skip=$((0x2200)) count=$((0x2A00)) conv=notrunc
    10752+0 records in
    10752+0 records out
    10752 bytes (11 kB) copied, 0,0493868 s, 218 kB/s
    сделаем заготовки уни-патчей up05.bin, up10.bin, up20.bin, up50.bin для 5,10,20,50 к.л..
    Код:
    $ cp up64.bin up05.bin
    $ cp up64.bin up10.bin
    $ cp up64.bin up20.bin
    $ cp up64.bin up50.bin
    
    $ printf '\x05' | dd of=up05.bin bs=1 seek=$((0x11F8)) count=1 conv=notrunc
    $ printf '\x05' | dd of=up05.bin bs=1 seek=$((0x137E)) count=1 conv=notrunc
    
    $ printf '\x0A' | dd of=up10.bin bs=1 seek=$((0x11F8)) count=1 conv=notrunc
    $ printf '\x0A' | dd of=up10.bin bs=1 seek=$((0x137E)) count=1 conv=notrunc
    
    $ printf '\x14' | dd of=up20.bin bs=1 seek=$((0x11F8)) count=1 conv=notrunc
    $ printf '\x14' | dd of=up20.bin bs=1 seek=$((0x137E)) count=1 conv=notrunc
    
    $ printf '\x32' | dd of=up50.bin bs=1 seek=$((0x11F8)) count=1 conv=notrunc
    $ printf '\x32' | dd of=up50.bin bs=1 seek=$((0x137E)) count=1 conv=notrunc

    2) найдем в файле backbas.so (или backbas.dylib) HASP_API64_EP поиском цепочки [41 81 78 08 6C 68 73 68]:
    в MC (Midnight Commander) жмем кнопки на файле backbas.so (или backbas.dylib):
    Shift+F3, F4, F7, искать "41 81 78 08 6C 68 73 68" (Hexadecimal)
    смещение смотреть в правом верхнем углу (0x005B7DB5)
    в backbas.so такая цепочка уникальна, в backbas.dylib их две, берите первую.

    калькулятором вычисляем (в режиме Hexadecimal):
    для Linux x64 вычитать 0х75: HASP_API64_EP = 5B7DB5 - 75 = 5B7D40 (значения для 20-1363.lnx64)
    для MacOSX вычитать 0х4A: HASP_API64_EP = 58A23A - 4A = 58A1F0 (значения для 21-1140.macos)


    3) запишем блок "уни-патч-х64" в файл либы бэкбейс:

    место записи "уни-патч-х64" вычисляется на калькуляторе так: HASP_API64_EP - 0x2A00
    т.е. надо записать уни-патч-х64 (его размер 0x2A00), сдвинув его к началу файла, так, чтобы не перезаписалась функция, которая начинается с точки HASP_API64_EP (её начало мы ниже подрихтуем)

    для Linux x64 (пример для 20-1363.lnx64):
    HASP_API64_EP - 2A00 = 5B7D40 - 2A00 = 5B5340
    Код:
    $ dd if=up64.bin of=backbas.so bs=1 seek=$((0x5B5340)) count=$((0x2A00)) conv=notrunc
    10752+0 records in
    10752+0 records out
    10752 bytes (11 kB) copied, 0,0334565 s, 321 kB/s


    для MacOSX (пример для 21-1140.macos):
    HASP_API64_EP - 2A00 = 58A1F0 - 2A00 = 5877F0
    Код:
    $ dd if=up64.bin of=backbas.dylib.2 bs=1 seek=$((0x5877F0)) count=$((0x2A00)) conv=notrunc
    10752+0 records in
    10752+0 records out
    10752 bytes (11 kB) copied, 0,0329808 s, 326 kB/s



    4) СПОСОБЫ ПЕРЕДАЧИ АРГУМЕНТОВ ПРИ ВЫЗОВЕ ФУНКЦИЙ:
    В Windows x64 метод передачи всех параметров немного похож на fastcall.
    Первые 4 аргумента записываются в регистры RCX,RDX,R8,R9, а остальные — в стек.
    Метод передачи аргументов в Linux x64 и в MacOSX почти такой же, как и в Windows, но используются 6 регистров (RDI,RSI,RDX,RCX,R8,R9) вместо 4.
    Код уни-патча компилировался в Windows x64, а работать будет в Linux x64 и в MacOSX - 9 параметров для функции HASP_API64_EP оформляются в structure и передаются указателем на неё. Линуксовый и макосный код передает указатель в регистре RDI, а виндовый код уни-патча ожидает его в регистре RCX.
    Вот так изменим начало фунции HASP_API64_EP (в Linux x64 и в MacOSX):
    Код:
    57               push rdi
    59               pop rcx      т.е. значение регистра rdi записывается в регистр rcx
    E9 F9 D5 FF FF   jmp в начало блока уни-патч-х64 т.е. jmp -10759
    для Linux x64 (пример для 20-1363.lnx64) запись по адресу HASP_API64_EP:
    Код:
    $ printf '\x57\x59\xE9\xF9\xD5\xFF\xFF' | dd of=backbas.so bs=1 seek=$((0x5B7D40)) count=7 conv=notrunc
    7+0 records in
    7+0 records out
    7 bytes (7 B) copied, 0,000178756 s, 39,2 kB/s


    для MacOSX (пример для 21-1140.macos) запись по адресу HASP_API64_EP:
    Код:
    $ printf '\x57\x59\xE9\xF9\xD5\xFF\xFF' | dd of=backbas.dylib bs=1 seek=$((0x58A1F0)) count=7 conv=notrunc
    7+0 records in
    7+0 records out
    7 bytes (7 B) copied, 0,000166049 s, 42,2 kB/s



    5) Код уни-патча скомпилирован так, что он не теряет работоспособность при изменении адреса его загрузки в память. Именно поэтому его можно перемещать в секции .text
    А ещё код уни-патча использует свои локальные переменные и будет писать данные прямо в памяти своего кода.
    Если не изменить аттрибуты памяти, в которой расположен код уни-патча, с R-X (можно читать и исполнять) на RWX (можно читать, писать и исполнять), то при первом же выполнении кода уни-патча произойдет крах - ОС прихлопнет процесс при попытке произвести запись в память, в которой это не допускается.
    Осталось совсем чуть-чуть - надо изменить в заголовке либы backbas аттрибуты секции .text с R-X на RWX.
    Чтобы понять "что, где и как будем менять в заголовке файла либы?" применим 010editor т.к. он научен понимать либы линукса и макоси. Можно обойтись без 010editor, главное - решить задачу "изменить аттрибуты секции .text с R-X на RWX".

    для Linux x64 (пример для 20-1363.lnx64) запись по адресу 0x7С:

    Код:
    $ printf '\x07' | dd of=backbas.so bs=1 seek=$((0x7С)) count=1 conv=notrunc
    1+0 records in
    1+0 records out
    1 byte (1 B) copied, 0,00011292 s, 8,9 kB/s


    для MacOSX (пример для 21-1140.macos) запись по адресу 0x5C:

    Код:
    $ printf '\x07' | dd of=backbas.dylib bs=1 seek=$((0x5C)) count=1 conv=notrunc
    1+0 records in
    1+0 records out
    1 byte (1 B) copied, 0,000161868 s, 6,2 kB/s
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

  2. 11 пользователя(ей) сказали cпасибо:

    asotel (11.06.2022), DontTrustMexD (24.04.2022), Ersain (21.01.2024), KennySP00 (18.05.2022), morbidsr (16.04.2022), Nekii (18.04.2022), noname1904 (09.09.2023), redhat2020 (04.05.2022), root7 (20.01.2024), Sova24 (05.02.2023), vovashulga (04.05.2022)

Похожие темы

  1. Ответов: 1
    Последнее сообщение: 07.02.2012, 22:43
  2. Патч для Warcraft III 1.26 rus
    от GHoSt444 в разделе Игры (games)
    Ответов: 0
    Последнее сообщение: 30.06.2011, 17:18
  3. Патч к AMS Enterprise 2.9
    от kryak_er в разделе Полезности
    Ответов: 2
    Последнее сообщение: 09.06.2009, 22:06
  4. Установка Линукса.
    от Большой Брат в разделе LINUX
    Ответов: 18
    Последнее сообщение: 09.11.2007, 04:26

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •