Исходник Lua anti-decompiler [LuaJIT 2.1]

asdzxcjqwe

¯\_(ツ)_/¯
Автор темы
Друг
621
704
Простой протектор, защищающий Lua скрипты от паблик декомпиляторов.

Требования: установить Python 3.6+

Использование: перетащить luac файл на luaprot.py, после чего рядом появится защищенный скрипт. Можно перетаскивать несколько файлов за раз
либо через консоль: luaprot.py "путь к файлу.luac" "путь ко второму файлу.luac" "и так далее.luac"

Для ознакомительных целей!
Не подходит для предотвращения обхода защиты от копирования. Есть много способов взломать привязку, не прибегая к декомпилированию вашего скрипта.
Данный исходный файл является лишь примером того, как можно взаимодействовать со скомпилированными LuaJIT скриптами на языке Python.

обновил 13.12.2020 - небольшие фиксы
 

Вложения

  • luaprot.py
    10.8 KB · Просмотры: 2,059
Последнее редактирование:

asdzxcjqwe

¯\_(ツ)_/¯
Автор темы
Друг
621
704
обновлю, тут генерит рандомные опкоды и пихает их в каждый прототип
также скроет байткод, по крайней мере от нефикшенного bc.lua

использование такое же: перетащить LUAC файл или файлы на скрипт luaprot-new.py
после чего рядом будет создан файл имя_скрипта-prot.luac
можно протектить по кругу уже запротекченный скрипт сколько угодно раз
 
Последнее редактирование:

imring

Ride the Lightning
Всефорумный модератор
2,355
2,516
тут генерит рандомные опкоды
которых даже не существует
Lua:
00000032    UNK (155)    91    64090
00000036    UNK (128)    252    61186
0000003a    UNK (105)    8    50774
0000003e    UNK (209)    206    46197
00000042    UNK (104)    12    16584
00000046    UNK (249)    17    35870
0000004a    UNK (209)    189    9995

сурс:
local mt = {
    test = 2,
    getTest = function(self) return self.test end
}

