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

Показано с 1 по 8 из 8
  1. #1
    Спец
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    358
    Сказал(а) спасибо
    60
    Поблагодарили 843 раз(а) в 188 сообщениях

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

    UNI-patch для 64-bit линукса есть давно, называется 1C8_UP.exe (размер 30720 байт).
    Но в случае с 64-bit бэкбейс.so после патча либа становится нерабочей.
    объясню как внедрять UNI-patch в либу бэкбейс для 64-bit линукса и для макоси (она вроде только 64-bit) так, чтобы результат был рабочим.
    рецепт проверялся на версиях от 8.3.8 до 8.3.20
    Последний раз редактировалось HPDX2300; 13.04.2022 в 10:05.
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

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

    redhat2020 (04.05.2022), vovashulga (04.05.2022)

  3. #2
    Спец
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    358
    Сказал(а) спасибо
    60
    Поблагодарили 843 раз(а) в 188 сообщениях

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

    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
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

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

    DontTrustMexD (24.04.2022), morbidsr (16.04.2022), Nekii (18.04.2022), redhat2020 (04.05.2022), vovashulga (04.05.2022)

  5. #3
    Спец
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    358
    Сказал(а) спасибо
    60
    Поблагодарили 843 раз(а) в 188 сообщениях

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

    возможно, получится нерабочее изделие и будет падать (особенно в макоси). пишите - разберемся
    для примера:
    https://www.upload.ee/files/14046944...-v20-1363.html
    Последний раз редактировалось HPDX2300; 13.04.2022 в 10:16.
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

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

    redhat2020 (04.05.2022), vovashulga (04.05.2022)

  7. #4
    Спец
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    358
    Сказал(а) спасибо
    60
    Поблагодарили 843 раз(а) в 188 сообщениях

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

    тестовая версия 21-1197.linux-x64 "взлетела" с унипатчем:
    Код:
    $ dd if=up64.bin of=backbas.so bs=1 seek=$((0x5ED5F0)) count=$((0x2A00)) conv=notrunc
    10752+0 records in
    10752+0 records out
    10752 bytes (11 kB) copied, 0,0313987 s, 342 kB/s
    
    $ printf '\x57\x59\xE9\xF9\xD5\xFF\xFF' | dd of=backbas.so bs=1 seek=$((0x5EFFF0)) count=7 conv=notrunc
    7+0 records in
    7+0 records out
    7 bytes (7 B) copied, 0,000137062 s, 51,1 kB/s
    
    $ printf '\x07' | dd of=backbas.so bs=1 seek=$((0x7c)) count=1 conv=notrunc
    1+0 records in
    1+0 records out
    1 byte (1 B) copied, 0,000142588 s, 7,0 kB/s
    погоняем, понаблюдаем
    Последний раз редактировалось HPDX2300; 13.04.2022 в 17:11.
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

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

    redhat2020 (04.05.2022), vovashulga (04.05.2022)

  9. #5
    Спец
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    358
    Сказал(а) спасибо
    60
    Поблагодарили 843 раз(а) в 188 сообщениях

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

    Если у кого нет 1с8_UP.exe, то берите любой репак для windows-х64 и в нём есть backbas.dll, содержащая унипатч.
    унипатч начинается цепочкой байтов: 51 53 52 57 56 e8 88 13
    если не установлен hexdump, то и не нужен - во 2) пункте объяснял как в MC (Midnight Commander) искать цепочку байтов
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

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

    redhat2020 (04.05.2022), vovashulga (04.05.2022)

  11. #6
    Спец
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    358
    Сказал(а) спасибо
    60
    Поблагодарили 843 раз(а) в 188 сообщениях

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

    В изделии для макоси ver.21-1140 исполняемые файлы имеют цифр.подпись (смотреть "man codesign"), поэтому после патча либы бэкбейс изделие не "взлетит" без дополнительных "ударов кувалдой".
    Изделие версии 8-2137 не имеет цифр.подпись и потому "взлетает" после патча либы бэкбейс унипатчем.
    Мне лениво выяснять ответ на вопрос "с какой версии и релиза началось подписывание исполняемых файлов?" - я не фанат макоси.
    Код:
    $ codesign -d -v  /opt/1cv8/8.3.21.1140/backbas.dylib
    Executable=/opt/1cv8/8.3.21.1140/backbas.dylib
    Identifier=backbas
    Format=Mach-O thin (x86_64)
    CodeDirectory v=20500 size=86707 flags=0x10000(runtime) hashes=2701+5 location=embedded
    Signature size=8924
    Timestamp=Dec 28, 2021 at 2:56:58 PM
    Info.plist=not bound
    TeamIdentifier=XS78KJN5SE
    Runtime Version=10.12.0
    Sealed Resources=none
    Internal requirements count=1 size=168
    
    
    $ codesign -d -vvv  /opt/1cv8/8.3.21.1140/backbas.dylib
    Executable=/opt/1cv8/8.3.21.1140/backbas.dylib
    Identifier=backbas
    Format=Mach-O thin (x86_64)
    CodeDirectory v=20500 size=86707 flags=0x10000(runtime) hashes=2701+5 location=embedded
    Hash type=sha256 size=32
    CandidateCDHash sha256=9d44b6d1c10d22018466d5b3dd66ae8d528c5c5e
    Hash choices=sha256
    CDHash=9d44b6d1c10d22018466d5b3dd66ae8d528c5c5e
    Signature size=8924
    Authority=Developer ID Application: 1C-SOFT, OOO (XS78KJN5SE)
    Authority=Developer ID Certification Authority
    Authority=Apple Root CA
    Timestamp=Dec 28, 2021 at 2:56:58 PM
    Info.plist=not bound
    TeamIdentifier=XS78KJN5SE
    Runtime Version=10.12.0
    Sealed Resources=none
    Internal requirements count=1 size=168
    Если будет у меня время и настроение - найду способ отломить ц.п. и расскажу.

    Кстати, уни-патч в либе для макоси можно сдвигать от точки HASP_API64_EP в направлении к концу файла на 2 байта (код HASP_API64 для макоси и код HASP_API64 для линукса различаются и по нумерации версии и по содержанию)
    т.е. либу для макоси вот так мона патчить:
    Код:
    # значения для 21-1140.macos
    HASP_API64_EP=0x58A1F0
    dd if=up64.bin of=backbas.dylib bs=1 seek=$(($HASP_API64_EP + 2)) count=$((0x2A00)) conv=notrunc
    printf '\x57\x59' | dd of=backbas.dylib bs=1 seek=$(($HASP_API64_EP)) count=2 conv=notrunc
    printf '\x07' | dd of=backbas.dylib bs=1 seek=$((0x5C)) count=1 conv=notrunc
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

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

    Nekii (23.04.2022), redhat2020 (04.05.2022), vovashulga (04.05.2022)

  13. #7
    Спец
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    358
    Сказал(а) спасибо
    60
    Поблагодарили 843 раз(а) в 188 сообщениях

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

    Цитата Сообщение от HPDX2300 Посмотреть сообщение
    ...найду способ отломить ц.п. и расскажу...
    удаление ц.п.: codesign --remove-signature
    Код:
    $ sudo chown -R UID:GID /opt/1cv8/8.3.21.1140
    $ codesign --remove-signature  /opt/1cv8/8.3.21.1140/1cv8
    $ codesign --remove-signature  /opt/1cv8/8.3.21.1140/1cv8c
    $ codesign --remove-signature  /opt/1cv8/8.3.21.1140/backbas.dylib
    ... так с каждым исполняемым файлом
    сказанного достаточно, тему закрываю.
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

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

    Nekii (23.04.2022), Pependos (03.05.2022), redhat2020 (04.05.2022), vovashulga (04.05.2022)

  15. #8
    Спец
    Аватар для HPDX2300
    Регистрация
    18.04.2018
    Адрес
    HP-Compaq DX2300 microtower PC
    Сообщений
    358
    Сказал(а) спасибо
    60
    Поблагодарили 843 раз(а) в 188 сообщениях

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

    "эндоскоп" (для заглядывания под "капот"), онже отладчик и дизасемблер IDA:
    бесплатная IDA 7.7 для Linux на сервере upload.ee
    Код:
    $ sha1sum -b idafree77_linux.run
    42038657317ebea44954b484a236e7f8cbc7d2fa  idafree77_linux.run
    бесплатная IDA 7.7 для Windows-x64 на сервере upload.ee
    для проверки SHA1-checksums:
    Код:
    $ sha1sum -b idafree77_windows.exe
    1f815be20a119cc835e7678a32032ab130834d49  idafree77_windows.exe
    бесплатная IDA 7.7 для MacOSX (macOS не старше 10.14)
    Код:
    $ sha1sum -b idafree77_mac.app.zip 
    195ced3615ea9975953271a68a4b58a8b754f67e idafree77_mac.app.zip
    бесплатная IDA 7.6 для MacOSX, работает на HighSierra (macOS 10.13.6)
    Код:
    $ sha1sum -b idafree76_mac.app.zip 
    95cd7b918bb2aa47fb10d05c606609a0e91de285 *idafree76_mac.app.zip
    "кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"

Похожие темы

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

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

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

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

Ваши права

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