常见的爬虫逆向面试题

文章转载于:https://mp.weixin.qq.com/s/dXRo0D_Xx7E_h85XbnwPVQ 有兴趣去源站浏览学习

主要自己看着方便些

1.HTTS三次握手

目前使用的 HTTP/HTTPS 协议是基于 TCP 协议之上的,因此也需要三次握手。在 TCP 三次握手建立链接之后,才会进行 SSL 握手的过程(即身份认证和密钥协商的过程)。

第一步:证书验证

复制代码
服务器将 crt 公钥以证书的形式发送到客户端,客户端验证证书是否合法。

第二步:获取对称密钥

复制代码
客户端用随机数和 hash 签名生成一串对称密钥(即随机钥,客户钥),然后用 crt 公钥对对称密钥进行加密。
客户端将加密后的对称密钥发送给服务器。
服务器用 crt 私钥解密,取出对称密钥。

第三步:传输加密数据

复制代码
服务器用随机钥来加密数据,发送加密的网页内容。
客户端通过本地存储的随机钥对密文进行解密并判断是否被篡改,如果没有篡改,
后面的数据通讯将使用对称加密传输所有内容。

2.对称和非对称加密

对称加密:

复制代码
在编码时使用的密钥 e 和解码时一样 d(即 e = d)。(DES、3DES、AES)

非对称加密:

复制代码
加密的密钥 e 和解密的密钥 d 是不同的(即 e != d),并且加密的密钥 e 是公开的,叫做公钥,
而解密的密钥 d 是保密的,叫私钥。(RSA、DSA、ECC)

3.web逆向参数定位方法

复制代码
1、全局搜索
2、xhr拦截
3、堆栈调试
4、Hook脚本
5、内存漫游

4.浏览器指纹

复制代码
常用于记录的浏览器指纹:
Header、Cookie,IP,DNS,
UserAgent,Font(字体列表),
Language,localStorage、
Plugin(插件),Canvas(渲染绘图),
WebGL(3D渲染图形),
Web Vendor(硬件厂商信息),
Timezone(时区),Platform(系统),
WebRTC(web通信API),
ScreenResolution(分辨率),
Audio(音频设置和硬件特征指纹),
enumerateDevices(其他媒体设备),
CPU、GPU信息。

5.web逆向其他问题

复制代码
1、常见检测和绕过:反调试之类
2、如何获取当前环境:Proxy
3、hook如何实现的
4、如何hook XHR
5、加解密和混淆处理
345可到工具站查看,地址:
cnlans.com/lx/tools/jshook

6.chromedriver检测

复制代码
常见的检测点:
    webdriver
    user-data-dir
    language
    navigator
    plugins
    Developer
    
可在页面加载之前通过Js语句覆盖原有属性。
Object.defineProperty(
    navigator, 'webdriver', { 
        get: () => undefined 
    }
)

7.验证码识别和处理

复制代码
通用逆向分析流程
1.分析请求流程
2.验证码注册
3.识别验证信息
4.生成验证参数
5.验证

识别方法
1.开源工具识别
2.第三方平台
3.训练识别模型,可借助云平台或开源框架

验证码厂家:极验、阿里、易盾、顶象、点触、数美。
极验简述
1.主要有三个以 geetest_ 开头的加密参数,提交滑块时的请求参数 gt、challenge、lang、w、callback。
2.分析时可对代码进行 Unicode 解码,解码之后再通过AST脚本去除冗余代码。
3.调试后抽离出请求参数的加密逻辑,构造请求体完成验证。

数美流程
1.验证码申请
2.提取js参数,需要提取js中的参数名。
2.验证码注册,获取滑块图片和验证背景图。
3.计算滑块缺口位置,可使用opencv等工具计算缺口距离。
4.构造轨迹,自动生成或者copy轨迹库。
5.逆向分析接口参数,完成提交验证。

8.动态cookie反爬

复制代码
加速乐简述

1、第一次请求返回状态为521的响应内容,执行JS可获得cookie值 jsl_clearance。
2、cookie带上生成的__jsl_clearance和第一步中返回的cookie值__jsluid_h再次请求目标网址,响应内容为一段混淆JS代码,该代码为生成真实__jsl_clearance值的代码。
3、主要加密逻辑就是对参数做拼接处理,然后对拼接后的字符串进行hash加密。

瑞数流程
1、第一次请求后,浏览器加载meta,meta是包含动态content的html标签,会在eval执行第二层JS代码时使用到。
2、浏览器请求外链JS,一般同站外链JS是固定的,用于下一步的调用。
3、加载自执行函数(动态),将外链的JS解密为字符串,并给window.$_ts添加属性。然后通过eval函数进入VM执行解密后的字符串,执行完毕后可生成cookie。

