0%

爬虫

在上文中较为详细的介绍了指纹、设备指纹的常规获取与获取指纹环境监测,本节将详细的了解一下

浏览器指纹在反爬虫领域的应用,Android分析暂且搁置(其实是我也并不精通,pc端比较熟悉一点)

阅读全文 »

爬虫

认识指纹

什么是指纹

设备指纹、浏览器指纹也是同理根据软硬件信息,设备版本、设备操作系统等差异性从而生成唯一的设备指纹。

人的手有手指、手掌握纹,通过凹凸规则、分布状态的差异造就了相对其独一无二的特征。

阅读全文 »

爬虫

在做爬虫的时候,很多时候都会遇到较成熟成体系的安全产品。更好的”认识”它,对于解决有至关重要的帮助。以下一起来了解一下网站常见防护产品及特征

声明:本节不涉猎任何实际的产品破解,仅介绍其特征与辨别方式或思路。以下仅根据个人现所了解暂划分为一线、二线等。

一线

学习的对象,自研产品。安全系数高,分析较困难

ali、akamai、jd、pdd、google(含无感验证码)、各大银行支付接口

ali滑块

阿里云验证码: https://help.aliyun.com/product/28308.html

控制台中有g.alicdn.com字样,其中/后为版本号

akamai

主要在tls指纹进行相关加密

jd

自写的虚拟机

pdd

Web pack 打包 + 风控

google(含无感验证码)

5s 盾 + 谷歌验证码

绕过方案与线索

image-20210825014317964

二线

可敬的对象

加密与代码保护:瑞数信息(瑞数)、创宇超防(加速乐)、

验证码:极验、数美、五秒盾、易盾、顶象

加密与代码保护

瑞数信息(瑞数)
  1. 未带cookie访问首先是一段神奇的页面,如下图所示

特征:

1.

一长段的:content。有点类似于ob的大数组

script标签中带有 r=“m”的字样

执行加密函数1,函数名为 _$xx(xxx)

执行加密函数2(实际加密处)

  1. 无比恶心的乱码

ddddd

  1. 动态js

  2. 版本号

首数字开头的编号,编号常见的有4、5、6代

创宇超防(加速乐)
  1. 未带cookies访问,先是一段神奇的JS,设置cookie。如下图所示

实际内容如下图所示

  1. 魔改ob

    用于cookies拼接

验证码

极验

geetest(极验)官网:https://www.geetest.com/

demo:https://www.geetest.com/demo/

数美

官网:https://www.ishumei.com/

体验:https://www.ishumei.com/trial/captcha.html

网易易盾

官网:https://dun.163.com/

Demo:https://dun.163.com/trial/space-inference

Vaptcha

https://www.vaptcha.com/

顶象

三线

主要来源于开源框架

Ob混淆系(obfuscator、sojson、Jsaham)、Jsfuck、JJEncode、AAEncode、eval等、

obfuscator: https://obfuscator.io/

sojson:https://www.sojson.com/jsjiemi.html

Jsaham:http://www.jshaman.com/#section2

jstuck:http://www.jsfuck.com/ GitHub:https://github.com/aemkei/jsfuck

JJEncode:http://www.atoolbox.net/Tool.php?Id=704

JJEncode:http://www.atoolbox.net/Tool.php?Id=703

Eval:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/eval;

分析:eval换为console.log()(前提:console.log未改写)

分析

ob系列

特点

  1. 大数组
  2. 数据移位(常见regex内存检测,建议不format绕过或remove regex)
  3. 解密函数(常见regex内存检测,建议不format绕过或remove regex)
  4. 定时器setInterval() 、setTimeout() + 无限debugger (可能含有)
  5. 业务代码 + 控制流平坦化:(ob强度90%取决于此代码强度、这里是加密前的逻辑)
  6. 控制流平坦化 + 无限debugger + 僵尸代码注入(一般不含有业务逻辑)

Example:

  1. 找到实际处(ob)
  2. 找前三段(数组、数组移位、解密函数),剪切出去
  3. 格式化控制流平坦化、实际逻辑。放回前剪切出去的内容
  4. 定位加密函数
Jsfuck、JJEncode、AAEncode

