python笔记(一)

news2024/11/28 6:49:12

文章目录

    • 字节对象与字符转换
    • 动态爬虫实施辅助工具
    • python 部分内置方法示例:
    • python虚拟环境的创建与激活
    • 执行多个.py程序
    • 获取当前系统默认浏览器名称
    • 反编译小程序
      • PC端小程序(wxapkg)解密:
      • 反编译

字节对象与字符转换

data1 = b'abc' # bytes object
data2 = 'abc' # str object

## 相互转换
sb = bytes(data2 , encoding = "utf8") # str to bytes
# 或者:
sb = str.encode(data2 ) # str to bytes
bs = str(data1 , encoding = "utf8") # bytes to str
# 或者:
bs = bytes.decode(data1)
# 与python版本也有关系 2 3 版本执行结果 不一致

动态爬虫实施辅助工具

依赖 selenium Web应用程序测试的工具 ,转变思路可用来爬取js动态渲染的网页
谷歌的 chromedriver 驱动 (要使用其它浏览器下载相关driver 驱动)
bs4 也就是BeautifulSoup 用来解析html

python 部分内置方法示例:

class People(object):
    """注解:人类"""

    # 初始化函数
    def __init__(self, name):
        self.name = name

    # 析构函数,一般解释器会自动分配和释放内存,
    # 所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。
    def __del__(self):
        pass

    # print输出对象调用 print(people)
    def __str__(self):
        return "str函数被调用"

    # 直接使用对象时调用 people
    def __repr__(self):
        return "repr函数被调用"

    # 对象当做方法时调用,例people()
    def __call__(self, *args, **kwargs):
        print("call函数被调用")

    # 用于索引操作,可如字典般使用
    # 获取对象属性,people['name']
    def __getitem__(self, item):
        return getattr(self, item)

    # 设置对象属性,people['name'] = 'Jack'
    def __setitem__(self, key, value):
        setattr(self, key, value)

    # 删除对象属性,del people['name']
    def __delitem__(self, key):
        delattr(self, key)

    # 正常情况下,当我们调用类的方法或属性时,如果不存在,就会报错
    # 当对未定义的属性名称和实例进行点号运算时,就会用属性名作为字符串调用这个方法
    def __getattr__(self, item):
        if item == 'age':
            return 18

    # 会拦截所有属性的的赋值语句。如果定义了这个方法,self.arrt = value 就会变成self,__setattr__("attr", value)
    # 当在__setattr__方法内对属性进行赋值是,不可使用self.attr = value,因为他会再次调用self,__setattr__("attr", value),则会形成无穷递归循环,最后导致堆栈溢出异常
    # 应该通过对属性字典做索引运算来赋值任何实例属性,也就是使用self.__dict__['name'] = value
    def __setattr__(self, key, value):
        super().__setattr__(key, value)

    def __delattr__(self, key):
        super().__delattr__(key)


people = People('Jack')

print(people.__doc__)  # 注解:人类
print(People.__doc__)   # 注解:人类

print(people.__module__)    # __main__
print(People.__module__)    # __main__

print(people.__class__)  # <class '__main__.People'>
print(People.__class__)  # <class 'type'>

print(people.__dict__)  # {}
# {'__module__': '__main__', '__doc__': '注解:人类',
# '__init__': <function People.__init__ at 0x00000000037957B8>,
# '__del__': <function People.__del__ at 0x000000000D8A2A60>,
# '__str__': <function People.__str__ at 0x000000000D8A2AE8>,
# '__repr__': <function People.__repr__ at 0x000000000D8A2B70>,
# '__call__': <function People.__call__ at 0x000000000D8A2BF8>,
# '__getitem__': <function People.__getitem__ at 0x000000000D8A2C80>,
# '__setitem__': <function People.__setitem__ at 0x000000000D8A2D08>,
# '__delitem__': <function People.__delitem__ at 0x000000000D8A2D90>,
# '__getattr__': <function People.__getattr__ at 0x000000000D8A2E18>,
# '__setattr__': <function People.__setattr__ at 0x000000000D8A2EA0>,
# '__delattr__': <function People.__delattr__ at 0x000000000D8A2F28>,
# '__dict__': <attribute '__dict__' of 'People' objects>,
# '__weakref__': <attribute '__weakref__' of 'People' objects>}
print(People.__dict__)

print(People)  # <class '__main__.People'>
print(people)  # str函数被调用
people  # 啥也输出,不知道为啥
people()  # call函数被调用

print(people['name'])  # Jack
people['name'] = 'Tom'
print(people['name'])   # Tom
del people['name']
print(people['name'])   # None

print(people.age)   # 18

参考:https://www.jianshu.com/p/401eaf3941c1

