pyinstaller打包的exe转为源代码
pyinstaller打包的exe转为源代码
pyc⽂件(字节码)
如何⽣成pyc⽂件
wwwblogs/zhangqunshi/p/6657208.html
blog.csdn/weixin_30614587/article/details/97230135
⽅1  命令⾏
python -m example.py
⽅2
import py_compile
py_compilepile('example.py')
⽅3 将⽬录下的py⽂件都转为pyc⽂件
import compileall
compileallpile_dir(r'/path')
⽅4 命令⾏将⽬录下的py⽂件都转为pyc⽂件
python -m compileall <dir>
但发现直接运⾏代码后有⼀个__pycache__⽂件夹中会pyc⽂件,这和这⼏种⽅法的结果是⼀样的.
pyo⽂件是 pyc⽂件的简化版
python -o -m example.py
python -oo -m example.py
-O参数表明要⽣成更加紧凑的优化后的字节码, 这样⽣成的字节码⽂件后缀名为.pyo⽂件。
-OO会进⼀步移除-O选项⽣成的优化后的字节码⽂件中的⽂档字符串,⽣成的⽂件后缀名仍然为.pyo⽂件。
如何运⾏pyc⽂件
发朋友圈烟花的文案
www.pynote/archives/2342
⽅法
python  example.cpython-39.pyc
如何再转为py⽂件
blog.csdn/duohuanxi/article/details/114799153
/project/uncompyle6/
uncompyle6 -o example.py example.pyc
Error: uncompyle6 requires Python 2.6-3.8
我的是python3.9就⽆法演⽰了
字节码与机器码
blog.csdn/qq_35810838/article/details/99294636
字节码与机器码都是⼆进制⽂件即01组成的,但⽤notepad打开会发现是字母,这是notepad的问题.
python运⾏原理
→→
源代码py⽂件字节码pyc⽂件结果, pyc⽂件通过解释器得到结果
python并不是每次都需要转换字节码,解释器在转换之前会判断代码⽂件的修改时间是否与上⼀次转换后的字节码pyc⽂件的修改时间⼀致,若不⼀致才会重新转换。即运⾏⼀遍后⽣成pyc⽂件,以后每次运⾏,进⾏的只是将pyc输⼊解释器得出结果
python将源代码翻译为字节码,字节码通过解释器获得结果,并不会⽣成机器码,但c语⾔会⽣成机器码即exe⽂件
从exe获取源码
reverseengineering.stackexchange/questions/160/how-do-you-reverse-engineer-an-exe-compiled-with-pyinstaller
PE⽂件的全称是Portable Executable,意为可移植的可执⾏的⽂件,常见的EXE、DLL、OCX、SYS、COM都是PE⽂件,PE⽂件是微软Windows操作系统上的程序⽂件(可能是间接被执⾏,如DLL)
⾮托管代码反编译后是汇编语⾔, 托管代码反编译是⾼级语⾔
⾮托管代码就是根据不同的系统,不同的cpu进⾏编程,⽤来适配cup和操作系统
托管代码,⽐如C# 通过编译器⽣成中间语⾔,但是中建语⾔仍然需要编译成本地cup能执⾏的机器代码,这部分功能由⼀个运⾏在特定软件系统来完成。这个软件系统被称之为虚拟机。只需要为每种操作系统和cpu架构提供⼀个虚拟机。就可以让⼀个应⽤程序不加修改的跑在不同操作系统上,拥有不同cpu架构的计算机上。运⾏在这种虚拟机上的代码成为托管代码
blog.csdn/m0_37552052/article/details/88093427
blog.csdn/tymatlab/article/details/80511709
blog.csdn/ZH013/article/details/105116715
/project/pydecipher/
抖音怎么置顶自己视频⽅1
通过 pydecipher 将 exe 转为 pyc
通过 uncompyle6 将 pyc 转为 py
⽅2
通过pyinstxtractor 将 exe 转为 pyc
通过 uncompyle6 将 pyc 转为 py
pip install pydecipher报错 error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Tools\\MSVC\\14.28.29910\\bin\\HostX8 6\\x64\\cl.exe' failed with exit status 2
pydecipher有⼀句话:可以在mac与linux的python3.8上运⾏,但windows不清楚,理论应该可以。
后⾯我尝试可以⽤⽅2,所以就放弃这种⽅法了。
实例(⽅2)
写⼀个test.py⽂件
下载pyinstxtractor.py
codechina.csdn/mirrors/extremecoders-re/pyinstxtractor?utm_source=csdn_github_accelerator
打包py转为exe pyinstaller test.py 在⽣成的dist⽂件下的test⽂件夹下会有
exe转为pyc, 将⽣成的exe拿出来与pyinstxtractor.py放在同⼀级⽂件下 python pyinstxtractor., 在⽣成的_extracted⽂件夹下会有test.pyc
pyc转为py,跳转到_extracted⽂件夹中 uncompyle6 -o test.py test.pyc
如何避免被反编译
dt.digitser/zh-CN/applet/cython_file/index.html
www.jianshu/p/4a0be62ee3e2
blog.csdn/qq_39498924/article/details/101292339
www.zhihu/question/347425323/answer/834691490
yshblog/blog/117
混淆代码、加密代码(安装cython将py⽂件转为pyd⽂件)
但貌似pyd也就是⼀种dll,也可以被反编译。
pyd⽂件是dll⽂件吗?
/3/faq/windows.html#id6
Yes, .pyd files are dll’s, but there are a few differences. If you have a DLL named foo.pyd, then it must have a function PyInit_foo(). You can then write Pyth on “import foo”, and Python will search for foo.pyd (as well as foo.py, foo.pyc) and if it finds it, will attempt to call PyInit_foo() to initialize it. You do not link y our .exe with foo.lib, as that would cause Windows to require the DLL to be present.
Note that the search path for foo.pyd is PYTHONPATH, not the same as the path that Windows uses
to search for foo.dll. Also, foo.pyd need not be presen t to run your program, whereas if you linked your program with a dll, the dll is required. Of course, foo.pyd is required if you want to say import foo. In a DL L, linkage is declared in the source code with __declspec(dllexport). In a .pyd, linkage is defined in a list of available functions.
是的,但还是有些区别。
foo.pyd必须有函数PyInit_foo()。import foo 将foo.pyd导⼊时,python会寻foo.pyd(也会寻foo.pyc或foo.py,假设只有foo.pyd⽂件),到后导⼊就要调⽤PyInit_foo()对其进⾏初始化。
不要将exe与foo.lib链接,否则windows会要求foo.dll存在。
foo.pyd的搜寻路径与foo.dll是不同的。
dll的链接在源代码中的__declspec(dllexport),pyd的链接在函数中。
cpython与cython
zhuanlan.zhihu/p/65512422
www.tutorialspoint/what-is-the-difference-between-cython-and-cpython
/
每加仑等于多少升cpython是⽤c实现的python,jython是java实现的python,IronPython是.NET实现的python,这些都是解释器。
cython是⼀个静态编译器,是cpython的⼀个扩展,可以编译cpython解释器下的代码,⽽不能⽤于编译其他解释器下如jython的代码。
LLVM
www.infoworld/article/3247799/what-is-llvm-the-power-behind-swift-rust-clang-and-more.html
Mozilla Rust
Apple Swift
Jetbrains Kotlin
LLVM是Swift language creator Chris Lattner创建的⼀个开源项⽬,LLVM使得创建⼀门新语⾔以及提升现有语⾔很容易。
Swift使⽤LLVM作为其编译器框架;Rust使⽤LLVM作为其⼯具链的核⼼组件;Clang编译器及C/C++编译器都有LLVM版本;Mono 是.Net的⼀个开源实现,可以选择⽤LLVM编译;Kotlin是⼀种JVM语⾔,现在正在开发⼀种Kotlin Native使⽤LLVM编译。
编译原理
东北⼤学 编译原理
⾼级语⾔、汇编语⾔、机器语⾔之间的转换:
⾼级语⾔1⾼级语⾔2
⾼级语⾔机器语⾔
⾼级语⾔汇编语⾔
汇编语⾔⾼级语⾔
汇编语⾔机器语⾔
机器语⾔汇编语⾔
编译程序:⾼级语⾔翻译成等价低级语⾔
源语⾔——编译程序——⽬标语⾔——运⾏程序——结果,编译⼀次后,每次只需要运⾏⽬标语⾔即可,如c语⾔编译为exe
编译程序:⾼级语⾔直接运⾏得到结果
源语⾔——解释程序——结果(python有逐⾏解释与整体解释之分)
源语⾔——词法分析——语法分析——语义分析——优化处理——⽬标代码⽣成——⽬标语⾔,中间的五个程序会不断的与错误处理程序和符号表管理程序交互。
源语⾔——词法分析——单词串TOKEN——语法分析——语法树——语义分析——语义树——优化处理——优化语义树——⽬标代码⽣成——⽬标语⾔,⽬标语⾔可以⽤汇编语⾔或机器语⾔。
以语义树为界,将整个过程分为两部分,源语⾔——前端——中间代码——后端——⽬标语⾔
int  a ,b ;
b = a +2*5;
词法分析:识别原程序中的单词并分类
关键字:int
标识符:a,b
常数:2,5
界符:,  ;=  +  *
语法分析:组词成句及语法错误检查
语义分析:分析语法成分的语义特征
→→→→→→
cplasf符号表
名字类型种类地址
a    int    变量  pointer1
b    int    变量  pointer2
地址:指向符号在数据区存储的位置
四元式或语义树来描述语义信息
优化:提⾼⽬标程序的质量,降低存储空间。常数合并
约翰塞纳⽬标代码:
万里悲秋常作客下一句

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。