About【python】
【Python】Installing Angr(附wheel file)
原文的地址:https://github.com/bannsec/angr-Windows
在之前就安装好了的z3的基础上, 所以搞这个东西也是蛮快的
1 | git clone https://github.com/Owlz/angr-Windows.git |
分解步骤一步一步来
1.git安装
(这一步是蛮简单的,打开到相应的目录下进行命令行的输入,之前git环境G掉了了,也不知道这个是怎么好的,大概是代理的原因)
先是在原来的C://python36的根目录下,使用git的方式将安装包放入到目录中去(如下图示)
2.cd angr-Windows
打开到Angr-Windows文件下,可以看到的是目录下有很多的wheel files
wheel files的简介:
wheel files(.whl文件)也叫轮子(wheel), 用于python分发(distribution)的标准内置包格式(standard built-package format),包含安装所需的所有文件和元数据(metadata)。.whl文件使用的是zip压缩 .whl文件还包含有关此wheel文件支持的Python版本和平台的信息。.whl文件格式是一种即装即用格式(ready-to-install format),允许在不构建源代码分发(without building the source distribution)的情况下运行安装包。
命名格式:
1 | {dist}-{version}(-{build})?-{python.version}-{abi}-{platform}.whl |
可以通过pip安装已经下载的.whl文件, pip install <filename>.whl
wheel的类型:
1).universal wheel
:包含了py2.py3-none-any.whl
任何操作系统和平台上都支持python2和python3
2).pure-python wheel
:包含py3-none-any.whl
或py2-none-any.whl
,但不能同时支持两者,在其它方面与universal wheel相同,但它会被标记为py2或py3而不是py2.py3标签。
3).platform wheel
: 支持特定的Python版本和平台。
创建wheel
1).将所有模块(python脚本)、包(包含模块的文件夹/目录)保存在父目录中。随意命名根目录,通常与项目相关
2).最好创建一个空的名为__init__.py文件,并将此__init__.py文件放在所有包目录和子包目录下。无需将其保存在根目录中。
3).创建一个名为setup.py的文件并将其放在根目录中。此脚本的内容至少应包括:distribution name, version number, and list of package names
4)转到运行python和pip命令的命令提示符,在提示符下更改目录并导航到放置setup.py的项目的根目录,执行下列命令( 扩展名为.whl的文件将在根目录下自动创建的子目录中创建,名为dist)
注:需提取安装wheel setuptools: pip install wheel setuptools
,在conda中默认是安装的
1 | python setup.py bdist_wheel --universal # universal wheel |
这里通过conda在虚拟环境base下创建一个wheel,取名为testwheel目录组织结构如下所示:
setup.py内容如下:
1 | import setuptools |
testwheel目录下的__init__.py是个空文件,math目录下的__init__.py内容如下:
1 | from .math_add import * |
math_add.py内容如下:
1 | def add3(a, b, c): |
math_sub.py内容如下:
1 | def sub3(a, b, c): |
执行如下命令生成wheel,此wheel仅限于在Python3上执行,将终端定位到setup.py目录下
执行完上述命令后会产生3个新的目录,build, dist, testwhell.egg-info,各个目录的内容如下所示,生成的whell在dist目录下,全名为testwheel-1.0.0-py3-none-any.whl
,只需将此文件分发出去,其他人安装后即能使用。
导入使用wheel
如果你想在项目中安装已经安装过的wheel文件,需要更新此wheel的版本号。如果版本号保持不变,pip将不会安装它。或者先卸载已安装的whell: pip uninstall testwheel
通过conda新建一个虚拟环境testwheel,用来测试上面生成的testwheel-1.0.0-py3-none-any.whl
,将终端定位到其它的test目录下,并将生成的wheel文件拷贝到此目录下,安装,执行结果如下图所示:
会将此wheel安装到anaconda3/envs/testwheel/lib/python3.8/site-packages/
目录下,如下图所示:
在tmp下添加一个test.py文件,用于测试wheel,内容如下:
1 | from testwheel.math import math_add, math_sub |
执行结果如下所示:可见正确的调用了wheel中的接口
如果需要反复的调整wheel的内容,需要反复的测试,又不想修改version number,一种方法是可先卸载已安装的wheel,然后再次安装新的wheel,如下图所示:也可使用–force-reinstall
3.pip install virtualenv
安装的是一个python的虚拟环境
之后设置指向的python.exe文件virtualenv --python=C:\Python36\python.exe angr
进入虚拟环境后angr\Scripts\activate
进入到这个文件内,将这个原来是在angr-Windows文件夹下的C++filt.exe文件放在这个angr的文件下
Then move the “c++filt” executable into your angr/Scripts directory. And yes, the order matters somewhat. Primarily I think capstone needs to be installed first, then the other wheel files in any order. Make sure you install the wheel files prior to attempting to install angr proper.
根据这个原文中的内容,要先使用pip安装好capstone
安装好了之后,就直接按照这个顺序安装z3
接着pyvex
最后要好长时间来安装angr
4.验证一下angr是否能够使用
太棒了,没有像之前一样报错。
【python】安装pillow的三种方法
pillow是python的图形界面库
M1 pip:
在Dos界面输入命令:pip install pillow
M2 download wheel file:
wheel源文件下载安装官网 https://pypi.org/
找到对应的版本下载
在pyhon目录下Dos界面输入命令:pip install <name>.amd64.whl
M3 pip with doubanio:
使用豆瓣提供的源
1 | pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com pillow |
记录一下
【python】常用方法
python逆序:
enc="ScDZC1cNDZaxnh/2eW1UdqaCiJ0ijRIExlvVEgP43rpxoxbYePBhpwHDPJ=="
print(enc[::-1])
python将字母转换成大写字母
三种方法upper() capitalize() title()
1 | str = "www.php.com" |
【python】利用setup.py安装
在安装secret的python模块包遇到的问题
直接下载安装包
打开之后有setup.py文件
在该目录下,cmd输入
1 | 1.python setup.py build |
【Python】有关pyc文件介绍及逆向
pyc文件是什么
pyc是一种二进制文件,是由Python文件经过编译后所生成的文件,它是一种byte code(字节码),可由python虚拟机直接执行。
py文件编译成pyc文件后加载速度更快而且提高了代码的安全性。pyc的内容与python的版本相关,不同版本编译的pyc文件不一样
py文件速生成pyc文件
python -m py_compile 1.py
pyc文件有什么用
py文件是可以直接看见python源码的,由于不可能把源码泄露,所以我们就需要将原来的py文件编译成pyc文件来保护源码。
另外生成的pyc文件时可以进行反编译的,然而不同版本编译后的pyc文件是不一样的,这主要是根据Python源码中所提供的opcode来决定。
pyc文件怎么生成
单个pyc文件的生成
- 命令行的生成
**python -m py_compile 1.py**
- 代码实现
**import py_compile**
1 | **py_compile.compile(r'H:/game/test.py')** |
compile()函数的语法:
1 | compile(file[, cfile[, dfile[, doraise]]]) |
file :表示需要编译的py文件的路径
cfile :表示编译后的pyc文件名称和路径,默认为直接在file文件名后加c 或者 o,(o表示优化的字节码)
dfile:指的是错误消息保存的路径
doraise :有两个值分别是true或false
如果为true时则会引发一个PyCompileError,否则如果编译文件出错,则会有一个错误,默认显示在sys.stderr中,而不会引发异常
批量生成pyc文件
- 代码实现
**import compileall**
1 | **compileall.compile_dir(r'H:/game') ##把game目录下以及其子目录下的py文件都编译为pyc文件** |
compileall()函数语法:
1 | compile_dir(dir[, maxlevels[, ddir[, force[, rx[, quiet]]]]]) |
dir: 表示编译文件的文件夹位置
maxlevels :表示需要递归编译的子目录的层数,默认是10层,即默认会把10层子目录中的py文件编译为pyc
ddir :表示错误消息保存的路径
force:当为true时表示会被强制编译成pyc文件,即使pyc文件是最新的依然会被强制编译一次
rx: 表示一个正则表达式,可以排除掉不想要的目录,或者只有符合条件的目录才进行编译
quiet:当为True时,在编译后不会再标准输出中来打印信息
pyc文件的格式
pyc文件的字节码
1 | 03f3 0d0a magic number表示python的版本信息; |
时间戳
时间戳的主要目的在于通过一定的技术手段,对数据产生的时间进行认证,从而验证这段数据在产生后是否经过篡改。
个人理解是,时间戳指的是对数修改的时间记录。类似你修改一个文件,而文件后面会保存你文件修改的时间,这个时间就是时间戳。
时间戳的协议:
- 简单的时间戳协议
- 线性链接协议
- 树形协议
- 二进制协议
- 线索认证树协议
- 分布式协议
pyc文件逆向的实例–[SUSCTF]DigitalCircuits
解题:
直接解压压缩包,看到是这样的文件,查看文件的详细信息
很容易看出是用python写的文件,并将python打包成exe的——用python的思路解包,及使用解 python的软件——pyinstxtractor-master(另附项目地址:https://github.com/extremecoders-re/pyi nstxtractor)
- python解包
在解包脚本的路径下输入cmd打开命令行,
解包后是这样的界面 同时会得到一个文件 在文件中找到需要恢复的字节码文件——DigitalCircuits.pyc,然而这个文件是一个这个文件是用 010editor打开 查看最上面一排(由于笔者操作太快,忘截图了),其缺少magic numbers(用来标记文件或者协议的 格式,很多文件都有幻数标志来表明该文件的格式。)和相关的文件识别属性。 stuct.pyc文件包含一个完整可用的首部,可以用来修复.pyc文件,即将stuct.pyc文件最上面一排cv到 DigitalCircuits.pyc文件,保存。 由于pyc文件是二进制文件,所以需要将这个二进制文件转成py文件(ps:uncompyle6,然而作 者太菜,先用队友推荐的在线转的工具)可以得到DigitalCirciuts的源代码
【Python】爬取网页视频(20230117)
you-get简易版
首先在python36下直接cmd 输入安装命令:pip install you-get
安装好了之后就直接在计划将视频放入的文件下输入cmd进行爬取命令的输入:you-get videourl
【Python】Z3求解器的结果输出(python)
1.安装和导包
1 | #安装 |
2.声明变量
1 | #变量是整数 |
3. 建立模型约束
1 | ##求解器 |
4.模型求解
1 | ##检查模型是否有解 |
5.补充
fraction类型(分数有理数)的数据可以直接转换成flaot类型
1 | d_float |
- Title: About【python】
- Author: Juana_2u
- Created at : 2023-10-14 12:19:57
- Updated at : 2023-10-14 14:50:20
- Link: https://juana-2u.github.io/2023/10/14/About【python】/
- License: This work is licensed under CC BY-NC-SA 4.0.