- 博客(81)
- 收藏
- 关注
原创 Python3.5源码剖析 | 字符串对象创建
首先需要明白,在Python3.5的源码里,我们操作的文本字符串是以unicode的形式存在的。 如果字符串中仅仅包含ASCII,那么会通过c文件中的PyUnicode_New函数进行创建,创建的结构体是PyASCIIObject,该结构体的内容如下: 仅ASCII的字符串初始化会把state中的ascii和compact都进行设置,其中的ascii用于表明字符串是否是纯ASCII,compact用于表明是否是紧凑型字符串,如果是紧凑型字符串,会仅申请一块内容地址用来存放结构和和数据(结构
2022-06-05 18:42:27
468
1
原创 JS逆向 | 瑞数四代补环境获取$_ts和eval
使用了Hook Cookie之后,很容易就定位到cookie生成点,堆栈从eval往上,就是首页HTML的call入口了。eval执行的这个_$xa就是VM文件中的很大的自执行函数,而且进去之后,一开始就会获取$_ts中的内容,那么这两个东西本地生成该怎么做呢?很简单,这个eval里的代码是通过HTML首页中的自执行函数和外链中的$_ts生成的,那么我们直接本地把它们拷贝下来运行就能得到了。 直接运行肯定是会报错的,那就补环境:w...
2022-03-19 20:46:36
3763
原创 H5的APP逆向方法
注:小肩膀新课程《安卓逆向百例》,讲解一百个APP的实战,1999¥。 现在的app开发有很多框架,不再是单纯的Java和so了。不同框架开发的app,有不同的逆向方法。1. 常见的Java和so2. 普通的H5 app3. uni-app4. react native app5. flutter6. ......本篇文章来简单聊一聊H5的app如何逆向。H5的app通常...
2022-03-16 09:25:42
7050
原创 JS逆向 | 瑞数四代入门指南
瑞数的难点在于繁琐,只要有耐心就可以解决。可是小白往往无法过掉最开始的反调试,也没办法定位到cookie加密的位置,更对瑞数没有基本的了解。无限debugger推荐使用右键单击‘永不在此暂停’,当然也可以本地替换(FD\chrome都可以)和清除定时器,但并不推荐。 再来看一张图,然后回答几个问题。 1.怎么知道rs的cookie是服务器返回的,还是本地生成的?看菜单栏中的HttpOnly,打上√的是服务器返回的,所以要扣的是8...
2022-03-16 09:24:33
7332
1
原创 chromium浏览器定制 | 随机canvas画布
许多人想看chromium随机canvas画布,那我就教一下大家。 canvas指纹检测网站: 在我们的定制浏览器之下,每次随机canvas和颜色: 首先,我们需要知道,在fingerprintJS中,检测canvas,使用的是如下代码:fillrect是用来规定大小的,fillstyle是用来改变颜色的。这里我讲讲fillrect:这里边一共四个参数,但是随机的时候数字不要过大,过大的话也会出问题,超出范围的画布会统一显...
2022-02-22 00:59:03
5996
原创 极验滑块加密JS分析(一)
声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!小肩膀教育2022零基础一站式安卓逆向安全教学直播课2月19日开课!还不报名?极验的滑块滑动之后可以很清晰地看到请求包:我们需要的就是w的值,直接定位到调用堆栈:一直向上跟就可以找到一个o值:在往上就可以看到一些加密参数生成的地方:var u = r[$_CAGEe(750)]() , l = V[$_CAGEe(342)](gt[$_CAGEe(209)]
2022-02-13 16:35:54
1015
原创 chromium浏览器定制 | 高匿名爬虫随机指纹
JavaScript的逆向内卷愈发严重,瑞数搞了许久也我头痛不已。我在《零基础一站式高级网络爬虫就业班》中讲了浏览器的指纹检测,也有不少网站要求补环境,相信不少同学都有所了解。补环境,补来补去就是模拟浏览器,爬虫总归是要获取数据的,何不从浏览器底层入手,直接魔改chromium,打造一个高匿名爬虫浏览器出来呢?我们使用的客户端浏览器其实和人是一样的,都具有独一无二的特征,如果只用一个浏览器频繁访问,势必会触发风险控制。那是否有方法避开浏览器指纹呢?其实前端的JavaScript计算浏...
2022-02-06 15:42:55
5519
原创 JS逆向 | 拼多多anti_content参数
声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!以下内容都是小肩膀教育之后爬虫课程会讲解的,感兴趣在文章末尾扫码联系购买课程。anti_content存在多种扣法,今天讲一种较为简单的方法。anti_content加密JS分析网页端是个AJAX,搜索我的书《反爬虫AST原理与还原混淆实战》,当然不要在这个网站买,盗版太多了,请支持正版。直接下拉在XHR页就能找到请求包,主要是其中的anti_content。全局搜索anti_content后,在
2022-01-23 12:48:30
3877
原创 JS安全防护算法与逆向分析——babel混淆JS代码
使用Babel操作AST抽象语法树混淆JS代码const parser = require("@babel/parser");const traverse=require("@babel/traverse").default;const t=require("@babel/types");const generator=require("@babel/generator").default;const fs=require("fs");const jscode=fs.readFileSyn
2020-05-17 14:15:44
1265
原创 JS安全防护算法与逆向分析——使用babel生成JS代码
const types=require("@babel/types");//生成节点,判断类型const generator=require("@babel/generator").default;//生成代码const fs=require("fs");/* function losenine(a,b){ var c=1000; var d=a+b+c; return "losenine"; }*/var node=types.
2020-05-17 13:15:57
435
原创 JS安全防护算法与逆向分析——webpack改写方案
webpack改写方案XHR断点我们发现要扣的代码特别多,而且循环嵌套,会引用其他包,需要的代码太多了,有八万多行。最外边是一个括号包含webpack,是一个数组,压入了许多数据。但是这些文件都是直接被压入的,里边导入的包没有运行。(window.webpackJsonp = window.webpackJsonp || []).push([[2], { "+Wzn": function(l, t, n) { "use strict"; n.d(t.
2020-05-15 23:03:11
2279
1
原创 JS安全防护算法与逆向分析——JS Hook
JS Hook声明:本教程从安全角度出发讲解,只为增加读者的安全知识,提升读者数据安全意识,以及对于病毒和钓鱼网站的防护能力。绝无其他任何目的与用途。一、JS Hook原理与作用JS Hook原理非常简单,现在将一个最简单的例子,比如有这样一个函数function test(a,b){ return a+b;}我们可以直接在console里边修改这个函数,比如如下这样:var _test=test;test=function(a,b){ console.lo
2020-05-14 21:20:27
1759
2
原创 JS安全防护算法与逆向分析——Chrome开发者工具
Chrome开发者工具声明:本教程从安全角度出发讲解,只为增加读者的安全知识,提升读者数据安全意识,以及对于病毒和钓鱼网站的防护能力。绝无其他任何目的与用途。一、打开开发者工具有时候网站为了反调试,会禁止你打开开发者工具,或者有的小说网站还会禁止你复制,这些都是通过JS做到了,因为JS就是用来和人交互的嘛。不过开发者工具可是我们逆向的基础,不打开可不行,打开开发者工具有以下几种方式,读者可以自行选择。1.F12打开开发者工具(有时候会被禁用)2.某个元素上点击右键检查(有时候会被禁用)
2020-05-14 16:30:36
747
原创 JS安全防护算法与逆向分析——淘宝登录JS加密算法
淘宝登录JS加密算法声明:本教程从安全角度出发讲解,只为增加读者的安全知识,提升读者数据安全意识,以及对于病毒和钓鱼网站的防护能力。绝无其他任何目的与用途。淘宝作为国内最大的网络零售商,对于用户信息安全的保护可谓固若金汤。本文将讲解淘宝在用户登录时如何将用户的个人信息加密以达到保护用户数据安全的目的。我们在淘宝的登录页面输入自己的用户名和密码以登录的时候,会发现在NETWORK选项卡中有一个POST请求包。我们向下翻滚以查看我们发送的数据,会发现它们已经面目全非,而且多出..
2020-05-12 15:27:24
3101
4
原创 JS安全防护算法与逆向分析——问卷星自写算法
问卷星自写算法声明:本教程从安全角度出发讲解,只为增加读者的安全知识,提升读者数据安全意识,以及对于病毒和钓鱼网站的防护能力。绝无其他任何目的与用途。在学校里经常会填写调查问卷,那这些调查问卷到底需要我们的什么信息呢?传输的时候是否会把我们的个人信息传输上去?再就是我们填写的选项到底是以怎样的形式传输的,让笔者为您详述。笔者为了测试,自己创建了一个问卷星,接下来我选择前两项,点击提交,抓包看看到底会传输什么数据。依然是我们的POST请求包,不过这次后边有一大堆的参数,我们来详细.
2020-05-10 16:33:27
829
原创 JS安全防护算法与逆向分析——新浪微博登录JS加密算法
新浪微博登录JS加密算法声明:本教程从安全角度出发讲解,只为增加读者的安全知识,提升读者数据安全意识,以及对于病毒和钓鱼网站的防护能力。绝无其他任何目的与用途。新浪微博作为国内最大的即使分享社交平台,其用户基数庞大,为了进一步维护网络社交环境,阻止机器人等无用用户涌入,微博必然会提高用户登录的门槛(增强其数据加密算法)以防范爬虫机器人的存在。可事实上,就算新浪微博再怎么将其防护算法复杂化,我们依然会看到我们的个人账户上出现一些垃圾粉丝(机器人),那它们是怎么做到登录的呢?微博又是如何应对它.
2020-05-10 14:16:59
1014
2
原创 10.Erlang 记录与宏文件
一、记录1.创建记录-record(person,{name,age=0,gender="none"}).2.读取记录start(N)-> NewPerson= #person{name=N}, pprint(NewPerson).pprint(N)-> io:format("~p ~p ~p",[N#person.name,N#pers...
2020-03-21 20:04:51
181
原创 9.Erlang 二进制操作
一,为什么使用二进制类型?使用低级别的编程更加可靠,而且相比于元组和列表更加节省空间。有时候大量结构化的数据必须在计算机之间相互移动,我们就需要确保数据尽可能高效传播,利用一切可以存储的位置,每个位置尽可能含有较多的信息。二,二进制类型1.内置函数转化二进制1>A={test,1,2,3,[1,2,3]}.{test,1,2,3,[1,2,3]}2> Bin1=t...
2020-02-26 09:51:48
726
原创 8.Erlang C/S模式
客户端/服务器模型实现:1.服务器提供给请求客户端数字2.客户端发送allocate,则服务器返回数字给客户端3.客户端发送dellocate,可以释放一个数字4.客户端发送stop,服务器停止活动服务器实现%%serverstart()-> register(server,spawn(?MODULE,init,[])).init()-> ...
2020-02-20 17:36:56
227
原创 7.Erlang 并发编程
Erlang的进程是轻量级的,它的生成,上下文切换和消息传递都是虚拟机来管理的。操作系统线程和Erlang进程没有任何关系,独立于操作系统底层。Erlang中每一个处理器或者核心处理一个操作系统线程,而Java每一个进程代表一个操作系统线程。进程传递消息,从发送进程堆复制到接受进程堆,避免了共享存储位置,每个进程都有副本。一,注意点:1.创建进程第三个参数是列表,这一点容易忽略s...
2020-02-20 17:09:27
302
原创 6.Erlang 处理文本
一,常用函数1.lists:nth/2 获取列表第N个数值lists:nth(3, [1, 2, 3, 4, 5]).nth(1, [H|_]) -> H;nth(N, [_|T]) when N > 1 -> nth(N - 1, T).2.string:tokens/2 按照指定分隔符分割字符串string:tokens("a-b-c-d-...
2020-02-12 12:00:53
324
原创 5.Erlang 使用列表处理数据库
-module(db).-compile(export_all).new()->[].destory(_Db)->ok.write(Key,Element,Db)-> lists:keystore(Key,1,Db,{Key,Element}).delete(Key,Db)-> lists:keydelete(Key,1,Db).re...
2020-02-11 22:54:55
157
原创 4.Erlang 错误处理
一,运行错误1.function_clause:无模式匹配2.case_clause:case误模式匹配3.if_clause:if没有模式匹配4.badmatch:变量已经被绑定5.badarg:参数错误6.undef:没有函数7.badarith:算术运算错误二,处理错误1> try (X=3) of Val->{normal,...
2020-02-11 21:10:15
629
原创 3.Erlang 递归和尾递归
一,递归1.将列表里的元素都+1bump([])->[];bump([H|T])->[H+1|bump(T)].2.求平均数sum([])->0;sum([H|T])->H+sum(T).len([])->0;len([_|T])-> 1 + len(T).average(T)->sum(T)/length(T).3....
2020-02-11 20:55:34
399
原创 2.Erlang 输入输出
一,输入读取一行字符串或原子1> io:get_line(">>>").>>>hello"hello\n"2> io:get_chars(">>>",3).>>>hello"hel"读取Erlang项元7> io:read(">>>").>>>...
2020-02-11 19:04:48
361
原创 1.Erlang 基础
一,整数1.Base#Value 可以表示不是十进制的数整数,比如2#1010代表二进制16#EA代表十六进制2.表示字符的ASCII数值,可以使用$character的形式,比如$a $A $\n3.数学运算符/ 浮点除法div 整数除法rem 整数取余二,原子1.小写字母开始或者是单引号括住2.字母数字下划线和@以及.都是有限的开始符号3.如...
2020-02-11 18:52:12
137
原创 PyQt5打包出错:pyinstaller failed to execute script or not find or load the QT platform plugin “windows”
困扰一整天,试验找出最终解决方案:pyinstaller --hidden-import=queue --path=D:\Anacoda\Lib\site-packages\PyQt5\Qt\bin -w -F main.py注:--path为你自己的QT路径
2019-08-09 18:05:07
353
原创 c语言:矩阵相乘
#include <stdio.h>int main(){ int a[4][3] = { {1,2,3}, {4,5,6}, {7,8,9}, {1,2,3}}; int b[3][3] = { { 1,2,3 }, { 4,5,6 }, {...
2019-05-06 00:52:54
3516
原创 Twisted微框架Klein源码阅读(一)
from klein import run, route@route('/')def home(request): return 'Hello, world!'run("localhost", 8080)首先进入其Klein.route#route是Kelin类下的一个方法route = _globalKleinApp.route_globalKleinApp =...
2019-04-12 09:16:41
452
1
原创 python:dict.copy()
dict1 = {'Name': 'Zara', 'Age': [0,0,0]}""" dict.copy() 对于一级目录是深拷贝,二级目录浅拷贝,浅拷贝就是引用 浅拷贝的话,改变子对象,父对象也改变"""dict2 = dict1.copy()print('dict2',dict2)#一级目录相互独立dict2['Name']='lose'print(...
2019-04-12 08:33:06
1078
原创 Java:final关键字
1.final作为关键字,表示不可变的2.final修饰的类无法被继承3.final修饰的方法无法被覆盖4.final修饰的变量一旦赋值后不可覆盖5.final修饰的引用不能更改为其他引用,但是引用内部可以改变6.final常常与static连用,表示不可改变的常量,例如 public final static double pi=3.1415926;packa...
2019-04-07 15:52:17
102
原创 Java:static关键字
带有static的方法,其实既可以采取类名的方式,也可以采取引用的方式访问但是采用引用,实际上访问的时候和引用的对象无关所以带有static的方法建议使用类名的方式访问什么时候成员变量使用静态变量?所有对象这个属性的值都是一样的时候,节省内存开销静态代码块——类加载时期public class Constract { static { System.out.pr...
2019-04-07 15:21:36
104
原创 Java: this关键字
this关键字:this是一个引用,是一个变量,this变量中保存了指向自身的内存地址,this存储在JVM堆内存 每一个Java对象都有一个this,各个不同 this在多数情况下可以省略不写 this不能使用在带static的方法中,如果想访问就在方法里new一个package Test;public class Constract { public static void...
2019-04-07 14:58:33
1758
1
原创 Java:构造方法
Java构造方法1.构造方法不需要返回值类型,也不能写void,如果加上void,这个方法就变为普通方法了2.构造方法的方法名和类型名字一样3.构造方法作用是创建对象 创建对象的同时,初始化实例变量的内存空间,因为实例变量也叫对象变量,没有对象就没有对象变量。也就是会把实例变量赋初始值。是在构造方法执行过程中赋值。4.普通方法的调用 方法符中有static,通过类型.方法...
2019-04-06 16:27:30
469
原创 Django通过字段获取关联模型
#根据字段获取关联表filter_field_obj=self.model._meta.get_field(filter_field)print('filter_field_obj:',filter_field_obj)print(type(filter_field_obj))if isinstance(filter_field_obj,related.RelatedField): ...
2019-04-06 11:16:48
521
原创 Django权限组件
Django权限可以模型可以分为三个User,Role,Permission。一个用户可以有多个角色,一个角色可以有多个权限,一个权限也可以赋予多个角色,而实际上权限就是限制用户访问某些页面,所以权限实际上就是URL,所以建立如下表。from django.db import models# Create your models here.class Permission(model...
2019-04-06 11:09:13
409
原创 web主机托管
主机托管服务要想拥有网站,必须要有服务器机房,域名,或者购买网络宽带。很少有人有这么多精力去打理,于是有了主机托管服务,用户只需要提供内容即可,硬件设施由商家提供。专用托管:从网络服务商那里租用专用服务器。虚拟主机托管:也叫共享主机托管,起因是一些人的网站比较小,不需要专门的网络服务器,所以服务商提供了一个服务器上托管成百上千个网站的服务。这并不是说这些网站都是一个PC机器处理...
2019-04-01 19:36:02
270
原创 Lisp:计算黄金分割率
黄金分割率是变换x--->1+1/x的不动点,我这里把不动点的误差控制在0.0001#lang racket(define (test guess) (define (enough x y) (< (abs (- x y)) 0.0001)) (define (try guess) (let ((next (+ 1 (/ 1 guess)))) ...
2019-03-28 23:13:27
688
原创 C语言scanf踩坑
关于scanf的这一点真是千篇阅尽不见人言,只能自己踩坑踩出来:)用下面的scanf函数输入数据,使a=2, b=76, x=8.4, y=91.02, c1='U', c2='u'。问在键盘上如何输入?#include <stdio.h>int main() { int a, b; float x, y; char c1, c2; scanf("a=%d...
2019-03-21 17:41:27
414
原创 Lisp:素数检测
寻找因子检测素数的一种方法就是找出它的因子,用从2开始的连续整数检查他们能否整除n如果n不是素数,必然有一个小于或者等于sqrt(n)的因子。#lang racket(define (small-divisor n) (find-divisor n 2))(define (find-divisor n test-divisor) (cond ((> (square ...
2019-03-14 23:40:31
1273
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人