【Golang入门】使用net基础库实现的多人文本聊天
服务端代码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768package mainimport ( "encoding/json" "fmt" "net" "sync")var ( Clients = make(map[string]net.Conn) ClientMu = &sync.Mutex{} MessageCh = make(chan []byte))func HandlerConn(conn net.Conn) { // 注册连接到map ClientMu.Lock() nickname := conn.RemoteAddr().String() Clients[nickname] = conn ClientMu.Unlock() defer fun ...
【GoLang入门】小初高进阶学习
结构体在 Go 语言中,结构体(struct)是一种复合数据类型,用于将多个不同类型的数据组合在一起,类似于其他语言中的类(class)或对象(object)的雏形。
基础定义,这个 Person 结构体包含两个字段:Name(字符串类型)和 Age(整数类型)。
1234type Person struct { Name string Age int}
创建结构体对象
1234567891011121314func main() { var p1 Person p1.Name = "张三" p1.Age = 18 fmt.Println(p1) // 另一种写法:使用字面量初始化 p2 := Person{Name: "李四", Age: 20} fmt.Println(p2) // 使用指针(推荐做法) p3 := &Person{Name: "王五", Age: 22} ...
【GoLang入门】幼儿园入门学习
变量定义Go中有很多种定义变量的方式,集百家之长,最标准的应该是先定义,后赋值。
注意:在Go中,局部变量定义了就必须使用,否则编译不成功
标准定义方式,关键字 变量名称 类型
12345678910111213package mainimport ( "fmt")func main() { // 先声明 var name string // 后赋值 name = "xpctf" fmt.Println(name)}
定义并赋值, 关键字 变量名 类型 = 值
12345678910package mainimport ( "fmt")func main() { var name string = "xpctf" fmt.Println(name)}
省略类型,Go会自动根据值来推断类型 关键字 变量名 = 值
这种定义方式是最常用,项目中使用最多的
12345678910package mainimport ( "fmt")fu ...
Docker学习笔记
Docker安装Centos卸载旧版
12345678sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
安装yum-utils和设置存储库
12sudo yum install -y yum-utilssudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装docker
1sudo yum install docker-ce docker-ce-cli contai ...
【原创】掌上高考专业分数线js逆向
需求分析:爬取掌上高考每一年的专业录取分数
声明:本文章只用于学习研究,禁止用于但不限于商业用途、批量爬取
抓包
因为换页要求登录,所以我们打开开发者工具以后点下一年就会重新发数据包
分析后发现这个数据包就是请求的数据,返回数据和请求包都有加密,请求包里有个signsafe参数
分析请求包
ctrl+shift+f全局搜索signsafe,发现有两个js文件包含signsafe
先点开最后一个看,格式化以后继续搜索signsafe,发现uri是sendsmscode的,继续看看另外一个包(猜测:算法应该一样的,直接扣这个应该也可以)
发现只要带有signsafe的都是p赋值的,直接在p赋值的地方打上断点,然后继续发送请求包分析
认真看一下js代码,发现是url进行了HmacSHA1加密,密钥是常量D23ABC@#56,直接使用python改写
signsafe加密代码
1234567891011import base64import hmacfrom hashlib import sha1def hash_hmac(key, code): hmac_code = hm ...
【原创】某查查协议头参数272a7bfd6c84f9233ae1逆向加密代码
环境:node.js(V8)
逆向过程略,代码如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319 ...
【原创】某易云音乐params和encSecKey参数逆向
环境:
Python 3.8.5node v16.11.1npm 8.0.0Google Chrome 95.0.4638.54PyCharm 2021.2.2
本示例以评论为例,其他接口一样可以使用
使用了ajax技术请求,所以可以使用跟栈的方式找到加密点,但使用全局搜索的方式更快
点进去下断点,确定是我们加密参数,因为params和encSecKey都来自bUM9D,所以我们在bUM9D的位置下断点
点击下一页断点确实断住了,而且是我们要的数据
看到了一个asrsea方法,但这个方法不熟悉,应该是js给加到window了,先看看参数
通过控制台输出,i8a可能就是要加密的数据;
bsB3x([“流泪”, “强”])、bsB3x(WX6R.md)、bsB3x([“爱心”, “女孩”, “惊恐”, “大笑”])这三个参数应该是固定的,使用了混淆,如果不是固定的我们取js代码就行
现在来看看asrsea函数,(我再写文章的时候才搜的,原本想水一下,结果。。。。没窥屏!!!)
继续,继续,继续
跟进去window.asrsea函数,可以在控制台直接输入window.asrs ...
Node.Js运行AES RSA加密缺少window的解决方法
Js逆向中,会遇到很多环境问题,比如navigator、document、window这些只有浏览器才有的,然后代码扣下来浏览器可以运行,在一些调试工具也可以运行,但是nodejs就是运行不了。
问过很多大佬, 他们说缺什么补什么,document和navigator就给一个空对象,window就给this,这样很多调试工具都可以用了,但是nodejs就是运行不了,报上面的错误。
在我不经意中居然解决了该问题,测试过nodejs和execjs都可以执行,就是window使用global变量
但是在js调试工具中报错:
总结如下:在调试工具中,window=this,在nodejs中,window=global。
电信光猫TEWA-708G超级管理密码破解
先把U盘插到光猫USB接口,然后登录普通账号,账号密码在光猫后面有写,网址:http://192.168.1.1:8080/login.html
登录成功以后按键盘的F12打开开发者工具,然后输入`http://192.168.1.1:8080/usbbackup.cmd?action=backupeble&sessionKey=${sessionKey}`
点击链接打开,不要管我的前后sessionKey不一样
如果 备份配置 按钮点击不了,把鼠标放在 备份配置 上右键检查
然后双击 disabled 点删除键就行(回车上面第二个键),打错字删除那个键,不是delete键
这时候可以点击 备份配置 了,点了以后直接会跳转到一个空白页面,url是这样的:http://192.168.1.1:8080/usbbackup.cmd?action=backup&subarea=usb1_1&set1_sessionKey=set1_sessionKey_214
这时候不要管,直接把U盘拔下来插上电脑,然后u盘里多了一个叫 e8_Confi ...
Django会话学习
HTTP被设计为”⽆态”,也就是俗称“脸盲”。 这⼀次请求和下⼀次请求 之间没有任何状态保持,我们⽆法根据请求的任何⽅⾯(IP地址,⽤户代理等)来识别来⾃同⼀⼈的连续请求。实现状态保持的⽅式:在客户端或服务器端存储与会话有关的数据(客户端与服务器端的⼀次通信,就是⼀次会话),所以引入以下技术:
cookie
session
不同的请求者之间不会共享这些数据,cookie和session与请求者⼀⼀对应。
cookiecookie是什么cookies 是浏览器为 Web 服务器存的⼀小信息。 每次浏览器从某个服务器请求页面时,都会自动带上以前收到的cookie。cookie保存在客户端,安全性较差,注意不要保存敏感信息。典型应用:网站登录
设置CookieDjango使用HttpResponse的set_cookie方法来设置对象,使用redirect重定向指定一个地址,用法:
123response = redirect(reverse('admin:index'))response.set_cookie(cookie名称, value='cookie ...