python虚拟环境的创建与激活

系统环境:python3.7 win10,使用pthon自带的 venv

python -m venv [虚拟环境名称]

会在当前目录下生成一个虚拟环境同名的文件夹

激活虚拟环境

cd [虚拟环境名称]\Scripts
./activate
## 有些可以直接执行[虚拟环境名称]\Scripts\activate
## 但我在windows 下的 powershell报错,就按上面的方式执行了

关闭环境

## 同激活环境一样不过执行的是   deactivate
./deactivate

执行成功后命名行前面会有标识,如:
在这里插入图片描述

执行多个.py程序

import os
 os.system("python one.py")
 os.system("python two.py")
 os.system("python three.py")
 ...

获取当前系统默认浏览器名称

此代码是通过windows系统的注册表中查找

from winreg import HKEY_CURRENT_USER, OpenKey, QueryValueEx

reg_path = r'Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice'

with OpenKey(HKEY_CURRENT_USER, reg_path) as key:
    print(QueryValueEx(key, 'ProgId')[0])

反编译小程序

PC端小程序(wxapkg)解密:

#!/usr/bin/env python3
import hashlib
import struct
from Crypto.Cipher import AES

# 解密pc中拷出来的微信小程序


def unpad(s): return s[0:(len(s) - s[-1])]

# AES-128-CBC解密


def aescbcDecrypt(src, key, iv):
    aes_obj = AES.new(key, AES.MODE_CBC, iv)
    decrypt_buf = aes_obj.decrypt(src)
    return unpad(decrypt_buf)


def decdata(encfile, wxid):
    outfile = 'dec_'+encfile
    with open(encfile, 'rb')as file:
        data = file.read()
        l = len(data)
        if l < 6:
            print('file too small')
            return -1
        if not data.startswith('V1MMWX'.encode('utf-8')):
            print('file format error')
            return -2

        dk = hashlib.pbkdf2_hmac('sha1', wxid.encode(
            'utf-8'), 'saltiest'.encode('utf-8'), 1000, 32)
        iv = 'the iv: 16 bytes'
        if l > 1024+6:
            aesdata = data[6:1024+6]
            xordata = data[1024+6:]
        else:
            aesdata = data[6:]

        decout1 = aescbcDecrypt(aesdata, dk, iv.encode('utf-8'))

        if l > 1024+6:
            if len(wxid) < 2:
                xorkey = 0x66
            else:
                xorkey = wxid.encode('utf-8')[-2]
            ll = len(xordata)
            fmt = '%dB' % ll
            s = struct.unpack(fmt, xordata)
            decout2 = struct.pack(fmt, *(a ^ xorkey for a in s))
            poutf = open(outfile, 'wb')
            poutf.write(decout1)
            poutf.write(decout2)
            poutf.close()
        else:
            poutf = open(outfile, 'wb')
            poutf.write(decout1)
            poutf.close()

        print('decrypt ok,write file', outfile)
        return 0

    return 1


if __name__ == '__main__':
    print('start')
    fname = 'APP2.wxapkg'
    wxid = 'wxc07f9d67923d676d'
    decdata(fname, wxid)

反编译

# coding: utf-8
# py2 origin author lrdcq
# usage python3 unwxapkg.py filename

__author__ = 'Integ: https://github.com./integ'

import sys, os
import struct

class WxapkgFile(object):
    nameLen = 0
    name = ""
    offset = 0
    size = 0

if len(sys.argv) < 2:
    print('usage: unwxapkg.py filename [output_dir]')
    exit()

with open(sys.argv[1], "rb") as f:
    root = os.path.dirname(os.path.realpath(f.name))
    name = os.path.basename(f.name) + '_dir'
    if len(sys.argv) > 2:
        name = sys.argv[2]

    #read header
    firstMark = struct.unpack('B', f.read(1))[0]
    print('first header mark = {}'.format(firstMark))

    info1 = struct.unpack('>L', f.read(4))[0]
    print('info1 = {}'.format(info1))

    indexInfoLength = struct.unpack('>L', f.read(4))[0]
    print('indexInfoLength = {}'.format(indexInfoLength))

    bodyInfoLength = struct.unpack('>L', f.read(4))[0]
    print('bodyInfoLength = {}'.format(bodyInfoLength))

    lastMark = struct.unpack('B', f.read(1))[0]
    print('last header mark = {}'.format(lastMark))

    if firstMark != 0xBE or lastMark != 0xED:
        print('its not a wxapkg file!!!!!')
        f.close()
        exit()

    fileCount = struct.unpack('>L', f.read(4))[0]
    print('fileCount = {}'.format(fileCount))

    #read index
    fileList = []
    for i in range(fileCount):
        data = WxapkgFile()
        try:
         data.nameLen = struct.unpack('>L', f.read(4))[0]
         data.name = f.read(data.nameLen)
         data.offset = struct.unpack('>L', f.read(4))[0]
         data.size = struct.unpack('>L', f.read(4))[0]
        except:
            continue
        # print('readFile = {} at Offset = {}'.format(str(data.name, encoding = "utf-8"), data.offset))

        fileList.append(data)

    #save files
    for d in fileList:
        d.name = '/' + name + str(d.name, encoding = "utf-8")
        path = root + os.path.dirname(d.name)

        if not os.path.exists(path):
            os.makedirs(path)

        w = open(root + d.name, 'wb')
        f.seek(d.offset)
        w.write(f.read(d.size))
        w.close()

        print('writeFile = {}{}'.format(root, d.name))

    f.close()