配合eval类型防护:

  1. 直接放控制台console执行(报非unsafe错误);点击错位堆栈直接完成脱壳

2.控制台不报错,构建强制报错。删除一些代码(为了不干扰原本代码,建议删除括号或加无意义代码)

3。控制台报unsafe错误,自写html文件运行。参考以上

混淆部分数字:

四线

工程化工具、各种加密函数魔改、辅助作用

webpack、vue、react、angular

webpack:https://webpack.docschina.org/

关键点:加载器(也叫分发器)

经典绕过方案:点位插桩

扣取思路:找到加载器、扣出加载器构建自己的加载器(网站与关键参数(函数))、补环境

验证码汇总

ali

tencent

reCAPTCHA (google.com)

163:网易易盾-数字内容风控-内容安全|业务安全|移动安全 (163.com)

dingxiang顶象-业务安全引领者,让数字世界无风险 (
dingxiang-inc.com)

geetest

vaptcha

ishumei

yescaptch

2captcha

爬虫

网页反调试总结

网站除了对代码进行加密进行保护,还时常携带了反调试手段。例如无限debugger;内存爆破,控制台检测。

相关无限debugger进行反调试阻挠请参考上文,不在此过多赘述。本节主要学习内存爆破原理与绕过思想、控制台检测原理与绕过,

阅读全文 »

爬虫

为什么需要数据防护?

当今如今大数据时代,数据重要不言而喻,网页和 App 作为主流的数据载体,如果其数据没有任何的保护措施,在爬虫工程师解决了一些基本的反爬如User-Agent、cookies、验证码等的防护措施之后,那么数据依旧可被轻易的获取。

数据防护主要体现在何处?

阅读全文 »

爬虫

网页调试之JSHook

什么是Hook?

Hook
又叫作钩子技术,它就是在程序运行的过程中,对其中的某个方法进行重写,在原有的方法前后自定义的代码。相当于在系统没有调用该函数之前,钩子程序就先捕获该消息,可以先得到控制权,这时钩子函数便可以加工处理(改变)该函数的执行行为。执行函数后释放控制权限,继续运行原有逻辑。

阅读全文 »

爬虫

网页调试之debugger原理与绕过

debugger 语句用于停止执行 JavaScript(以下简称JS),并调用 (如果可用) 调试函数。

使用 debugger 语句类似于在代码中设置断点。

阅读全文 »

Redis

问题描述: 由于某种原因,我必须需要将某个集合的键(Key)复制一份副本。并移动到目标库

拿到这个问题,脑海里一共有两种方式

  • 将所有的此集合中的所有的值从redis里面读取出来,然后再存进去。
  • 使用集合的思想进行取差集或并集。如果二者有一个且仅有一个为空那么他们返回的结果为有值的集合

阅读全文 »

Tampermonkey

Tampermonkey

Tampermonkey 是一款免费的浏览器扩展和最为流行的用户脚本管理器,虽然有些受支持的浏览器拥有原生的用户脚本支持,但 Tampermonkey 将在您的用户脚本管理方面提供更多的便利。
它提供了诸如便捷脚本安装、自动更新检查、标签中的脚本运行状况速览、内置的编辑器等众多功能, 同时Tampermonkey还有可能正常运行原本并不兼容的脚本。

阅读全文 »

爬虫

网络爬虫

网络爬虫的定义

爬虫又称为网络蜘蛛、网页追逐者。是一种按照一定的规则,自动地抓取万维网信息的程序或脚本

同时还有很多种说法,但我个人认为最通俗的理解就是,模拟用户访问的程序或脚本。

阅读全文 »

Mac

HomeBrew

HomeBrew官方地址

brew.idayer

简单来说他是类似于yum、apt,mac的包管理工具,使用它我们可以非常简单、丝滑的下载大部分的包、或者软件

第一次可以尝试使用如下命令进行安装

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

由于种种原因,如果安装不上,可以使用华科大的源进行安装

1
/bin/bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install.sh)"

安装完成后,检查一下

1
brew update && brew upgrade && brew doctor

设置

1
git -C "/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core" remote set-url origin https://github.com/Homebrew/homebrew-core

定制zsh编辑器

