常见的爬虫逆向面试题

文章转载于: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检测

常见的检测点:webdriveruser-data-dirlanguagenavigatorpluginsDeveloper可在页面加载之前通过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跳转指令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/717885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

故障诊断 | 一文解决,XGBoost极限梯度提升树的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,XGBoost极限梯度提升树的故障诊断(Matlab) 模型描述 XGBoost通过集成多个决策树来建立一个强大的预测模型。它采用了一种特殊的梯度提升技术,称为极限梯度提升(Extreme Gradient Boosting),以提高模型的性能和鲁棒性。 极限梯度…

【大数据Hive】hive 多字段分隔符使用详解

目录 一、前言 二、hive默认分隔符规则以及限制 2.1 正常示例:单字节分隔符数据加载示例 2.2 特殊格式的文本数据,分隔符为特殊字符 2.2.1 文本数据的字段中包含了分隔符 三、突破默认限制规则约束 3.1 数据加载不匹配情况 1 3.2 数据加载不匹配…

python paramiko 网络系统运维

概述 背景:网络系统运维与建设:工作中发现客户使用python脚本批量操作网络设备导出多台网络设备的配置定期执行相关的巡检工作 修改配置 # -*- coding:utf8 -*- """ # editor: hjjdreamer # create-time: 2024/3/3-23:31 # Python-Scri…

Java项目推荐|几个B站上的从零搭建项目

分享几个B站上搜集到的技术比较全,讲解也详细的Java后端开发项目 目录 谷粒商城 2020-03-31 iHRM 人力资源管理系统 2021-04-16 瑞吉外卖 2022-04-12 学成在线 2023-01-13 尚上优选 2023-06-06 黑马头条 2023-06-13 苍穹外卖 2023-07-05 谷粒商城 2020-03-3…

命名实体识别NER

一、什么是命名实体识别: 命名实体:通常我们将人名、地名、机构名等专有名词统称命名实体,如:周杰伦,黑山县,孔子学院,24方钢直机 顾名思议,命名实体识别(简称NER&#x…

【常用的 Git 命令及简要示例说明】

常用的 Git 命令及简要示例说明,以供参考: 初始化一个新的代码仓库: git init克隆一个远程仓库到本地: git clone https://github.com/user/repo.git添加当前所有变更到暂存区: git add .提交暂存区的变更到本地仓库&a…

STM32FreeRTOS任务通知(STM32cube高效开发)

文章目录 一、任务通知(一)任务通知概述1、任务通知可模拟队列和信号量2、任务通知优势和局限性 (二) 任务通知函数1、xTaskNotify()发送通知值不返回先前通知值的函数2、xTaskNotifyFromISR()发送通知函数ISR版本3、x…

Java面试题总结200道(二)

26、简述Spring中Bean的生命周期? 在原生的java环境中,一个新的对象的产生是我们用new()的方式产生出来的。在Spring的IOC容器中,将这一部分的工作帮我们完成了(Bean对象的管理)。既然是对象,就存在生命周期,也就是作用…

LeetCode 刷题 [C++] 第73题.矩阵置零

题目描述 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 题目分析 题目中要求使用原地算法:即直接在输入矩阵上进行修改。因此如果在输入矩阵上把行/列的值修改成0后,在…

【Linux】基本指令(下)

🦄个人主页:修修修也 🎏所属专栏:Linux ⚙️操作环境:Xshell (操作系统:CentOS 7.9 64位) 日志 日志的概念: 网络设备、系统及服务程序等,在运作时都会产生一个叫log的事件记录;每一行日志都记载着日期、时间、使用者及动作等相关…

计算机视觉(Computer Vision)和机器视觉(Machine Vision)

举例说明计算机视觉(CV)技术的优势和挑战 计算机视觉(CV)技术是一种使用计算机科学和机器学习方法来解释、分析和理解图像和视频的技术。它的优势和挑战如下: 优势: 高效性:CV技术可以快速处…

课时53:数组实践_基础操作_数组基础

1.1.2 数组定义 学习目标 这一节,我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 数组创建 在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的语法格式:array_name(value1 ... valuen) 注意…

MSCKF4讲:后端理论推导(下)

MSCKF4讲:后端理论推导(下) 文章目录 MSCKF4讲:后端理论推导(下)6 可观测性分析与约束6.1 为什么要做能观性分析6.2 关于零空间解释6.3 可观测性分析6.4 可观测性约束① 状态转移矩阵Φ② 对观测矩阵H--观测…

【洛谷 P8682】[蓝桥杯 2019 省 B] 等差数列 题解(数学+排序+辗转相除法)

[蓝桥杯 2019 省 B] 等差数列 题目描述 数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中 N N N 个整数。 现在给出这 N N N 个整数,小明想知道包含这 N N N 个整数的最短的等差数列有几项? 输…

deep learning with pytorch(一)

1.create a basic nerual network model with pytorch 数据集 Iris UCI Machine Learning Repository fully connected 目标:创建从输入层的代码开始,向前移动到隐藏层,最后到输出层 # %% import torch import torch.nn as nn import torch.nn.funct…

【大数据】详细讲解

大数据 0. 前言1. 大数据的5V特征2. 大数据技术3. 大数据分析4. 大数据应用5. 失效风险与挑战 0. 前言 大数据是一个涉及非常庞大和复杂数据集的领域,这些数据集因其规模和复杂性而难以使用传统数据处理软件进行有效处理。在讲解大数据之前,我们首先需要…

LeetCode26 删除有序数组中的重复项

题目 给你一个 非严格递增排列 的数组 nums ,请你原地删除重复出现的元素, 使每个元素 只出现一次 ,返回删除后数组的新长度。 元素的 相对顺序 应该保持 一致 然后返回 nums 中唯一元素的个数。 示例 示例 1:输入:num…

30天JS挑战(第十四天)------数据的复制

第十四天挑战(数据的复制) 地址:https://javascript30.com/ 所有内容均上传至gitee,答案不唯一,仅代表本人思路 中文详解:https://github.com/soyaine/JavaScript30 该详解是Soyaine及其团队整理编撰的,是对源代码…

后端开发技术面试指南

工作10多年,每年都会帮组里面试一些新同学校招社招的都有,下面我就从一个面试官的视角来给大家拆解一下如何淡然应对后端开发技术面试。 1.一面多为电话面试 (1)问七问八 ①简历要注重内容,形式上不丑没有错别字即可。之前收到过一个工作5…

经典语义分割(一)利用pytorch复现全卷积神经网络FCN

经典语义分割(一)利用pytorch复现全卷积神经网络FCN 这里选择B站up主[霹雳吧啦Wz]根据pytorch官方torchvision模块中实现的FCN源码。 Github连接:FCN源码 1 FCN模型搭建 1.1 FCN网络图 pytorch官方实现的FCN网络图,如下所示。 1.2 backbone FCN原…