晒晒我家小院子

0%

基本格式

1
2
3
4
function getpwd(plaintext){  // 一定要先找到明文
;
return ciphertext // 返回格式有两种:Hex和base64
}

常见加密方式

1
2
3
4
5
MD5, SHA # 不可逆 # 常用
HMAC, RC4,
AES, DES, 3DES # 可逆 # 常用
Base64, Rabbit, PBKDF2/EvpKDF
RSA

chrome-F12

1
2
3
4
5
6
search
sensors # 设置经纬度
下断点
Breakpoints # 管理断点
Call Stack # 堆栈
抓包勾选Preserve log(保存日志),页面跳转,也能保存上一个界面的日志

工具网站

1
2
3
4
5
6
http://tool.chacuo.net/cryptdes
# 用来解析公钥(RSA加密),可获取key长度,模数,指数
# 公钥没有反斜杠'\',只有'/'
# 指数看0x,一般为0x10001,所以就是10001

# 雷电模拟器 3.63

哈希系列通杀

1
2
# CryptoJS.MD5('word')
# 哈希加密系列有一个固定值1732584193,可以直接搜索

AES加密

1
2
3
4
5
mode # 类型,常用CBC和ECB
padding # 常用Pkos7和Iso10126
IV # 一般为固定值,要选最初值
key # 一般为固定值
# IV和key都有Eno编码规则,如UTF8

RAS加密

1
2
3
4
5
6
指数:一般为10001
公钥:(很长)要找出来 # 1.上一个请求的返回值(getpublickey) 2.js文件中默认 3.js代码生成
# B64编码
# PKCS1指的每次生成值不一样
# 内容反转
# 内存反转

技巧

1
2
3
4
# 小块弹窗,右键检查源码找到目标网址,放入浏览器打开,会出现一个干净的登录界面,方便抓包
# 密码一般为哈希加密
# 遇到Encrypt加断点
# 方法有传参数,就可能是的

JS逆向工具

1
WT-JS_DEBUG  # 找安全版本,其他的好像有病毒

JS加密实例

1
2
3
4
中关村登录
pwd: 3b8aaa16fa213573513038281774d9c0 # wuyao666
# pwd : md5Password
# var md5Password = CryptoJS.MD5(password+"zol") + '';
1
2
3
4
今目标登录
password: a2c13e941f4f68fde8d92399ddeb3bf25111a434 # wuyao666
# var result = {}
# result.password = sha1(resultData.password)
1
2
3
4
5
6
7
8
9
10
11
12
升学e网通 # AES
password: "590d9a610747ab5392a8a164793516a8" # wuyao666
# password: i = (0, v.Encrypt)(i)
t.Encrypt = function(e) {
var t = n["default"].enc.Utf8.parse(e);
return n["default"].AES.encrypt(t, i, {
iv: o,
mode: n["default"].mode.CBC,
padding: n["default"].pad.Pkcs7
}).ciphertext.toString().toUpperCase()
}
# o = n["default"].enc.Utf8.parse("2017110912453698")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
有赞 // AES # 网站已经改了
Fiddler抓包
// 对password 加密
password: d.a.encrypt(e.password)
// 源码:
n = e.enc.Utf8.parse("youzan.com.aesiv")
i = e.enc.Utf8.parse("youzan.com._key_") # i在此处是key
var r = e.AES.encrypt(t, i, {
mode: e.mode.CBC,
padding: e.pad.Iso10126,
iv: n // 这个值很容易混淆,要找初始值,即enc.Utf8.parse()之前的值.
}).toString()
// 对ticket 加密
fingerPrint // 指纹,其实就是加密后的一个字符串
date:{
fingerPrint: t ? t + c.default.encrypt(r) : "", // a?b:c
youzanType: 2
}
// 也是AES加密
1
2
3
4
华特东方注册加密 # 都是AES
# password
# token
# tokens #参数unid
1
2
3
4
5
网页百度登录加密 # RSA
# token和codestring都是可以固定值的
# gid是随机的,随机数
# password是加密了的RSA,公钥通过请求获取 # password =
# 手机和网页端加密不一样
1
2
手机百度登录加密 # RSA
# l.password = window.encryptedString(r,l.password) # 前面明码经过了拼接
1
2
3
4
5
运动潮流单品交易平台 # 拼接+md5
# sign 加密了
# 搜索sign
# t.data.sign || (t.data.sign = Object(I["b"])(t.data))
# t.transformRequest = M : t.params.sign = Object(I["b"])(t.params)
1
2
# 京东登录 #RSA
# nloginpwd
1
2
# 微博 # RSA和SHA1
sp # e.sp = b; # sp是密码
1
2
# 享物说 # 滑动验证(一般都是假的,提交的请求包,没有这些参数值)
模拟器有时候会被识别为"高风险设备:伪造设备",就不会抓到真的包,需要用自己真的手机来抓包 # fengkong