使用方式:
pc端的wxapkg:先解密==》再反编译解包
手机中获取的wxapkg:直接反编译
解密:修改文件中的wxid 和wxapkg路径 直接执行文件
PC端解密

反编译:执行时wxapkg路径加在执行语句后面
示例:

 python zhao.py dec_APP2.wxapkg

注意:python的反编译没生效,用nodejs 来反编译

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/88312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机系统实验-BombLab

一.实验题目及目的 1.实验题目 程序运行在linux环境中。程序运行中有6个关卡&#xff08;6个phase&#xff09;&#xff0c;每个phase需要用户在终端上输入特定的字符或者数字才能通关&#xff0c;否则将会引爆炸弹。需要通过分析汇编代码&#xff0c;使用gdb调试等方式找到正…

oracle入门-19c 安装详细教程

我们知道学习一门技术&#xff0c;第一件事情就是搭建对应的环境。本教程将详细教大家如何安装oracle。 目录一、虚拟机创建二、挂载镜像、安装及系统配置三、 软件包传输四、数据库安装五、 图形化向导建库一、虚拟机创建 处理器数量根据自己的机器配置进行调整&#xff08;4 …

Android IPC机制

本文首发于个人博客 “胖蔡叨叨叨”&#xff0c;更多相关信息可点击查看《Android IPC机制》​​​​​​​ IPC IPC(Inter Process Communication) 进程间通信&#xff0c;是指系统中运行的不同进程间的信息交互过程。Android IPC通常用于应用间、或同应用不同进程间的数据通…

3分钟读懂数据可视化如何帮助企业智慧管理,提升管理水平

随着大数据时代的到来&#xff0c;企业管理的决策越来越倚重数据指标&#xff0c;通过数据指标了解公司运作的情况&#xff0c;产品生产销售情况&#xff0c;收入与支出情况等等&#xff0c;更大的作用是对商业趋势预测提供了决策依据&#xff0c;使公司提前布局未来&#xff0…

Q-Automation:基于ATX的自动化测试管理软件

Softing Q-Automation是基于ATX的自动化测试管理软件&#xff0c;用于测试电子控制单元&#xff08;ECU&#xff09;。该软件支持诊断协议层测试和诊断功能测试&#xff0c;并且只需填写Excel表格&#xff0c;即可实现半自动化测试需求&#xff0c;从而缩短了用户的测试周期。同…

2022年终Java编程技术总结

目录 00 总体脑图 第一章、基础篇 01 计算机基础 ## 1.1 操作系统 1.1.1 基本知识 略 1.1.2 常见Linux命令 目录文件内容搜索系统类网络权限cdcp/scpvi/vimfind: find . -name xxkillnetstat -anchmodlsmvcatgrep: ps -efgrep xxlsof: lsof-i:portmkdirrmtailwhereistopp…

web前端期末大作业 ——电影主题介绍 你好,李焕英 ——html+css+javascript网页设计实例

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 精彩专栏推荐&#x1f4…

Win11电脑蓝屏怎么办?Win11电脑蓝屏的修复方法

Win11电脑蓝屏怎么办&#xff1f;电脑蓝屏是最为常见的系统故障问题之一&#xff0c;当电脑出现蓝屏时一般分为可以开机以及无法开机的情况&#xff0c;针对这两种情况&#xff0c;下面小编分别准备了对应的解决方法&#xff0c;有需要的朋友们欢迎收藏慢慢看哦。 方法一&#…

家居类小红书达人投放总结,kol执行策略

在小红书平台上&#xff0c;许多品牌方都做了达人投放&#xff0c;但结果却反响平平&#xff0c;最后才发现是达人挑选出了问题&#xff0c;而发现这个问题的代价就是错失先机&#xff0c;也耗费大量成本来试错&#xff0c;今天为大家分享一下小红书达人投放总结以及超硬干货。…