原生的mac,zsh是没有命令提示的,以及显示也并没有那么好看。自定制一下,终端建议使用iterm2

下载iterm2

1
brew install --cask iterm2

下载oh-my-zsh

1
2
3
4
# curl 安装方式
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
# wget 安装方式
sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

复制 .zshrc

1
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

修改默认 shell(可选)

1
chsh -s /bin/zsh

在终端中新建一个窗口(快捷键:command + n),你就发现不一样的shell,如下图所示

image-20210426191816929

安装插件

1
2
3
4
5
6
7
8
9
10
11
# zsh-autosuggestions 提供自动补全功能
git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions

# zsh-syntax-highlighting 语法高亮
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting

# git-open 插件 提供 快捷打开远程地址 git open
git clone https://github.com/paulirish/git-open.git $ZSH_CUSTOM/plugins/git-open

# zsh-z z -h
git clone https://github.com/agkozak/zsh-z $ZSH_CUSTOM/plugins/zsh-z

.zshrc 文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH

# Path to your oh-my-zsh installation.
export ZSH="$HOME/.oh-my-zsh"

# Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
# ZSH_THEME="robbyrussell"
ZSH_THEME="random"
export HISTSIZE=999999
export HISTFILESIZE=999999
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#ff00ff,bg=cyan,bold,underline"
# Set list of themes to pick from when loading at random
# Setting this variable when ZSH_THEME=random will cause zsh to load
# a theme from this variable instead of looking in $ZSH/themes/
# If set to an empty array, this variable will have no effect.
# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )

# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"

# Uncomment the following line to use hyphen-insensitive completion.
# Case-sensitive completion must be off. _ and - will be interchangeable.
# HYPHEN_INSENSITIVE="true"

# Uncomment one of the following lines to change the auto-update behavior
# zstyle ':omz:update' mode disabled # disable automatic updates
# zstyle ':omz:update' mode auto # update automatically without asking
# zstyle ':omz:update' mode reminder # just remind me to update when it's time

# Uncomment the following line to change how often to auto-update (in days).
# zstyle ':omz:update' frequency 13

# Uncomment the following line if pasting URLs and other text is messed up.
# DISABLE_MAGIC_FUNCTIONS="true"

# Uncomment the following line to disable colors in ls.
# DISABLE_LS_COLORS="true"

# Uncomment the following line to disable auto-setting terminal title.
# DISABLE_AUTO_TITLE="true"

# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"

# Uncomment the following line to display red dots whilst waiting for completion.
# You can also set it to another string to have that shown instead of the default red dots.
# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f"
# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765)
# COMPLETION_WAITING_DOTS="true"

# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
# DISABLE_UNTRACKED_FILES_DIRTY="true"

# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# You can set one of the optional three formats:
# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# or set a custom format using the strftime function format specifications,
# see 'man strftime' for details.
# HIST_STAMPS="mm/dd/yyyy"
HIST_STAMPS="yyyy-mm-dd"

# Would you like to use another custom folder than $ZSH/custom?
# ZSH_CUSTOM=/path/to/new-custom-folder

# Which plugins would you like to load?
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(
rails
git
adb
textmate
lighthouse
bundler
dotenv
macos
rake
rbenv
git-open
zsh-z
zsh-autosuggestions
zsh-syntax-highlighting
)

source $ZSH/oh-my-zsh.sh

# User configuration

# export MANPATH="/usr/local/man:$MANPATH"

# You may need to manually set your language environment
export LANG=en_US.UTF-8

# Preferred editor for local and remote sessions
# if [[ -n $SSH_CONNECTION ]]; then
# export EDITOR='vim'
# else
# export EDITOR='mvim'
# fi

# Compilation flags
# export ARCHFLAGS="-arch x86_64"

# Set personal aliases, overriding those provided by oh-my-zsh libs,
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
# For a full list of active aliases, run `alias`.
#
# Example aliases
alias zshconfig="mate ~/.zshrc"
alias ohmyzsh="mate ~/.oh-my-zsh"
alias cp='cp -i'
alias mv='mv -i'
alias brewski='brew update; brew upgrade; brew cleanup; brew doctor'
alias pyfmt='fd . -e py | xargs black'
alias gofmtl='fd . -e go | xargs gofmt -w'
alias cls='clear'
alias ccnpm="npm --registry=https://registry.npmmirror.com \
--cache=$HOME/.npm/.cache/cnpm \
--disturl=https://npmmirror.com/mirrors/node \
--userconfig=$HOME/.cnpmrc"

