ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   конвертация строки в cp1251 (https://forum.antichat.xyz/showthread.php?t=1433897)

yung milonov 23.05.2022 02:12

столкнулся с проблемой при переписи функции с Lua на Python.

Цитата:

Сообщение от Спойлер

декодирует строку в изначальный вид (из string hider)

https://forum.antichat.xyz/attachmen...dcde8394bf.png

результат:
https://forum.antichat.xyz/attachmen...bb04268d1b.png

кодировка файла в данном случае 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
(
"‹ђ‹…€‰"
)
)




Цитата:

Сообщение от Спойлер


https://forum.antichat.xyz/attachmen...1db09c5c2c.png

результат:
https://forum.antichat.xyz/attachmen...b626292978.png

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


tripple sixx 03.11.2023 18:22

up (столкнулся с этой же проблемой)

MrDorlik 03.11.2023 18:38

Цитата:

Сообщение от prada666

up (столкнулся с этой же проблемой)

С этой же проблемой? тебе строки в питоне закодировать надо?

tripple sixx 03.11.2023 18:56

Цитата:

Сообщение от 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


MrDorlik 03.11.2023 19:00

Цитата:

Сообщение от 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 отнимай и все

tripple sixx 03.11.2023 19:20

Цитата:

Сообщение от 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



Время: 15:55