About【python】

Juana_2u 记录来时的路

【Python】Installing Angr(附wheel file)

img

img

原文的地址:https://github.com/bannsec/angr-Windows

在之前就安装好了的z3的基础上, 所以搞这个东西也是蛮快的

1
2
3
4
5
6
7
8
9
git clone https://github.com/Owlz/angr-Windows.git
cd angr-Windows
pip install virtualenv
virtualenv --python=C:\Python2.7-64bit\python.exe angr
angr\Scripts\activate
pip install <capstone>
pip install <z3>
pip install <pyvex>
pip install angr

分解步骤一步一步来

1.git安装

(这一步是蛮简单的,打开到相应的目录下进行命令行的输入,之前git环境G掉了了,也不知道这个是怎么好的,大概是代理的原因)

先是在原来的C://python36的根目录下,使用git的方式将安装包放入到目录中去(如下图示)

2.cd angr-Windows

打开到Angr-Windows文件下,可以看到的是目录下有很多的wheel files

img

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.whlpy2-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
2
python setup.py bdist_wheel --universal # universal wheel
python setup.py bdist_wheel # pure-Python wheel

这里通过conda在虚拟环境base下创建一个wheel,取名为testwheel目录组织结构如下所示:

img

setup.py内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
import setuptools
setuptools.setup(
name="testwheel",
version="1.0.0",
author="fengbingchun",
author_email="fengbingchun@163.com",
description="test wheel",
packages=setuptools.find_packages(),
url="https://github.com/fengbingchun",
license="MIT",
python_requires=">=3.8"
)

testwheel目录下的__init__.py是个空文件,math目录下的__init__.py内容如下:

1
2
from .math_add import * 
from .math_sub import *

math_add.py内容如下:

1
2
3
4
5
6
def add3(a, b, c):
print("call add operation: three parameters ...")
return (a+b+c)
def add2(a, b):
print("call add operation: two parameters ...")
return (a+b)

math_sub.py内容如下:

1
2
3
4
5
6
def sub3(a, b, c):
print("call sub operation: three parameters ...")
return (a-b-c)
def sub2(a, b):
print("call sub operation: two parameters ...")
return (a-b)

执行如下命令生成wheel,此wheel仅限于在Python3上执行,将终端定位到setup.py目录下

img

执行完上述命令后会产生3个新的目录,build, dist, testwhell.egg-info,各个目录的内容如下所示,生成的whell在dist目录下,全名为testwheel-1.0.0-py3-none-any.whl,只需将此文件分发出去,其他人安装后即能使用。

img

导入使用wheel

如果你想在项目中安装已经安装过的wheel文件,需要更新此wheel的版本号。如果版本号保持不变,pip将不会安装它。或者先卸载已安装的whell: pip uninstall testwheel

通过conda新建一个虚拟环境testwheel,用来测试上面生成的testwheel-1.0.0-py3-none-any.whl,将终端定位到其它的test目录下,并将生成的wheel文件拷贝到此目录下,安装,执行结果如下图所示:

img

会将此wheel安装到anaconda3/envs/testwheel/lib/python3.8/site-packages/目录下,如下图所示:

img

在tmp下添加一个test.py文件,用于测试wheel,内容如下:

1
2
3
4
5
6
7
from testwheel.math import math_add, math_sub
a, b, c = 10, 5, 2
print("add3:", math_add.add3(a, b, c))
print("add2:", math_add.add2(a, b))
print("sub3:", math_sub.sub3(a, b, c))
print("sub2:", math_sub.sub2(a, b))
print("test finish")

执行结果如下所示:可见正确的调用了wheel中的接口

img

如果需要反复的调整wheel的内容,需要反复的测试,又不想修改version number,一种方法是可先卸载已安装的wheel,然后再次安装新的wheel,如下图所示:也可使用–force-reinstall

img

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

img

安装好了之后,就直接按照这个顺序安装z3

img

接着pyvex

img

最后要好长时间来安装angr

img

4.验证一下angr是否能够使用

img

太棒了,没有像之前一样报错。

【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

img

M3 pip with doubanio:

使用豆瓣提供的源

1
pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com pillow

img

记录一下

【python】常用方法

python逆序:

enc="ScDZC1cNDZaxnh/2eW1UdqaCiJ0ijRIExlvVEgP43rpxoxbYePBhpwHDPJ=="

print(enc[::-1])

python将字母转换成大写字母

三种方法upper() capitalize() title()

1
2
3
4
5
6
7
8
9
str = "www.php.com"
print(str.upper()) # 把所有字符中的小写字母转换成大写字母
print(str.lower()) # 把所有字符中的大写字母转换成小写字母
print(str.capitalize()) # 把第一个字母转化为大写字母,其余小写
print(str.title()) # 把每个单词的第一个字母转化为大写,其余小写
WWW.PHP.COM
www.php.com
Www.php.com
Www.Php.Com

【python】利用setup.py安装

在安装secret的python模块包遇到的问题

直接下载安装包

img

打开之后有setup.py文件

img

在该目录下,cmd输入

1
2
1.python setup.py build
2.python setup.py install

【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文件的字节码

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
03f3 0d0a	magic number表示python的版本信息;

6206 b160 时间戳,编译的时间信息

63 Blockde的开头

后4字节0000 0000 :argcount: 参数个数

后4字节0000 0000: nlocals: 局部变量个数

后4字节1b00 0000: stacksize(栈空间大小)

后4字节4000 0000: flags: 特殊标志的flags

73:类型是string

3501 0000 字节长度(小端模式)

之后是opcode(操作码)

时间戳

时间戳的主要目的在于通过一定的技术手段,对数据产生的时间进行认证,从而验证这段数据在产生后是否经过篡改。

个人理解是,时间戳指的是对数修改的时间记录。类似你修改一个文件,而文件后面会保存你文件修改的时间,这个时间就是时间戳。

时间戳的协议:

  • 简单的时间戳协议
  • 线性链接协议
  • 树形协议
  • 二进制协议
  • 线索认证树协议
  • 分布式协议

pyc文件逆向的实例–[SUSCTF]DigitalCircuits

解题:

直接解压压缩包,看到是这样的文件,查看文件的详细信息

img

很容易看出是用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

img

安装好了之后就直接在计划将视频放入的文件下输入cmd进行爬取命令的输入:you-get videourl

【Python】Z3求解器的结果输出(python)

1.安装和导包

1
2
3
4
#安装
pip install z3-solver
#导包
from z3 import *

2.声明变量

1
2
3
4
5
6
7
8
9
10
11
12
#变量是整数
#逐一定义
a = Int('a')
b = Int('b')
#一起定义
a,b = Ints('a','b')
#变量为实数
##逐一定义
c = Real('c')
d = Real('d')
##一起定义
c,d = Reals('c','d')

3. 建立模型约束

1
2
3
4
5
##求解器
S = Solver()
##添加约束
s.add=(a+b==8)
s.add=(a-b==8)

4.模型求解

1
2
3
4
5
6
7
8
##检查模型是否有解
s.check()
#模型有解输出 sat;否则就是unsat
Out[14]:sat

#计算结果
s.model()
Out[15]:[a = 5,d = 3]

5.补充

fraction类型(分数有理数)的数据可以直接转换成flaot类型

1
2
3
4
5
d_float
Out[30]: Fraction(3, 1)

float(d_float)
Out[31]: 3.0
  • 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.