local a = {
    test = 1
}
setmetatable(a, mt)
print(a.test) -- увы не работает, ибо правильно setmetatable(a, { __index = mt })
dislua bytecode (подсвечен оригинальный код):
-- BYTECODE -- proto:00000007-00000177
-- size: 00000170 args: 1 opcodes: 89
0000000e    JMP (88)    250    0000016a (87)
00000012    UNK (194)    201    24672
00000016    UNK (198)    51    62454
0000001a    JMP (88)    162    00009e56 (10127)
0000001e    UNK (231)    135    65346
00000022    UNK (183)    57    51840
00000026    ISEQP (10)    92    51146
0000002a    UNK (189)    47    48005
0000002e    POW (37)    116    166    53
00000032    UNK (155)    91    64090
00000036    UNK (128)    252    61186
0000003a    UNK (105)    8    50774
0000003e    UNK (209)    206    46197
00000042    UNK (104)    12    16584
00000046    UNK (249)    17    35870
0000004a    UNK (209)    189    9995
0000004e    JLOOP (87)    149    0001d142 (29757)
00000052    UNK (189)    202    36389
00000056    UNK (139)    149    36912
0000005a    UNK (122)    176    17697
0000005e    UNK (109)    212    58000
00000062    GSET (55)    79    17169
00000066    UNK (174)    87    19243
0000006a    UNK (121)    219    10269
0000006e    ITERL (82)    65    0000fb62 (16061)
00000072    UNK (153)    176    50914
00000076    UNK (191)    193    51176
0000007a    ADDVN (22)    184    87    255
0000007e    MULNV (29)    172    103    116
00000082    ADDVV (32)    0    192    73
00000086    UNK (198)    252    44781
0000008a    UNK (130)    141    51167
0000008e    JLOOP (87)    28    0001c892 (29185)
00000092    MODVN (26)    145    134    174
00000096    UNK (135)    188    47375
0000009a    TGETV (56)    7    71    164
0000009e    UNK (152)    109    49038
000000a2    RET1 (76)    224    14952
000000a6    UNK (188)    19    9644
000000aa    KNIL (44)    123    6611
000000ae    GGET (54)    24    54958
000000b2    ADDVV (32)    61    25    115
000000b6    ISEQP (10)    71    23728
000000ba    UNK (180)    25    501
000000be    RET1 (76)    1    55770
000000c2    UNK (225)    240    12954
000000c6    UNK (152)    215    10495
000000ca    TGETR (59)    30    4    115
000000ce    UNK (195)    171    61930
000000d2    UNK (220)    241    30838
000000d6    MULNV (29)    68    30    172
000000da    UNK (126)    107    15899
000000de    UNK (110)    48    64590
000000e2    UNK (125)    120    63859
000000e6    UNK (112)    159    48246
000000ea    ISFC (13)    217    60599
000000ee    JFUNCF (91)    116    25650
000000f2    JFUNCV (94)    76    42005
000000f6    UNK (221)    198    39347
000000fa    ISNUM (17)    178    4973
000000fe    TSETM (63)    214    64556
00000102    UNK (151)    64    24834
00000106    UNK (220)    212    54195
0000010a    GSET (55)    27    53945
0000010e    VARG (71)    63    230    193
00000112    UNK (215)    246    57219
00000116    FORI (77)    121    ffffffffffffe8d6 (-1552)
0000011a    UNK (118)    88    46317
0000011e    DIVVV (35)    71    96    131
00000122    ISFC (13)    25    646
00000126    JFUNCV (94)    75    40808
0000012a    TSETM (63)    203    16482
0000012e    UNK (165)    197    16900
00000132    ITERL (82)    197    fffffffffffe0626 (-32451)
00000136    UNK (180)    47    22254
0000013a    ISEQV (4)    206    27874
0000013e    MULVN (24)    55    238    214
00000142    UNK (191)    132    35203
00000146    UNK (177)    66    38415
0000014a    ISNEV (5)    226    33063
0000014e    UNK (207)    17    52506
00000152    JMP (88)    40    000190e2 (25572)
00000156    TDUP (53)    242    24552
0000015a    UNK (176)    135    8182
0000015e    UNK (147)    87    22378
00000162    UNK (143)    22    35983
00000166    ISF (15)    53    4137
0000016a => TGETS (57)    1    0    0 ; "test"
0000016e    RET1 (76)    1    2

-- BYTECODE -- proto:00000179-000002C9
-- size: 00000150 args: 0 opcodes: 69
00000180    JMP (88)    161    00000264 (57)
00000184    UNK (153)    136    10215
00000188    ISEQN (8)    187    62921
0000018c    DIVNV (30)    222    249    227
00000190    IITERL (83)    175    35671
00000194    ADDNV (27)    39    85    154
00000198    UNK (213)    144    2099
0000019c    UNK (207)    110    61346
000001a0    UNK (138)    194    52830
000001a4    TGETV (56)    154    105    39
000001a8    CALLM (65)    115    154    137
000001ac    FORI (77)    215    0000c2f0 (12369)
000001b0    UNK (197)    93    7358
000001b4    UNK (209)    239    36249
000001b8    RET (74)    228    47459
000001bc    UNK (137)    103    15597
000001c0    UNK (239)    174    17692
000001c4    USETN (48)    101    23738
000001c8    UNK (196)    121    44005
000001cc    MULVN (24)    60    119    142
000001d0    UNK (221)    168    58440
000001d4    MULNV (29)    61    238    180
000001d8    UNK (217)    154    46778
000001dc    UNK (105)    101    18369
000001e0    UNK (234)    14    14126
000001e4    RETM (73)    205    21891
000001e8    UNK (242)    11    12193
000001ec    UNK (185)    194    17818
000001f0    UCLO (50)    248    ffffffffffffdb30 (-2480)
000001f4    UNK (180)    226    56522
000001f8    KNUM (42)    182    53979
000001fc    UNK (189)    204    55331
00000200    UNK (101)    64    65239
00000204    ADDVN (22)    69    30    233
00000208    CALLMT (67)    49    24817
0000020c    ISNUM (17)    117    15468
00000210    UNK (233)    105    63941
00000214    UNK (142)    174    53404
00000218    UNK (188)    225    50280
0000021c    TSETV (60)    136    232    210
00000220    ISNUM (17)    210    19047
00000224    UNK (229)    76    54660
00000228    UNK (198)    31    41995
0000022c    UNK (172)    215    41236
00000230    UNK (191)    127    34286
00000234    MULNV (29)    151    77    168
00000238    UNK (170)    144    41955
0000023c    UNK (218)    39    43103
00000240    UNK (150)    16    59828
00000244    UNK (201)    90    45916
00000248    UNK (117)    83    652
0000024c    ADDVN (22)    198    122    66
00000250    FORI (77)    127    0000d0e0 (13220)
00000254    UNK (139)    187    39670
00000258    UNK (151)    246    36729
0000025c    UNK (106)    6    51132
00000260    UNK (212)    212    38894
00000264 => TDUP (53)    0    0 ; {test=2}
00000268    FNEW (51)    1    1 ; -- proto:00000007-00000177
0000026c    TSETS (61)    1    0    2 ; "getTest"
00000270    TDUP (53)    1    3 ; {test=1}
00000274    GGET (54)    2    4 ; "setmetatable"
00000278    MOV (18)    4    1
0000027c    MOV (18)    5    0
00000280    CALL (66)    2    1    3
00000284    GGET (54)    2    5 ; "print"
00000288    TGETS (57)    4    1    6 ; "test"
0000028c    CALL (66)    2    1    2
00000290    RET0 (75)    0    1
 