export GOPATH="/Users/payne/WorkSpace/Go"
export GOBIN="${GOPATH}/bin"
export GOPROXY="https://goproxy.cn,direct"
export PATH="${GOBIN}:${GOPATH}:$PATH"

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/opt/homebrew/Caskroom/miniconda/base/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/opt/homebrew/Caskroom/miniconda/base/etc/profile.d/conda.sh" ]; then
. "/opt/homebrew/Caskroom/miniconda/base/etc/profile.d/conda.sh"
else
export PATH="/opt/homebrew/Caskroom/miniconda/base/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<

source <(kubectl completion zsh)
source <(helm completion zsh)

## HOMEBREW
export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles

自动补全

1
2
3
4
5
# zsh
source <(kubectl completion zsh)
# bash (需要下载bash-completion)
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)

font

Go

在了解golang的测试之前,先了解一下go语言自带的测试工具-go test

go test工具

Go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程是类似的,并不需要学习新的语法、规则或工具。

阅读全文 »

Go

发布golang第三方包

事情是这样的,随着公司的业务的增长。各种重复的工作越来约多。CV久了就想在进一步的那啥,毕竟我懒,不是。我就想着能不能把那些重复cv的干脆写成一个第三方包,进行调用。咱不谈那些啥封装啥的,我也想过,我也做过。但无论咋封装,总不可能跨项目吧,还是需要。。。

所幸,还是有方法的,来吧,让我们发表第一个golang工具包

阅读全文 »

计算机基础

进制与位运算

在我们编程的领域,进制的重要性不言而喻。为什么我的世界只有0与1,这之间到底有什么不可不知的秘密

为什么旁边的“高级工程师”,天天学框架、学架构,反而给他学废了。这一切的一切究竟是计算机的计算扭曲,还是计算机的道德沦丧。今天让我们进入哪个传说中只有0与1的世界。

阅读全文 »

Go

并发模式并不是一种函数的运用、亦或者实际存在的东西。他是前人对于并发场景的运用总结与经验。他与23中设计模式一样。好啦,话不多说。开干

无论是如何厉害的架构还是编程方式,我始终相信都是从零开始,不断的抽象,不断的迭代的。抽象思维对于我们尤为重要。那么我们也带着这样的一个疑问。思考到底什么是抽象

首先我们将要学习的是work pool模式

阅读全文 »

Go

在本文中,我首先会介绍context是什么,它有什么作用,以及如何使用,其中还会参杂一点个人的理解,以及部分源码的了解。What are you waiting for?

阅读全文 »

Kubernetes

其实本节的文章我在很久之前就已经发过了一次,但不够详细,层次不轻。我今天部署的时候看的够呛(虽然也是部署成功了)
,也算是对以前的坑,做个忏悔吧。本文可能会比较boring,但请相信这并不是我的本意。这一定是最精简的笔记之一,相信我这绝对不是混水。

本文主要分三大部分,他们分别是系统初始化、安装docker、安装Kubernetes,测试验证与删库跑路

阅读全文 »

Go

盘点Golang并发那些事儿之二

上一节提到,golang中直接使用关键字go创建goroutine,无法满足我们的需求。主要问题如下

  • 无法有效的并发执行完成
  • 无法有效的控制并发

首先我们再来看看下面这个栗子,代码如下

阅读全文 »

Go

盘点Golang并发那些事儿之一

一生很短,Let’s Go

人生苦短,我用Python

Golang、Golang、Golang 真的够浪,今天我们一起盘点一下Golang并发那些事儿,准确来说是goroutine,关于多线程并发,咱们暂时先放一放(主要是俺现在还不太会,不敢出来瞎搞)。关于golang
优点如何,咱们也不扯那些虚的。反正都是大佬在说,俺只是个吃瓜群众,偶尔打打酱油,逃~。

阅读全文 »