多线程安全问题原理和4种解决办法

摘要&#xff1a;多线程访问了共享的数据,会产生线程安全问题。本文分享自华为云社区《多线程安全问题原理和解决办法Synchronized和ReentrantLock使用与区别》&#xff0c;作者&#xff1a;共饮一杯无。 线程安全问题概述 卖票问题分析 单窗口卖票一个窗口(单线程)卖100张票…

大数据学习 -- 利用Java API 将文件写入HDFS

利用API写入文件写入HDFS文件&#xff08;1&#xff09;将数据直接写入HDFS文件&#xff08;2&#xff09;将本地文件写入HDFS文件写入HDFS文件 类似于HDFS Shell里的hdfs dfs -put命令在net.zwh.hdfs包里创建WriteFileOnHDFS类 &#xff08;1&#xff09;将数据直接写入HDFS…

【记录】ChatGPT|注册流程、使用技巧与应用推荐(更新至2022年12月14日)

昨天&#xff0c;2022年12月13日&#xff0c;在下午和晚上&#xff0c;ChatGPT 就开始因为请求过多而写到一半就崩溃&#xff0c;出现network error&#xff0c;可见它的关注度确实是越来越可观了。 正好最近世界杯&#xff0c;有博客活动&#xff0c;干脆也总结一下 ChatGPT 目…

大白话讲懂word2vec原理和如何使用

前言 做自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;这个领域的小伙伴们肯定对word2vec这个模型很熟悉了&#xff0c;它就是一种最为常见的文本表示的算法&#xff0c;是将文本数据转换成计算机能够运算的数字或者向量。在自然语言处理领…

【Docker】Dockerfile从概念介绍到快速上手编写案例实战

本期目录1. Dockerfile介绍1.1 Dockerfile的重要性1.2 构建三步骤2. Dockerfile构建过程2.1 Dockerfile内容基础2.2 Dockerfile执行流程2.3 总结3. Dockerfile常用保留字指令3.1 Dockerfile常用保留字一览3.2 保留字讲解4. 案例演示-自定义CentOS镜像4.1 前期准备4.2 编写Docke…

黑白图片怎样上色?教你如何给黑白照片上色

平时我们在网上浏览照片时&#xff0c;就会经常看到一些黑白色的照片。自从前段时间的复古风出现之后&#xff0c;很多小伙伴都会给自己拍摄的一些照片加上黑白滤镜&#xff0c;让原本彩色的照片变成了黑白色的&#xff0c;那大家知道黑白照片怎么变成彩色照片吗&#xff1f;今…

xxljob 自动清理日志的业务逻辑,以及涉及到的文件

目录 1 需求2 实现3 JobLogFileCleanThread1 需求 xxljob定时任务,会产生很多的日志文件,那么他是如何自动清除的呢? 2 实现 我们自己的项目集成了xxljob之后,会在yml里面有一个配置 ### 执行器日志文件保存天数 [选填] : 过期日志自动清理, # 限制值大于等于3时生效; …

物联网通信技术第7章 自组织网络(非常全,持续更新)

目录 知识点要求 7.1自组织网络概述 7.1.1 自组织网络的定义&#xff08;掌握&#xff09; 7.1.2 自组织网络的特点 &#xff08;理解&#xff09; 7.1.3 自组织网络的应用 7.2 自组织网络的体系结构&#xff08;了解&#xff09; 7.2.1 节点结构 7.2.2 自组织网络的网…

微信小程序开发—入门到跑路(二)

1、学习目标 知识点名称知识点内容难度系数要求程度模板语法数据绑定、事件绑定、条件渲染、列表渲染2星掌握WXSS样式WXSS3星掌握配置操作全局配置、TabBar配置、页面配置、3星掌握网络请求和案例网络数据请求、本地生活案例3星掌握文章目录1、学习目标2、模板语法2.1、数据绑…

AVS-代码路径说明

训练 1 config.py里面有backbone的路径,这里最好写在外面&#xff0c;写成绝对路径 不然每个算法都要放如下三个与训练模型&#xff0c;会很占地方vggishxxx.pth resnetxxx.pth pvt_v2_xxx.py AVS/AVSBenchmark1/avs_ms3/config.py 本来pretrained_backbones/xxx.pth文件在AVSB…

【C++】STL——list的常用接口

list的常用接口 文章目录list的常用接口一、list的介绍二、list的使用1.list的构造2.迭代器的使用2.1.begin和end2.2.rbegin和rend2.3.范围for2.4.迭代器的分类3.list的元素访问函数3.1.front和back4.list的容量操作函数4.1.empty4.2.size和max_size5.list修改的相关函数5.1.pu…