asdzxcjqwe

¯\_(ツ)_/¯
Автор темы
Друг
621
704
обновил

- выключил генерацию несуществующих опкодов по умолчанию, но оставил выбор за пользователем (False - выкл, True - вкл)
- добавил цикличность (джампится несколько раз вместо одного, но умножает весь размер мусора на число повторов)
- теперь мусор добавляется и в конец прототипа тоже
- изменить некоторую конфигурацию можно в начале файла

Python:
# SETTINGS / НАСТРОЙКИ СКРИПТА
rnd_min = 50        # рандом от
rnd_max = 100       # рандом до
loops = 10          # количество повторов
unknowns = False    # генерировать неизвестные опкоды или нет


которых даже не существует
сперва подумал, что так будет лучше, потом дошло, что любой из декомпов просто пропускает неизвестные опкоды и краш происходит из-за кривых существующих, а не неизвестных. Перезалью


подсвечен оригинальный код
как я говорил, пофиксить bc.lua не составляет труда, справится любой луашер (логично), поэтому это вряд ли защита от просмотра байткода, скорее от декомпов, которые анализируют байткод в автоматическом режиме без участия пользователя (без отладки), короче защита от нуба. Это был скорее вызов этой теме.

Лучшая защита всегда изнутри, а просто накрыть скомпилированный файл никогда не достаточно


увы не работает, ибо правильно setmetatable(a, { __index = mt })
вот тут не понял. типа прот может ломать какой-то код? хотя судя по простому принципу его работы не должен
если ты не это имел в виду, то просто не отвечай
 

MaksQ

Известный
967
816
да уж, есть уже декомпиляторы которые такую защиту снимают...
 

asdzxcjqwe

¯\_(ツ)_/¯
Автор темы
Друг
621
704
да уж, есть уже декомпиляторы которые такую защиту снимают...
1589809980928.png

1589809987047.png


в паблике не видел, толкьо приват
не стоит доверять всю защиту только этому
есть в планах сделать что-то большее, но пока что только в планах
 

MaksQ

Известный
967
816
Screenshot_20200605.jpg


Да уж классно.
 
Последнее редактирование модератором:
  • Вау
Реакции: atomlin

sᴀxᴏɴ

#Mary
Всефорумный модератор
791
846
иииииииии что? тебе уже написали что он для ОЗНАКОМИТЕЛЬНЫХ целей, никто тебе не гарантировал что его никто никогда не снимет. это луа, здесь любой антидекомпилятор, обфускатор, пакер можно снять без заморочек. ну еще мог бы обратить внимание, что в теме уже стоит тэг "Outdated"
 
  • Ха-ха
Реакции: MaksQ

Fix_Play

Потрачен
105
30
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
2021 год еще нет анпротектора спс asdzxcjqwe за хуйню которую нереально обойти......
 

Fix_Play

Потрачен
105
30
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.