Linux
文件目录文件Linux 系统中一切皆文件。
目录层级结构
/
根目录 - 整个文件系统的起点,所有其他目录都挂载在其下。
包含所有顶层目录(如 /bin, /etc, /home 等)。
/bin
二进制文件 - 存放所有用户必需的基本命令(可执行文件)。
ls, cp, mkdir, bash, cat, rm等。
/boot
引导文件 - 存放系统启动所需的文件(内核、引导加载程序配置)。
vmlinuz(内核), initramfs, grub/(GRUB 配置文件)
/dev
设备文件 - 存放代表硬件或虚拟设备的特殊文件。
sda(硬盘), ttyS0(串口), null, zero, random, usb等设备文件。
/etc
系统配置文件 - 存放系统和应用程序的全局配置文件。
passwd, group, hosts, fstab, apt/sources.list, nginx/等配置文件目录。
/home
用户主目录 - ...
git的使用
Git - 分布式版本控制什么是GitGit是一个分布式****版本控制系统。这听起来可能有点复杂,但让我们分解一下:
版本控制:就像给你的代码装上了时光机器。它会跟踪你做的所有更改。
分布式:它允许多个人在同一项目上工作,而不会相互干扰。
分布式与集中式集中式:
集中化的版本控制系统 (Centralized Version Control Systems,简称 CVCS****)
SVN:权限控制;比较安全; 开源系统
协同工作的人们都通过客户端 连到这台服务器,取出最新的文件或者提交更新。
分布式:
分布式版本控制系统(Distributed Version Control System****,简称 DVCS****)。
客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本 地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
安装访问下载页,https://git-scm.com/downloads
# 查看默认配置git con ...
JavaWeb
Java用来开发动态Web的一系列技术(JavaWeb)
JavaWeb的三大组件(接口)【Servlet、Filter、Listener】
Servlet****:处理请求的一段服务器小程序;
继承HttpServlet;处理请求,给浏览器响应数据
重写 doXxx():doGet、doPost
HttpServletRequest:封装HTTP请求报文数据
req.getParameter():获取请求参数(报文:首行url?、请求体)
req.getHeader():获取请求头
HttpServletResponse:封装HTTP响应报文数据;
响应首行:响应状态码,响应消息
200:ok;成功
302:重定向; 响应头 Location:指向新位置
404:未找到; 路径不对,服务器处理不了
500:服务器内部异常; 程序内部出错
resp.setHeader():设置响应头
resp.getWriter().write():给响应体写数据;
转发和重定向:前后不分离,服务端渲染页面
转发:req
重定向:resp
JSP:动态页面技术
**${}**:去域对 ...
XML&HTTP&Tomcat
XML什么是XMLxml(可扩展标记语言) 是一种用于存储和传输数据的标记语言
其核心设计目的是保存数据、传输数据而非显示数据
基础语法一个XML文档必须包含根元素,所有其他元素都包含在根元素内
<?xml version="1.0" encoding="UTF-8"?> <!-- XML声明 --><root> <!-- 根元素 --> <!-- dom4j xpath sax --> <child>Content</child></root>
HTTP报文格式请求报文首行:请求首行、响应首行
头:请求头、响应头
空行
体(真正交换的数据):请求体、响应体;
Sec-Fetch-Mode: navigateSec-Fetch-User: ?1Sec-Fetch-Dest: documentAccept-Encoding: gzip, deflate, br, zstdAccept-Language: zh-CN,zh;q=0.9,en;q=0. ...
MySql
数据库基础什么是数据库数据库(Database)是一种用于高效存储、管理和组织数据的系统。
它通过特定的数据结构将数据有序存储,并提供强大的查询、修改、删除和安全控制功能,确保数据的一致性、完整性和可访问性。
数据库是“数据的仓库”,但远不止于简单的存储,更强调对数据的高效管理与利用。
常见数据库类型
关系型数据库(RDBMS, Relational Database Management System)
数据模型:基于数学中的“关系理论”,数据以二维表格(关系表)形式存储,表之间通过“键”(如主键、外键)关联。
特点:严格的结构化、支持复杂查询(如多表关联)、强一致性。
典型产品:MySQL、Oracle、PostgreSQL、SQL Server。
适用场景:需要精确数据关联和事务的场景(如银行交易、财务系统、电商订单管理)。
类似于 excel 存储数据的方式
非关系型数据库(NoSQL, Not Only SQL)
数据模型:打破传统表结构,采用更灵活的模型(如键值对、文档、列族、图),适合存储非结构化或半结构化数据(如JSON文档、日志、社交关系)。
特点:高 ...
aosp
配置ububtu22.04安装过程参考以下文章:
VMware虚拟机安装Ubuntu详细教程_vmvare安装ubuto-CSDN博客
安装curl工具
sudo apt-get install curl
更换软件下载源
命令行方式
修改 /etc/apt/soruces.list文件
sudo apt-get update 更新源
图形化方式
关于 -> 软件更新 -> 下载自 -> 其他站点 -> aliyun
使用命令行方式时,要先对原来的配置文件进行备份:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.baksudo rm -rf /etc/apt/sources.list
然后从清华大学镜像站获得url:
ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
然后使用nano编辑器进行编辑:
sudo nano /etc/apt/sources.list
安装源码下载前置知识aosp源 ...
unidbg
unidbg介绍unicorn介绍都需要自己来实现
好比是一个CPU,可以模拟执行各种指令
提供了很多编程语言接口,可以操作内存、寄存器等
但它不是一个系统,内存管理、文件管理、系统调用等
基于unicorn开发的框架cemu 用来学习汇编的好工具
AndroidNativeEmu Python开发
unidbg Java开发
unidbg支持模拟JNI调用
支持模拟系统调用指令
支持ARM32和ARM64
支持Hookzz、Dobby、xHook、原生unicorn Hook等Hook方式
支持Android、iOS
好比是在CPU上搭建了一个系统,因此可以很方便地在PC端模拟运行so
学习成本较低,不需要复现so算法,补环境后直接运行即可
unidbg项目地址https://github.com/zhkl0228/unidbg
导入工程从GitHub下载项目,解压后,使用IDEA打开
工程结构unidbg-master -> unidbg-android -> src
main 工程源码
test 测试案例
java 测试案例的源码
resources 测试案例的资源
...
lsposed
lsposed模块开发
AndroidManifest.xml -> application 标签中加入以下内容
<meta-data android:name="xposedmodule" android:value="true" /><meta-data android:name="xposeddescription" android:value="xiaojianbang Hook Demo" /><meta-data android:name="xposedminversion" android:value="54" />
app -> build.gradle -> dependencies 中加入以下内容
compileOnly files('libs\\api.jar')
将 api.jar 放入 libs 目录下, 在 api.jar ...
androidSo
枚举各种let imports = Process.findModuleByName("libxiaojianbang.so").enumerateImports();for(let i =0; i<imports.length; i++){ let _import = imports[i]; if(_import.name.indexOf("pthread_create") !== -1){ console.log(JSON.stringify(_import)); }}let exports = Process.findModuleByName("libxiaojianbang.so").enumerateExports();for(let i =0; i<exports.length; i++){ let _export = exports[i]; if(_export.name.indexOf("Java ...
ARM汇编
寻址方式ARM汇编转换网站:https://armconverter.com/
寄存器间接寻址LDR指令将内存中的数据加载到寄存器中
ARM32: LDR R1, [R2] --> R1 = *R2处理器执行 LDR R1, [R2] 时,它会查看寄存器 R2 里存储的数值,将其作为一个内存地址,然后从这个内存地址对应的存储单元中读取数据,最后把读取到的数据存放到寄存器 R1 中。ARM64: LDR X1, [X2] --> X1 = *X2LDP X1, X2, [X0]从 X0 寄存器的值所表示的内存地址处,读取一个 64 位的数据,并将其存储到寄存器 X1 中。接着,从 X0 + 8(因为每个 64 位数据占 8 字节)所指向的内存地址处,再读取一个 64 位的数据,并将其存储到寄存器 X2 中。
STR指令将寄存器的数据存入内存中
ARM32: STR R1, [R2] --> *R2 = R1该指令会把寄存器 R1 里的数据存到以寄存器 R2 的值作为地址的内存单元中。比如,若 R1 中的值是 0x1234,R2 中的值是 0x40000000,那么就会 ...