 |

23.05.2022, 02:12
|
|
Познавший АНТИЧАТ
Регистрация: 06.09.2020
Сообщений: 1,043
С нами:
2992507
Репутация:
168
|
|
столкнулся с проблемой при переписи функции с Lua на Python.
Сообщение от Спойлер
декодирует строку в изначальный вид (из string hider)

результат:

кодировка файла в данном случае Windows 1251
Lua:
Код:
function
_C
(
str
)
local
res
=
""
local
n
=
string
.
byte
(
string
.
sub
(
str
,
1
,
1
)
)
+
string
.
byte
(
string
.
sub
(
str
,
-
1
,
-
1
)
)
local
str
=
string
.
sub
(
str
,
2
,
#
str
-
1
)
for
i
=
1
,
#
str
do
res
=
res
..
string
.
char
(
str
:
byte
(
i
)
-
n
)
end
return
res
end
print
(
_C
(
"‹ђ‹…€‰"
)
)
Сообщение от Спойлер

результат:

Python:
Код:
def
_C
(
text
)
:
res
=
""
n
=
ord
(
text
[
0
]
)
+
ord
(
text
[
len
(
text
)
-
1
]
)
text
=
text
[
1
:
-
1
]
for
i
in
range
(
1
,
len
(
text
)
)
:
res
+=
chr
(
ord
(
text
[
i
]
)
-
n
)
print
(
res
)
_C
(
"‹ђ‹…€‰"
)
вроде нормально переписал, должно все быть нормально, но возникли проблемы - по моим соображениям из-за строки в utf-8.
пытался через методы из гугла делать строку в кодировке windows1251, но результат вроде не менялся.
сурс хайдера строк тож есть, он и делает эти строки.
Python:
[CODE]
import
re
,
os
,
random
os
.
system
(
'title string hider by babulya karelli'
)
decoder
=
'\nfunction _C(str)\n local res = ""\n local n = string.byte( string.sub(str, 1, 1) ) + string.byte( string.sub(str, -1, -1) )\n local str = string.sub(str, 2, #str - 1)\n for i = 1, #str do\n res = res .. string.char( str:byte(i) - n )\n end\n return res\nend\n'
def
main
(
)
:
text
=
input
(
u'\u041f\u0443\u0442\u044c \u043a Lua: '
)
STR_C
=
''
with
open
(
text
,
'r'
)
as
(
FILE
)
:
for
st
in
FILE
:
result
=
re
.
findall
(
'\\"(.*?)\\"'
,
st
)
for
retab
in
result
:
EncryptLine
=
''
number
=
random
.
randint
(
1
,
25
)
number_
=
random
.
randint
(
1
,
25
)
for
row
in
retab
.
encode
(
'cp1251'
)
:
if
row
+
50
|
|
|

03.11.2023, 18:22
|
|
Участник форума
Регистрация: 27.09.2023
Сообщений: 123
С нами:
1385006
Репутация:
33
|
|
up (столкнулся с этой же проблемой)
|
|
|

03.11.2023, 18:38
|
|
Постоянный
Регистрация: 20.02.2022
Сообщений: 946
С нами:
2226127
Репутация:
68
|
|
Сообщение от prada666
up (столкнулся с этой же проблемой)
С этой же проблемой? тебе строки в питоне закодировать надо?
|
|
|

03.11.2023, 18:56
|
|
Участник форума
Регистрация: 27.09.2023
Сообщений: 123
С нами:
1385006
Репутация:
33
|
|
Сообщение от MrDorlik
С этой же проблемой? тебе строки в питоне закодировать надо?
Наоборот, мне нужно их разкодировать.
У меня строчки в таком формате - _C("\\xa4\\x97\\xa3\\xa7\\x9b\\xa4\\x97").
Пишу на питоне декриптор для этого, но что-то не получается.
Python:
Код:
import
os
import
re
def
_C
(
text
)
:
res
=
""
n
=
ord
(
text
[
0
]
)
+
ord
(
text
[
-
1
]
)
text
=
text
[
1
:
-
1
]
for
i
in
range
(
len
(
text
)
)
:
res
+=
chr
(
(
ord
(
text
[
i
]
.
encode
(
'utf-8'
)
)
-
n
)
%
256
)
return
res
file_path
=
input
(
"Введите путь к файлу Lua: "
)
file_name
=
os
.
path
.
basename
(
file_path
)
with
open
(
file_path
,
'r'
,
encoding
=
'utf-8'
,
errors
=
'ignore'
)
as
file
:
lines
=
file
.
readlines
(
)
result
=
''
for
line
in
lines
:
match
=
re
.
search
(
r'_C\("([^"]+)"\)'
,
line
)
while
match
:
encrypted_string
=
match
.
group
(
1
)
decrypted_string
=
_C
(
encrypted_string
)
line
=
line
.
replace
(
f'_C("{encrypted_string}")'
,
f'"{decrypted_string}"'
,
1
)
match
=
re
.
search
(
r'_C\("([^"]+)"\)'
,
line
)
result
+=
line
with
open
(
f'{file_name}_unprot.lua'
,
'w'
,
encoding
=
'utf-8'
,
errors
=
'ignore'
)
as
result_file
:
result_file
.
write
(
result
)
print
(
f'Декодирование завершено. Проверьте файл{file_name}_unprot.lua.'
)
input
(
)
Вся проблема в функции _C
upd:
В луашнике, который мне нужно декодировать, эта функция выглядит так:
Lua:
Код:
function
_C
(
slot0
)
for
slot5
in
string
.
gmatch
(
slot0
,
"."
)
do
slot1
=
""
..
string
.
char
(
string
.
byte
(
slot5
)
-
50
)
end
return
slot1
end
|
|
|

