이것은 제한된 1 단계 난독 화 솔루션 일 뿐이지 만 내장되어 있습니다. Python에는 바이트 코드에 대한 컴파일러가 있습니다.
python -OO -m py_compile <your program.py>
.pyo
바이트 코드를 포함하고 독 스트링이 제거 된 위치 등을 포함 하는 파일을 생성합니다 .pyo
. .py
확장자를 사용 하여 파일의 이름을 바꿀 수 있으며 python <your program.py>
프로그램처럼 실행되지만 소스 코드는 포함되지 않습니다.
추신 : "제한된"난독 화 수준은 코드를 복구 할 수있는 수준입니다 (일부 변수 이름은 있지만 주석 및 독 스트링은 없음). 방법은 첫 번째 설명을 참조하십시오. 그러나 어떤 경우에는이 수준의 난독 화로 충분하다고 간주 될 수 있습니다.
PPS는 : 프로그램 수입 모듈이 같은 난독 경우에, 당신은 그들을 이름을 변경해야합니다 .pyc
(I 어느 날 아프게하지 않습니다 확인이 아니에요), 또는 당신이 작업 할 수 있습니다 대신 접미사 .pyo
와 그들을 실행 python -O ….pyo
합니다 (수입한다 작업). 이렇게하면 Python이 모듈을 찾을 수 있습니다 (그렇지 않으면 Python이 .py
모듈을 찾습니다 ).
사람이 읽을 수 없도록?
모든 파일이 인코딩되었음을 의미합니다! 열면 아무것도 이해할 수 없습니다 ..! 내가 원하는 것
최대로 소스를 바이트 코드로 컴파일 한 다음 바이트 코드 만 배포 할 수 있습니다. 그러나 이것조차도 되돌릴 수 있습니다. 바이트 코드는 반 읽기 가능한 소스로 디 컴파일 될 수 있습니다.
Base64는 누구나 쉽게 디코딩 할 수 있으므로 실제 보호 기능을 제공 할 수 없으며 완전한 PC 문맹자로부터 만 소스를 '숨길'것입니다. 또한 실제로 해당 코드를 실행하려는 경우 스크립트 (또는 배포판에 합법적 인 사용자가 실행해야하는 다른 스크립트)에 바로 디코더를 포함해야하며, 이는 즉시 인코딩 / 암호화.
난독 화 기술에는 일반적으로 주석 / 문서 제거, 이름 변경, 휴지통 코드 삽입 등이 포함되므로 바이트 코드를 디 컴파일하더라도 소스를 잘 읽을 수 없습니다. 그러나 그것들은 그럼에도 불구하고 파이썬 소스가 될 것이고 파이썬은 읽을 수없는 엉망이되는 것을 잘하지 않습니다.
일부 기능을 절대적으로 보호해야하는 경우 C 또는 C ++와 같은 컴파일 된 언어를 사용하여 .so / .dll을 컴파일 및 배포 한 다음 Python 바인딩을 사용하여 보호 된 코드를 사용하는 것이 좋습니다.
-------------------이 base64
모듈 을 사용하여 문자열을 인코딩하여 어깨 서핑 을 중지 할 수 있지만 파일에 액세스 할 수있는 사람이 코드를 찾는 것을 중지하지는 않습니다.
그런 다음 사용할 수있는 compile()
기능 과 eval()
기능을 당신이 그것을 디코딩 한 후 코드를 실행할 수 있습니다.
>>> import base64
>>> mycode = "print 'Hello World!'"
>>> secret = base64.b64encode(mycode)
>>> secret
'cHJpbnQgJ2hlbGxvIFdvcmxkICEn'
>>> mydecode = base64.b64decode(secret)
>>> eval(compile(mydecode,'<string>','exec'))
Hello World!
따라서 30 줄의 코드가있는 경우 다음과 같이 암호화하고 싶을 것입니다.
>>> f = open('myscript.py')
>>> encoded = base64.b64encode(f.read())
그런 다음을 수행하는 두 번째 스크립트 작성해야 할 것입니다 compile()
및 eval()
아마 쌌다 문자열 리터럴로 인코딩 된 스크립트를 포함하는 것이다 삼중 따옴표를 . 따라서 다음과 같이 보일 것입니다.
import base64
myscript = """IyBUaGlzIGlzIGEgc2FtcGxlIFB5d
GhvbiBzY3JpcHQKcHJpbnQgIkhlbG
xvIiwKcHJpbnQgIldvcmxkISIK"""
eval(compile(base64.b64decode(myscript),'<string>','exec'))
-------------------코드를 C / C ++에 포함하고 다른 애플리케이션에 Python 포함을 컴파일 할 수 있습니다.
Embedded.c
#include <Python.h>
int
main(int argc, char *argv[])
{
Py_SetProgramName(argv[0]); /* optional but recommended */
Py_Initialize();
PyRun_SimpleString("print('Hello world !')");
Py_Finalize();
return 0;
}
Ubuntu / Debian에서
$ sudo apt-get install python-dev
Centos / Redhat / Fedora에서
$ sudo yum install python-devel
컴파일하다
$ gcc -o embedded -fPIC -I/usr/include/python2.7 -lpython2.7 embedded.c
함께 달리다
$ chmod u+x ./embedded
$ time ./embedded
Hello world !
real 0m0.014s
user 0m0.008s
sys 0m0.004s
초기 스크립트 : hello_world.py :
print('Hello World !')
스크립트 실행
$ time python hello_world.py
Hello World !
real 0m0.014s
user 0m0.008s
sys 0m0.004s
그러나 파이썬 코드의 일부 문자열은 컴파일 된 파일에서 찾을 수 있습니다.
$ grep "Hello" ./embedded
Binary file ./embedded matches
$ grep "Hello World" ./embedded
$
약간의 난독 화를 원할 경우 base64를 사용할 수 있습니다.
...
PyRun_SimpleString("import base64\n"
"base64_code = 'your python code in base64'\n"
"code = base64.b64decode(base64_code)\n"
"exec(code)");
...
예 :
코드의 기본 64 문자열 만들기
$ base64 hello_world.py
cHJpbnQoJ0hlbGxvIFdvcmxkICEnKQoK
Embedded_base64.c
#include <Python.h>
int
main(int argc, char *argv[])
{
Py_SetProgramName(argv[0]); /* optional but recommended */
Py_Initialize();
PyRun_SimpleString("import base64\n"
"base64_code = 'cHJpbnQoJ0hlbGxvIFdvcmxkICEnKQoK'\n"
"code = base64.b64decode(base64_code)\n"
"exec(code)\n");
Py_Finalize();
return 0;
}
모든 명령
$ gcc -o embedded_base64 -fPIC -I/usr/include/python2.7 -lpython2.7 ./embedded_base64.c
$ chmod u+x ./embedded_base64
$ time ./embedded_base64
Hello World !
real 0m0.014s
user 0m0.008s
sys 0m0.004s
$ grep "Hello" ./embedded_base64
$
최신 정보:
이 프로젝트 ( pyarmor
)도 도움이 될 수 있습니다.
https://pypi.org/project/pyarmor/
-------------------Cython
이것에 대한 goto 대답은 Cython 인 것 같습니다. 아직 아무도 언급하지 않았다 니 정말 놀랍습니까? 다음은 홈페이지입니다 : https://cython.org
간단히 말해서, 이것은 파이썬을 C로 변환하고 컴파일하여 "일반"컴파일 된 배포 가능한 C 프로그램과 마찬가지로 보호됩니다.
하지만 한계가 있습니다. 나는 그것들에 대해 읽기 시작하면서 내 목적을 위해 아이디어를 떨어 뜨 렸기 때문에 나는 그것들을 깊이 탐구하지 않았습니다. 그러나 그것은 여전히 당신을 위해 작동 할 수 있습니다. 기본적으로 Python이 제공하는 동적 인 굉장함으로 인해 Python을 최대한 사용할 수 없습니다. 저에게 튀어 나온 한 가지 주요 문제는 키워드 매개 변수를 사용할 수 없다는 것입니다. (위치 매개 변수 만 사용하여 함수 호출을 작성해야합니다. 확인하지는 않았지만 조건부 가져 오기 또는 평가를 사용할 수 있는지 의심됩니다. 다형성이 어떻게 처리되는지 확실하지 않습니다 ...
어쨌든, 사실 이후에 거대한 코드베이스를 난독 화하려고하지 않거나 이상적으로는 Cython 사용을 염두에두고 있다면 이것은 매우 주목할만한 옵션입니다.
-------------------pyconcrete를 시도해 볼 수 있습니다.
암호화 .pyc
에 .pye
그것을 가져 해독
라이브러리 OpenAES로 암호화 및 암호 해독
용법
완전 암호화
모든 것을 다음
.py
으로 변환*.pye
$ pyconcrete-admin.py compile --source={your py script} --pye $ pyconcrete-admin.py compile --source={your py module dir} --pye
제거
*.py
*.pyc
또는*.pye
다른 폴더로 복사main .py는 main .pye 로 암호화되어 있으며 일반 .py 로 실행할 수 없습니다
python
. 기본 .pye 스크립트pyconcrete
를 처리 하려면을 사용해야 합니다 . ( exe )는 시스템 경로 (예 : / usr / local / bin)에 설치됩니다.pyconcrete
pyconcrete main.pye src/*.pye # your libs
부분 암호화 (lib로 파이 콘크리트)
pyconcrete 소스를 다운로드하고 setup.py로 설치하십시오.
$ python setup.py install \ --install-lib={your project path} \ --install-scripts={where you want to execute pyconcrete-admin.py and pyconcrete(exe)}
기본 스크립트에서 pyconcrete 가져 오기
추천 프로젝트 레이아웃
main.py # import pyconcrete and your lib pyconcrete/* # put pyconcrete lib in project root, keep it as original files src/*.pye # your libs
반 난독 화 된 코드를 만들고 싶다면 다음과 같은 코드를 작성하십시오.
import base64
import zlib
def run(code): exec(zlib.decompress(base64.b16decode(code)))
def enc(code): return base64.b16encode(zlib.compress(code))
위의 코드를 사용하여 다음과 같은 파일을 만듭니다.
f = open('something.py','w')
f.write("code=" + enc("""
print("test program")
print(raw_input("> "))"""))
f.close()
"something.py"파일 :
code = '789CE352008282A2CCBC120DA592D4E212203B3FBD28315749930B215394581E9F9957500A5463A7A0A4A90900ADFB0FF9'
"something.py"를 가져 와서 run(something.code)
파일에서 코드를 실행 하기 만하면 됩니다.
한 가지 트릭은 의도적으로 코드를 읽기 어렵게 만드는 것입니다. 문서화하지 마십시오. 필요한 경우 함수의 출력을 제공하는 것이지 작동 방식이 아닙니다. 변수 이름을 매우 넓게, 영화 참조 또는 반대되는 예를 만드십시오. btmnsfavclr = 16777215
여기서 " btmnsfavclr
"는 "배트맨이 좋아하는 색상"을 의미하고 값은 16777215
" ffffff
"또는 흰색 의 십진수 형식입니다 . 당신의 코드에 대해 성가신 사람들을 유지하기 위해 다른 스타일의 이름을 혼합하는 것을 잊지 마십시오. 또한이 사이트의 팁을 사용하십시오. 유지 관리 할 수없는 코드를 개발하기위한 11 가지 팁 .
파이썬 코드의 난독 화 및 축소 를 위해 다음 도구를 확인하십시오 .
- pyarmor, https://pypi.org/project/pyarmor/-16 진수 인코딩을 사용한 전체 난독 화; 분명히 변수 / 함수 이름의 부분적인 난독 화를 허용하지 않습니다.
- python-minifier, https://pypi.org/project/python-minifier/- 코드를 축소하고 함수 / 변수 이름을 난독 화합니다 (아래 pyminifier만큼 강하지는 않지만)
- pyminifier, https://pypi.org/project/pyminifier/- 함수, 변수, 리터럴의 이름을 난독 화하는 데 효과적입니다. pyarmor와 유사한 16 진 인코딩 (압축)을 수행 할 수도 있습니다. 문제 : 난독 화 후 코드에 구문 오류가 포함되어 실행되지 않을 수 있습니다.
--obfuscate 및 --gzip으로 실행할 때 pyminifier의 .py 출력 예 :
$ pyminifier --obfuscate --gzip /tmp/tumult.py
#!/usr/bin/env python3
import zlib, base64
exec(zlib.decompress(base64.b64decode('eJx1kcFOwzAMhu95ClMO66apu0/KAQEbE5eJC+IUpa27haVJ5Ljb+vakLYJx4JAoiT/7/+3c3626SKvSuBW6M4Sej96Jq9y1wRM/E3kSexnIOBZObrSNKI7Sl59YsWDq1wLMiEKNrenoYCqB1woDwzXF9nn2rskZd1jDh+9mhOD8DVvAQ8WdtrZfwg74aNwp7ZpnMXHUaltk878ybR/ZNKbSjP8JPWk6wdn72ntodQ8lQucIrdGlxaHgq3QgKqtjhCY/zlN6jQ0oZZxhpfKItlkuNB3icrE4XYbDwEBICRP6NjG1rri3YyzK356CtsGwZuNd/o0kYitvrBd18qgmj3kcwoTckYPtJPAyCVzSKPCMNErs85+rMINdp1tUSspMqVYbp1Q2DWKTJpcGURRDr9DIJs8wJFlKq+qzZRaQ4lAnVRuJgjFynj36Ol7SX/iQXr8ANfezCw==')))
# Created by pyminifier.py (https://github.com/liftoff/pyminifier)
이 출력은 여기에 표시된대로 40 줄 원본 입력 스크립트에 해당합니다 .
-------------------다음과 같이 코드를 마스킹합니다.
def MakeSC():
c = raw_input(" Encode: ")
sc = "\\x" + "\\x".join("{0:x}".format(ord(c)) for c in c)
print "\n shellcode =('" + sc + "'); exec(shellcode)"; MakeSC();
명확한 문구:
import os; os.system("whoami")
인코딩 :
Payload = ('\x69\x6d\x70\x6f\x72\x74\x20\x6f\x73\x3b\x20\x6f\x73\x2e\x73\x79\x73\x74\x65\x6d\x28\x22\x77\x68\x6f\x61\x6d\x69\x22\x29'); exec(Payload);
-------------------소스 코드 저장을 위해 truecrypt 볼륨 과 같은 간단한 것을 사용하는 것이 당신의 관심사 인 것처럼 보아야 할 수도 있습니다. USB 키에 암호화 된 파일을 생성하거나 전체 볼륨을 암호화 할 수 있으므로 (코드가 적합 할 경우) 하루가 끝날 때 키를 가져갈 수 있습니다.
컴파일하려면 독립 실행 형 실행 파일을 만들기 위해 PyInstaller 또는 py2exe 와 같은 것을 사용할 수 있습니다 . 정말로 더 나아가고 싶다면 더 많은 난독 화를 추가하기 위해 패커 또는 압축 유틸리티 를 살펴보십시오 . 이들 중 어느 것도 옵션이 아니라면, 즉시 읽을 수 없도록 최소한 스크립트를 바이트 코드로 컴파일 할 수 있습니다. 이러한 방법은 프로그램을 디버그하거나 디 컴파일하려는 사람의 속도를 느리게 할뿐입니다.
-------------------필자는 최근에이 블로그 게시물을 우연히 발견했습니다. AST를 사용하는 Python Source Obfuscation 에서 저자가 내장 AST 모듈을 사용하여 Python 소스 파일 난독 화에 대해 이야기합니다. 컴파일 된 바이너리는 HitB CTF에 사용되었으며 엄격한 난독 화 요구 사항이있었습니다.
개별 AST 노드에 액세스 할 수 있으므로이 접근 방식을 사용하면 소스 파일을 임의로 수정할 수 있습니다. 수행하는 변환에 따라 결과 바이너리는 난독 화되지 않은 소스와 정확히 동일하게 작동하지 않을 수 있습니다.
-------------------오피
https://github.com/QQuick/Opy
Opy는 광범위하고 실제 세계의 다중 모듈 Python 소스 코드를 무료로 난독 화합니다! 그리고 구성 파일을 편집하여 프로젝트별로 난독화할 것과 그렇지 않은 것을 선택합니다.
You can recursively exclude all identifiers of certain modules from obfuscation. You can exclude human readable configuration files containing Python code. You can use getattr, setattr, exec and eval by excluding the identifiers they use. You can even obfuscate module file names and string literals. You can run your obfuscated code from any platform.
게시 된 다른 옵션 중 일부와 달리 이것은 Python 2와 3 모두에서 작동합니다 ! 또한 무료 / 오픈 소스이며 다른 일부와 마찬가지로 온라인 전용 도구가 아닙니다 (비용을 지불하지 않는 한).
나는 여전히 이것을 직접 평가하고 있지만 초기 테스트는 모두 완벽하게 작동했습니다. 이것이 바로 제가 찾던 것 같습니다!
공식 버전은 독립 실행 형 유틸리티로 실행되며 원래 의도 된 디자인은 사용하려는 세부 정보 / 옵션을 정의하기위한 구성 파일과 함께 난독 처리하려는 디렉토리의 루트에 스크립트를 드롭하는 것입니다. 저는 그 계획이 마음에 들지 않았기 때문에 프로젝트에서 포크를 추가하여 대신 라이브러리에서 도구를 가져와 사용할 수 있습니다. 이렇게하면보다 포괄적 인 패키징 스크립트로 직접 롤링 할 수 있습니다. (물론 여러 py 스크립트를 bash / batch로 래핑 할 수 있지만 순수한 Python 솔루션이 이상적이라고 생각합니다.) 내 포크를 원본 작업에 병합하도록 요청했지만 그런 일이 발생하지 않는 경우 수정 된 버전의 URL은 다음과 같습니다.
https://github.com/BuvinJT/Opy
-------------------이를 수행하는 가장 좋은 방법은 먼저 .c 파일을 생성 한 다음 tcc를 사용하여 .pyd 파일로 컴파일하는 것입니다
. 참고 : Windows 전용요구 사항
- tcc
- 난독 화하다
- Cython
설치:
sudo pip install -U cython
.py 파일을 난독 화하려면 :
pyobfuscate.py myfile.py >obfuscated.py
.c 파일을 생성하려면
추가선택적init<filename>()
귀하의 평 파일 기능을cython --embed file.py
cp Python.h tcc\include
tcc file.c -o file.pyd -shared -I\path\to\Python\include -L\path\to\Python\lib
.pyd 파일을 app.exe로 가져 오기
코드를 난독 화하는 방법에는 여러 가지가 있습니다. 다음은 한 가지 예입니다.
(lambda _, __, ___, ____, _____, ______, _______, ________:
getattr(
__import__(True.__class__.__name__[_] + [].__class__.__name__[__]),
().__class__.__eq__.__class__.__name__[:__] +
().__iter__().__class__.__name__[_____:________]
)(
_, (lambda _, __, ___: _(_, __, ___))(
lambda _, __, ___:
chr(___ % __) + _(_, __, ___ // __) if ___ else
(lambda: _).func_code.co_lnotab,
_ << ________,
(((_____ << ____) + _) << ((___ << _____) - ___)) + (((((___ << __)
- _) << ___) + _) << ((_____ << ____) + (_ << _))) + (((_______ <<
__) - _) << (((((_ << ___) + _)) << ___) + (_ << _))) + (((_______
<< ___) + _) << ((_ << ______) + _)) + (((_______ << ____) - _) <<
((_______ << ___))) + (((_ << ____) - _) << ((((___ << __) + _) <<
__) - _)) - (_______ << ((((___ << __) - _) << __) + _)) + (_______
<< (((((_ << ___) + _)) << __))) - ((((((_ << ___) + _)) << __) +
_) << ((((___ << __) + _) << _))) + (((_______ << __) - _) <<
(((((_ << ___) + _)) << _))) + (((___ << ___) + _) << ((_____ <<
_))) + (_____ << ______) + (_ << ___)
)
)
)(
*(lambda _, __, ___: _(_, __, ___))(
(lambda _, __, ___:
[__(___[(lambda: _).func_code.co_nlocals])] +
_(_, __, ___[(lambda _: _).func_code.co_nlocals:]) if ___ else []
),
lambda _: _.func_code.co_argcount,
(
lambda _: _,
lambda _, __: _,
lambda _, __, ___: _,
lambda _, __, ___, ____: _,
lambda _, __, ___, ____, _____: _,
lambda _, __, ___, ____, _____, ______: _,
lambda _, __, ___, ____, _____, ______, _______: _,
lambda _, __, ___, ____, _____, ______, _______, ________: _
)
)
)
-------------------이 Python obfuscator를 사용해보십시오.
pyob.oxyry.com pyob.oxyry.c
__all__ = ['foo']
a = 'a'
_b = 'b'
def foo():
print(a)
def bar():
print(_b)
def _baz():
print(a + _b)
foo()
bar()
_baz()
번역됩니다
__all__ =['foo']#line:1
OO00OO0OO0O00O0OO ='a'#line:3
_O00OO0000OO0O0O0O ='b'#line:4
def foo ():#line:6
print (OO00OO0OO0O00O0OO )#line:7
def O0000000OOOO00OO0 ():#line:9
print (_O00OO0000OO0O0O0O )#line:10
def _OOO00000O000O0OOO ():#line:12
print (OO00OO0OO0O00O0OO +_O00OO0000OO0O0O0O )#line:13
foo ()#line:15
O0000000OOOO00OO0 ()#line:16
_OOO00000O000O0OOO ()#line:17
-------------------파이썬 스크립트를 난독 화하는 두 가지 방법이 있습니다.
- 각 코드 객체의 바이트 코드를 난독 화
- 파이썬 모듈의 전체 코드 객체를 난독 화
Python 스크립트 난독 화
파이썬 소스 파일을 코드 객체로 컴파일
char * filename = "xxx.py"; char * source = read_file( filename ); PyObject *co = Py_CompileString( source, filename, Py_file_input );
코드 객체를 반복하고 각 코드 객체의 바이트 코드를 다음 형식으로 래핑합니다.
0 JUMP_ABSOLUTE n = 3 + len(bytecode) 3 ... ... Here it's obfuscated bytecode ... n LOAD_GLOBAL ? (__armor__) n+3 CALL_FUNCTION 0 n+6 POP_TOP n+7 JUMP_ABSOLUTE 0
코드 객체 직렬화 및 난독 화
char *original_code = marshal.dumps( co ); char *obfuscated_code = obfuscate_algorithm( original_code );
래퍼 스크립트 "xxx.py"만들기, $ {obfuscated_code} 는 이전 단계에서 생성 된 문자열 상수를 나타냅니다.
__pyarmor__(__name__, b'${obfuscated_code}')
난독 화 된 Python 스크립트 실행 또는 가져 오기
이 래퍼 스크립트를 가져 오거나 실행할 때 첫 번째 명령문은 CFunction을 호출하는 것입니다.
int __pyarmor__(char *name, unsigned char *obfuscated_code)
{
char *original_code = resotre_obfuscated_code( obfuscated_code );
PyObject *co = marshal.loads( original_code );
PyObject *mod = PyImport_ExecCodeModule( name, co );
}
이 함수는 모듈 이름과 난독 화 된 코드의 두 가지 매개 변수를 허용합니다.
- 난독 화 된 코드 복원
- 원본 코드로 코드 개체 만들기
- 원본 모듈 가져 오기 (이렇게하면 Traceback에서 프레임이 중복 됨)
난독 화 된 바이트 코드 실행 또는 가져 오기
모듈을 가져온 후이 모듈의 코드 객체가 처음 호출 될 때 위 섹션에 설명 된 래핑 된 바이트 코드에서
첫 번째 연산
JUMP_ABSOLUTE
은 오프셋 n으로 이동합니다.오프셋 n에서 명령은 PyCFunction을 호출하는 것입니다. 이 함수는 오프셋 3과 n 사이의 난독 화 된 바이트 코드를 복원하고 원래 바이트 코드를 오프셋 0에 배치합니다.
함수 호출 후 마지막 명령어는 오프셋 0으로 다시 점프합니다. 이제 실제 바이트 코드가 실행됩니다.
Pyarmor 참조
-------------------다른 답변에서 언급했듯이 실제로 좋은 방법은 없습니다. Base64를 디코딩 할 수 있습니다. 바이트 코드는 디 컴파일 될 수 있습니다. 파이썬은 처음에는 그냥 해석이되었고 대부분의 해석 언어는 인간의 해석을 어렵게 만드는 것보다 기계 해석의 속도를 높이려고합니다.
Python은 난독 화되지 않고 읽기 쉽고 공유 가능하도록 만들어졌습니다. 코드 형식을 지정하는 방법에 대한 언어 결정은 여러 작성자의 가독성을 높이기위한 것이 었습니다.
난독 화 된 파이썬 코드는 언어와 실제로 맞물리지 않습니다. 코드를 난독 화 한 이유를 다시 평가하세요.
-------------------나는 그것이 오래된 질문이라는 것을 압니다. 난독 화 된 내 재미있는 "Hello world!"를 추가하고 싶을뿐입니다. Python 3 및 몇 가지 팁;)
#//'written in c++'
#include <iostream.h>
#define true false
import os
n = int(input())
_STACK_CALS= [ ];
_i_CountCals__= (0x00)
while os.urandom(0x00 >> 0x01) or (1 & True):
_i_CountCals__+= 0o0;break;# call shell command echo "hello world" > text.txt
""#print'hello'
__cal__= getattr( __builtins__ ,'c_DATATYPE_hFILE_radnom'[ 0x00 ]+'.h'[-1]+'getRndint'[3].lower() )
_o0wiXSysRdrct =eval ( __cal__(0x63) + __cal__(104) + 'r_RUN_CALLER'[0] );
_i1CLS_NATIVE= getattr (__builtins__ ,__cal__(101)+__cal__(118 )+_o0wiXSysRdrct ( 0b1100001 )+'LINE 2'[0].lower( ))#line 2 kernel call
__executeMAIN_0x07453320abef =_i1CLS_NATIVE ( 'map');
def _Main():
raise 0x06;return 0 # exit program with exit code 0
def _0o7af():_i1CLS_NATIVE('_int'.replace('_', 'programMain'[:2]))(''.join( __executeMAIN_0x07453320abef( _o0wiXSysRdrct ,_STACK_CALS)));return;_Main()
for _INCREAMENT in [0]*1024:
_STACK_CALS= [0x000 >> 0x001 ,True&False&True&False ,'c++', 'h', 'e', 'l', 'o',' ', 'w', 'o', 'r', 'l', 'd']
#if
for _INCREAMENT in [0]*1024:
_STACK_CALS= [40, 111, 41, 46, 46] * n
""""""#print'word'
while True:
break;
_0o7af();
while os.urandom(0x00 >> 0xfa) or (1 & True): # print "Hello, world!"
_i_CountCals__-= 0o0;break;
while os.urandom(0x00 >> 0x01) or (1 & True):
_i_CountCals__ += 0o0;
break;
수동으로 할 수 있습니다. 내 팁은 다음과 같습니다.
암호화 된 문자열 사용
eval
및 / 또는exec
사용
[ord(i) for i in s]
/''.join(map(chr, [list of chars goes here]))
간단한 암호화와 같은 / 복호화모호한 변수 이름 사용
읽을 수 없게 만들다
1 또는 True 만 쓰지 말고
1&True&0x00000001
;)다른 숫자 체계 사용
10 행에 "2 행"또는 while 루프에 "0을 반환"과 같은 혼란스러운 주석을 추가합니다.
사용하다
__builtins__
사용
getattr
및setattr
나는 교훈적인 방식으로 답을 쓸 것입니다 ...
먼저 Python 인터프리터에 입력합니다.
import this
그런 다음 this.py
Python 배포판의 Lib 디렉터리 에있는 파일 을 살펴보고 그것이 무엇을하는지 이해해보십시오.
그 후 eval
문서 에서 함수를 살펴보십시오 .
help(eval)
이제 코드를 보호하는 재미있는 방법을 찾았어야합니다. 그러나 그것은 당신보다 똑똑하지 않은 사람들에게만 효과가 있기 때문에 조심하십시오! (그리고 나는 공격적이지 않습니다. 당신이 한 일을 이해할만큼 똑똑한 사람은 그것을 되돌릴 수 있습니다).
-------------------Hello World Python 코드를 다음 사이트에 붙여 넣으십시오.
http://enscryption.com/encrypt-and-obfuscate-scripts.html
복잡한 암호화되고 난독 화되었지만 완전한 기능을 갖춘 스크립트를 생성합니다. 스크립트를 해독하고 실제 코드를 공개 할 수 있는지 확인하십시오. 또는 제공하는 복잡성 수준이 마음의 평화에 대한 요구를 충족하는지 확인하십시오.
이 사이트를 통해 생성 된 암호화 된 스크립트는 Python이 설치된 모든 Unix 시스템에서 작동해야합니다.
다른 방법으로 암호화하려면 자신 만의 암호화 / 난독 화 알고리즘을 작성하는 것이 좋습니다 (보안이 중요하다면) . 그렇게하면 당신 외에는 아무도 어떻게 작동하는지 알 수 없습니다. 그러나 이것이 실제로 작동하려면 많은 시간을 가진 사람이 악용 할 수있는 허점이 없는지 확인하기 위해 엄청난 시간을 투자해야합니다. 그리고 이미 유닉스 시스템에 자연스러운 도구 (예 : openssl 또는 base64)를 사용하고 있는지 확인하십시오. 이렇게하면 암호화 된 스크립트의 이식성이 더 높아집니다.
출처
https://stackoverflow.com/questions/7417014