系统编程

1
2
3
4
5
6
7
8
9
10
11
12
# 进程总结
# 程序运行在操作系统上的一个实例,就称之为进程。
# 进程需要相应的系统资源:内存、时间片、pid
from multiprocessing import Process

proc = Process(target=func, args=(1,), kwargs={'a': 'a'}, name='proc_1')
proc.start()
proc.is_alive() # 是否还活着
proc.join(timeout=10) # 等结束,或者等10秒
proc.terminate() # 强制关闭
proc.name
proc.pid

单例

1
2
3
4
5
6
7
# 简单案例
class A(object):
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = object.__new__(cls)
return cls._instance
1
2
3
# 应用场景
1. 资源共享:日志文件,应用配置
2. 资源控制:应用配置,日志文件,网站计数器,多线程池,数据库配置,数据库连接池

闭包

1
定义:在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包。

装饰器

1
2
3
# 用于有切面需求的场景
# 插入日志、性能测试、事务处理、缓存、权限的校验等场景
# 有了装饰器就可以抽离出大量的与函数功能本身无关的雷同代码并发并继续使用

Python 中 is 和==的区别?

1
2
is 通过id判断
== 通过value判断

谈谈你对面向对象的理解?

1
2
3
4
面向对象是相对于面向过程而言的。面向过程语言是一种基于功能分析的、以算法为中心的程序设计方法;
而面向对象是一种基于结构分析的、以数据为中心的程序设计思想。
在面向对象语言中有一个有很重要东西,叫做类。
面向对象有三大特性:封装、继承、多态。

Python 的内存管理机制及调优手段?

1
# 内存管理机制:引用计数、垃圾回收、内存池
1
2
3
4
# 1.引用计数
当一个 Python 对象被引用时,引用计数加1
当不再被一个变量,减1
当引用计数等于0时对象被删除。
1
2
3
4
5
6
# 2.垃圾回收
2.1 引用计数
当引用计数为0,则被回收 (对循环引用,失效)
2.2 标记清除
针对循环引用,先将循环引用摘掉,得出有效计数
2.3 分代回收
1
2
# 3. 内存池
用于管理对小块内存的申请和释放(小于256字节的,直接在内存池申请内存)
1
2
3
4
调优手段(了解)
1.手动垃圾回收
2.调高垃圾回收阈值
3.避免循环引用(手动解循环引用和使用弱引用)

内存泄露是什么?如何避免?

1
2
# 由于设计错误,失去对该段内存的控制,造成内存浪费。
# 有 __del__() 函数的对象间的循环引用是导致内存泄漏的主凶
1
2
3
# 避免
不使用一个对象时使用 del object 删除一个引用计数
可以通过 sys.getrefcount(obj) 获取对象的引用计数,根据返回值是否为 0 判断是否内存泄漏

1
日志以文本可以存储在“/var/log/”目录下后缀名为.log
1
2
# 查看服务占用的端口
netstat -anp | grep service_name
1
2
grep 是查找匹配条件的行
find 是搜索匹配条件的文件(找文件)
1
2
3
# Linux 重定向命令有哪些?有什么区别?
1. 重定向> 覆盖
2. 重定向>> 追加
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 10 个常用的 Linux 命令
pwd 显示工作路径
ls 查看目录中的文件
rm -f file1 # 删文件 -f 不给提示
rmdir dir1 # 删目录
groupadd group_name # 创建一个新用户组
groupdel group_name # 删除一个用户组
tar -cvf archive.tar file1 file2 dir1 # 创建一个非压缩的 tar包
tar -tf archive.tar # 显示一个包中的内容
tar -xvf archive.tar -C /tmp # 解压压缩包到/tmp目录下
# -c 压缩 -x 解压 -v 显示所有过程 -f 压缩包名字
tar -cvfj archive.tar.bz2 dir1 # 创建一个 bzip2 格式的压缩包
tar -xvfj archive.tar.bz2 # 解压一个 bzip2 格式的压缩包
tar -cvfz archive.tar.gz dir1 # 创建一个 gzip 格式的压缩包
tar -xvfz archive.tar.gz # 解压一个 gzip 格式的压缩包
1
2
3
4
5
6
7
# 关机
reboot # 重启
shutdown –r now # 重启,会给其他用户提示
shutdown -h 20:25 # 定时关机
shutdown -h +10 # 十分钟后关机
init 0 # 关机
init 6 # 重启