瑞数处理

1、先处理定时器和死循环debugger。
2、将HTML放到本地运行或将浏览器JS替换为固定内容。
3、将content和自执行方法在本地调试,根据VM执行的异常信息补环境。
4、主要需要补充document、localStorage和window中的一些方法,如addEventListener、getElementsByTagName、createElement等。

9.安卓逆向分析步骤

复制代码
1、抓包
2、查壳脱壳
3、反编译
4、参数定位、静态分析、动态调试
5、模拟调用、算法还原

10.xposed hook原理

复制代码
安卓所有的APP进程是用 Zygote(孵化器)进程进行fork创建并启动的。
Xposed替换了Zygote进程对应的可执行文件/system/bin/app_process,
每启动一个新的进程,都会先启动xposed替换过的文件,加载xposed相关代码。

11.Frida hook原理

复制代码
Frida的注入是基于 ptrace实现的。
frida 调用ptrace向目标进程注入了一个frida-agent-xx.so文件。
后续hook是以该so文件和frida-server通讯实现的。

Frida hook java层原理

Frida-java采用常见的Dalvik Hook方案,将待hook的java函数修改为native函数,当调用该函数时,会执行自定义的native函数。
但是和其他hook框架不同的是,使用frida时,我们hook的代码是JS实现的,所以有一个基于JS代码生成native函数过程。

12.ptrace注入流程

复制代码
主要是通过系统ptrace函数进行实现。
1.attach到远程进程;
2.保存寄存器环境
3.远程调用mmap函数分配内存空间
4.想远程进程写入加载模块名称和调用函数
5.通过dlopne打开注入模块
6.dlsym获取调用函数地址
7.远程调用注入模块的函数
8.恢复寄存器
9.剥离远程进程

13.Frida常见反调试

复制代码
1. 检测 frida-server 文件名  
2. 检测 27042 默认端口  
3. 检测 D-Bus 
4. 检测 /proc/pid/maps 映射文件  
5. 检测 /proc/pid/tast/tid/stat
6. 双进程保护  
    前两种可以通过修改 frida-server 文件名,改默认端口绕过。
    双进程可以通过 - f spawn 模式启动绕过。
    其他的需要 hook 修改。 

14.Inlinehook

复制代码
inlinehook是hook的一种实现方式。通过修改原函数开头的汇编指令,直接跳转到指定函数,执行完自己的逻辑再跳转回来。
开源的inlinehook库有很多,例如subhook和微软的Detours。

如何去检测inlinehook
inlinehook只修改了内存中的机器码,而内存中的机器码是从文件加载而来的,所以我们可以将函数在内存中字节和本地对应的字节进行比较,
如果不一致,那么可以认为内存中的字节被修改了,即被inlinehook了。

15.加固与脱壳

复制代码
现在安卓平台上几种加固方式(动态加载,类抽取,混淆,vmp)

1、Dex整体加固也被称为第一代加固,把DEX整体加密然后动态加载。脱壳思路是app运行后,在app内存中搜索 dex\n035,
然后进行dump数据。
2、不落地加载是第二代加固,通过内存动态加载Dex,可以将Dex加密放在Apk中,
在内存中实现解密。脱壳思路是通过hook关键函数,直接在内存中把Dex遍历出来就可以。
3、指令抽取和转换。脱壳思路是对自定义的JNI接口对象进行内部调试分析,得到完整的原始dex文件。
4、虚拟机源码保护。根据VMProtect壳的特征和加壳方式,编写脱壳程序还原原始的程序代码,
将还原后的程序代码重新编译,生成程序可执行文件。

16.设备指纹

复制代码
常见:品牌型号、IMEI、MAC地址、IMSI、运营商、系统信息、硬件信息、蓝牙信息、路由信息等。

17.其他安卓问题

复制代码
1、系统服务
2、系统权限
3、安卓反调试
4、重打包检测
5、ollvm
6、不同协议的抓包问题
7、群控开发、改机
8、IDA使用问题
9、ARM跳转指令
相关推荐
思则变2 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
漫谈网络3 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket
try2find4 小时前
安装llama-cpp-python踩坑记
开发语言·python·llama
泡泡以安5 小时前
安卓高版本HTTPS抓包:终极解决方案
爬虫·https·安卓逆向·安卓抓包
博观而约取5 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
精灵vector6 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
q567315237 小时前
Java Selenium反爬虫技术方案
java·爬虫·selenium
Zonda要好好学习7 小时前
Python入门Day2
开发语言·python
Vertira7 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉7 小时前
Python之 sorted() 函数的基本语法
python