03.11.2023, 19:00
|
|
Постоянный
Регистрация: 20.02.2022
Сообщений: 946
С нами:
2226127
Репутация:
68
|
|
Сообщение от prada666
Наоборот, мне нужно их разкодировать.
У меня строчки в таком формате - _C("\\xa4\\x97\\xa3\\xa7\\x9b\\xa4\\x97").
Пишу на питоне декриптор для этого, но что-то не получается.
Python:
Код:
import
os
import
re
def
_C
(
text
)
:
res
=
""
n
=
ord
(
text
[
0
]
)
+
ord
(
text
[
-
1
]
)
text
=
text
[
1
:
-
1
]
for
i
in
range
(
len
(
text
)
)
:
res
+=
chr
(
(
ord
(
text
[
i
]
.
encode
(
'utf-8'
)
)
-
n
)
%
256
)
return
res
file_path
=
input
(
"Введите путь к файлу Lua: "
)
file_name
=
os
.
path
.
basename
(
file_path
)
with
open
(
file_path
,
'r'
,
encoding
=
'utf-8'
,
errors
=
'ignore'
)
as
file
:
lines
=
file
.
readlines
(
)
result
=
''
for
line
in
lines
:
match
=
re
.
search
(
r'_C\("([^"]+)"\)'
,
line
)
while
match
:
encrypted_string
=
match
.
group
(
1
)
decrypted_string
=
_C
(
encrypted_string
)
line
=
line
.
replace
(
f'_C("{encrypted_string}")'
,
f'"{decrypted_string}"'
,
1
)
match
=
re
.
search
(
r'_C\("([^"]+)"\)'
,
line
)
result
+=
line
with
open
(
f'{file_name}_unprot.lua'
,
'w'
,
encoding
=
'utf-8'
,
errors
=
'ignore'
)
as
result_file
:
result_file
.
write
(
result
)
print
(
f'Декодирование завершено. Проверьте файл{file_name}_unprot.lua.'
)
input
(
)
Вся проблема в функции _C
upd:
В луашнике, который мне нужно декодировать, эта функция выглядит так:
Lua:
Код:
function
_C
(
slot0
)
for
slot5
in
string
.
gmatch
(
slot0
,
"."
)
do
slot1
=
""
..
string
.
char
(
string
.
byte
(
slot5
)
-
50
)
end
return
slot1
end
Так тут вообще кодировки нет, от каждого числа в хексе 50 отнимай и все
|
|
|

03.11.2023, 19:20
|
|
Участник форума
Регистрация: 27.09.2023
Сообщений: 123
С нами:
1385006
Репутация:
33
|
|
Сообщение от MrDorlik
Так тут вообще кодировки нет, от каждого числа в хексе 50 отнимай и все
Оно из
Lua:
Код:
_C
(
"stuvwxyz{|}~\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xacbcdefghijk]a"
)
( В оригинале "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw xyz0123456789+/")
Сделало:
"NOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
Python:
Код:
def
_C
(
input_string
)
:
try
:
hex_values
=
re
.
findall
(
r'\\x[0-9a-fA-F]{2}'
,
input_string
)
result_string
=
""
for
val
in
hex_values
:
try
:
hex_value
=
int
(
val
[
2
:
]
,
16
)
subtracted_value
=
hex
(
hex_value
-
50
)
result_string
+=
f"{subtracted_value[2:]}"
except
ValueError
as
e
:
print
(
f"An error occurred:{e}"
)
decoded_string
=
bytes
.
fromhex
(
result_string
)
.
decode
(
'utf-8'
)
return
decoded_string
except
Exception
as
e
:
print
(
f"An error occurred:{e}"
)
return
None
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|