RSP-指向栈顶
RBP-指向栈帧中心(稍后解释栈和栈帧)
ARM寄存器
SP与x86中esp相当
R11与x86中ebp相当
LR是link 的简称,用于保存调用者的地址方便返回
PC在ARM中指向两条指令之后(由于三级流水线的历史遗留问题)
X86和ARM的汇编指令
总论
一般指令执行时都会将返回的结果存储于寄存器中 。
但寄存器数量很有限,于是我们需要经常的将它存入内存 。
然后聪明的先人就创造了栈 。
1.2 常用逆向思路 1.3 工具 1.3.1 二进制编辑器
● 010
模板功能,→ 即可看到各种已有模板
的语法类似于C结构体,可自己直接编写并加载,且支持基本的C语法如循环、判断等
解析的结果会以列表的形式显示在界面中
快速解析已知格式文件
二进制复制与粘贴支持
不同格式输入
编码支持较差
●
编码支持相当好
二进制编辑能力较弱
、
1.3.2 可执行文件查看工具
● PE:CFF
● MachO:MachO View
● ELF:直接IDA
1.3.3 格式转换工具
●
1.3.4 反汇编器 非侵入式
● IDA:
反汇编界面使用
不同界面说明
设置Data、Code(d、c)
查看Cross (x)
查看 List(Shift-F12)
F5反编译器使用
设置Type (变量、函数)(Y)
设置(Y)
1.3.5 调试器
命令行调试器
● gdb
支持平台全面,有强大社区支持
支持配合进行远程调试
社区维护大量插件
●
仅支持Win平台
强于解析结构体,尤善于内部结构的解析与显示
同样支持插件,但数量相对较少
支持Win内核调试
支持Win远程调试
图形界面调试器
●
Win下老牌调试器
有强大的社区,
支持脚本和插件扩展
仅支持32位
快捷键:F8步过 F7步进 F4运行至 F9运行 F2下断点
2020.06.04 反汇编修改神器
插件开发包
的主程序目录
支持32和64位
仍在活跃开发中
插件相对较少
快捷键与OD相同
逆向反汇编修改神器,免费开源x64/x32位动态调试器,适用的专业程序调试器,软件原生支持中文界面和插件,其界面及操作方法与调试工具类似,
支持类似C的表达式解析器、
全功能的DLL和EXE文件调试、IDA般的侧边栏与跳跃箭头、动态识别模块和串、快反汇编、可调试的脚本语言自动化等多项实用分析功能 。
调试器主要分为三部分载体:
DBG 是调试器的调试部分,它处理调试技术(使用的 ),并为GUI提供数据 。
GUI 是调试器的图形部分,它建立在Qt上,并提供用户交互界面 。
是DBG和GUI部分的通信库,它可以用于在新建功能上工作,而无需更新代码的其它部分 。
修订了啥
简体中文修订说明:王苏 2020.06.10
为帮助用户更好地了解反汇编后的 CPU 汇编指令信息,对汇编指令的“助记符摘要”全部进行了汉化 。由于本次更新幅度较大,更改的内容较多,所以对“助记符帮助”进行了部分汉化 。汇编指令的汉化参考了“清华大学出版社”出版的《汇编语言程序设计教程》(第4版) 中术语,因此可能与其他软件的汉化术语略有不同 。对插件等进行了全面汉化 。对帮助文档的主要内容进行了汉化,并按照最新版进行了修订、翻译 。对界面字体以及布局重新进行了设置 。将默认调用在线英文帮助更改为调用本地的中文帮助文件 。对官方中文版的汉化错误及不一致处进行了修订,并与帮助文档的关键词进行了统一 。对中文版界面字体进行了重新设置,使其更为美观 。初步认知 快捷键
附加进程 ALT + A
cpu 反汇编窗口
F2 断断点 同OD
F8 步过
空格键 编辑 汇编
IDA pro 安装
-2.7.3.msi
加入环境变量
D:\python273D:\python273\Scripts
py2安装pip
No module named setuptoolssetuptools-2.1.2.zippip-1.2.1.tar.gzpython .\setup.py install
安装IDA 7.0 pro
:“site” .
网上的解决方法
查看python27.dll的位置 where python27.dll 查看注册表中 HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.7\InstallPath 的值是python2.7的安装路径
尽量用win7系统
我是重新安装了环境和IDA pro
IDA pro 内置调试器
快捷键与OD相同
支持多种后端:
IDA内置调试器
gdb、
支持远程调试
兼容
官方支持ARM/ARM64、x86/x64指令集远程调试
支持 iOS Win Linux
支持配合Hex-Rays调试
单步、查看运行过程中变量的值
步进
单步执行,遇到call调用时会跟进而不是跳过去
步过
单步执行,遇到call调用时会和别的指令一样跳过去
运行至指定位置
相当于临时下断点,碰到循环时可以方便的跳过去
运行
直接跑起来,而不是一条一条指令执行
F5 查看伪代码
打开安装程序
APK反编译工具 工具:
1、.bat;.jar
官网下载地址
作用:最大程度的还原apk中的文件和资源文件。
使用工具反编译apk文件比直接解压同一个apk文件大;
还可以将反编译之后的apk重新打包成apk文件,
但需要重新签名,才能安装使用 。
2、
官方下载地址
作用:
将APK直接解压后,目录下包含的一个.dex
文件反编译为-.jar文件 。
3、jd-gui.jar
作用:直接查看-.jar文件 。
网盘资源 完整工具压缩包下载
重新打包:
输入命令 b xxx
3、jd-gui
C#逆向 反编译工具
官网地址:
是开发的一款.Net反编译工具,是.Net工具套件中的一个
是一款基于捆绑反编译器的免费独立工具 。
它可以可靠地将任意 .NET 程序集反编译为对等的 C# 或 IL 代码 。
支持包括库 (.dll)、可执行文件 (.exe) 和元数据文件 (.winmd) 在内的多种格式 。
还可以作为符号服务器运行,
为调试器提供调试程序集代码所需的信息 。
实战小记反编译逆向调试与安全加固 安卓逆向 初识 #了解下 安卓端的 逆向学习框架#
001课 教学内容规划
学习流程
综合基础
C++游戏逆向 apk
语言分析
— /data/app-lib/包名/lib
找so 几百kb 就不是 c++(几个MB)(有引擎在里面)
res 资源 配置 图片 动画 xml 音频
org linux
META-INF 签名文件夹
资源
看雪逆向-总论 1.3 工具2020.06.04 反汇编修改神器IDA pro IDA pro 内置调试器 APK反编译工具 C#逆向 反编译工具 实战小记 反编译逆向调试与安全加固安卓逆向 初识 001课 教学内容规划 C++游戏逆向 apk语言分析push ebp // 实现压入操作的指令POP //实现弹出操作的指令// ESP是堆栈指针 总是指向栈顶位置 。一般堆栈的栈底不能动 无法暂借使用MOV指令 //数据传送指令push -暂停法 Alt+KF8单步fstsw 可以把状态寄存器读取到一个双字节内存位置或者AX寄存器中fstcw 指令获取当前控制寄存器的值fldcw 指令把 值加载到控制寄存器fstcw 指令检查当前控制寄存器的值ALT+M 内存镜像ALT+E 调用了那些系统模块 该模块的存放地址和文件名程序领空 OD载入程序 程序本身的代码系统领空 USE32 程序调用的咱们系统的一个函数模块AX、BX、CX、DX 用于存放数据 数据寄存器EIP CPU下次要执行的指令的地址EBP 栈的栈底指针 栈基址 (ESP传递给)ESP 栈的栈顶 。并且始终指向栈顶
一 、基础知识 1.1 cpu体系架构1.1-1 RISC和CISC
RISC(精简指令集计算机)Set
CISC(复杂指令集计算机)Set
当前CPU的两种架构 。
区别在于不同的CPU设计理念和方法 。
早期的CPU全部是CISC架构,
它的设计目的是要用最少的机器语言指令来完成所需的计算任务 。
比如对于乘法运算,在CISC架构的CPU上,您可能需要这样一条指令:MUL ADDRA, ADDRB就可以将ADDRA和ADDRB中的数相乘并将结果储存在ADDRA中 。将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作全部依赖于CPU中设计的逻辑来实现 。
这种架构会增加CPU结构的复杂性和对CPU工艺的要求,但对于编译器的开发十分有利 。
比如上面的例子,C程序中的a*=b就可以直接编译为一条乘法指令 。
今天只有Intel及其兼容CPU还在使用CISC架构 。
RISC架构要求软件来指定各个操作步骤 。
上面的例子如果要在RISC架构上实现,
将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作都必须由软件来实现,比如:MOV A, ADDRA; MOV B, ADDRB; MUL A, B; STR ADDRA, A 。
这种架构可以降低CPU的复杂性
以及允许在同样的工艺水平下生产出功能更强大的CPU,
但对于编译器的设计有更高的要求 。
1.1-2 CPU工作的基本原理
计算机的组成结构
数字电路基础
编程的基础
实现 一个RISC指令集的CPU
要自己为这个CPU设计指令并且编码
英特尔的 叫特德·霍夫(Ted Hoff)的工程师
设计和生产专用集成电路芯片
用于实现桌面计算器
各实现一种特定的功能
想法:
为什么不能用一块通用的芯片加上程序来实现几块芯片的功能呢?
当需要某种功能时,只需要把实现该功能的一段程序代码(称为子程序)加载到通用芯片上,其功能与专用芯片会完全一样 。
计算器的新的体系结构图,
其中包含4块芯片:
一块通用处理器芯片,实现所有的计算和控制功能;
一块可读写内存(RAM)芯片,用来存放数据;
一块只读内存(ROM)芯片,用来存放程序;
一块输入输出芯片,实现键入数据和操作命令、打印结果等等功能
例1-1:
mov eax,0repeat:inc eaxjmp repeat
例1-2:
int main(){unsigned int i = 0;while(1)i++;}
例1-3:
以上三个例子都产生了一个从0不断增加的序列
而且前两个例子会一直加到溢出又从0开始
(这个取决于计算机的字长也就是多少位的CPU,
eax是32位寄存器所以必然是加到然后回0,
而后面那个c程序则看不同编译器和不同平台不一样)
后面那个例子则看你用的是什么样的加法器和多少个D触发器
假设要一个递减的序列
例2-1:
mov eax,0repeat:dec eaxjmp repeat
例2-2:
int main(){unsigned int i = 0;while(1)i--;}
例2-3:
上面
(例1-3)中是个加法器,
减法器(例2-3)!
例3:
使用了一个加法器一个减法器,没比上面的电路省
(加上一个负数的补码确实就是减去一个数)
多了一组多路器,少了一组D触发器
而sel信号就是用来选择的(0是递增,1是递减) 。
push ebp // 实现压入操作的指令 POP //实现弹出操作的指令
//缺省对堆栈操作的寄存器 ESP 和 EBP 扩展基址指针寄存器( base )
// ESP是堆栈指针 总是指向栈顶位置 。一般堆栈的栈底不能动 无法暂借使用
一般使用 EBP 来存取堆栈
调用中有两个参数
在 push 第一个参数前的堆栈指针 ESP 为 X,那么压入两个参数后的 ESP 为 X-8
计算机转移到调用的 子程序 call指令
//把返回地址压入堆栈 ESP 为 X-C 这时已经在子程序中了
可以开始使用 EBP 来存取参数
为了在返回时恢复 EBP 的值,我们还是再需要一句 push ebp
来先保存 EBP 的值,这时 ESP 为 X-10
再执行一句 mov ebp,esp
实际上这时候 [ebp + 8] 就是参数1,[ebp + c]就是参数2
MOV指令 //数据传送指令
//用于将一个数据从源地址传送到目标地址
(寄存器间的数据传送本质上也是一样的) 。
其特点是不破坏源地址单元的内容
push -0x1
-1=
1=
F12暂停法 Alt+K
显示调用 下断点
F8单步
FPU :(Float Point Unit,浮点运算单元)
状态寄存器
控制寄存器
fstsw 可以把状态寄存器读取到一个双字节内存位置或者AX寄存器中 fstcw 指令获取当前控制寄存器的值 fldcw 指令把 值加载到控制寄存器 fstcw 指令检查当前控制寄存器的值 ALT+M 内存镜像 ALT+E 调用了那些系统模块 该模块的存放地址和文件名 程序领空 OD载入程序 程序本身的代码 系统领空 USE32 程序调用的咱们系统的一个函数模块
放在目录下文件夹里的一个DLL文件
esp定律 向 堆栈 中压入下一行程序的地址
逆向破解 暴力破解 绕过注册机制 追踪注册码
混淆器 壳 侦壳程序进行识别 伪装技术来混淆侦壳程序
压缩壳 程序进行体积缩小化处理
保护壳混淆或加密代码防止他人进行逆向程序、破解程序
EP段
AX 微处理器中8个 通用寄存器之一
AX、BX、CX、DX 用于存放数据 数据寄存器
按16位使用时主要用于存放数据 临时用于存放地址
每一个都可以拆开成为两个独立的8位寄存器使用
分别用高字节和低字节表示
AH,AL等,按8位使用时只能用于存放数据
系统 地址 寄存器
EIP CPU下次要执行的指令的地址 EBP 栈的栈底指针 栈基址 (ESP传递给)
调用前 ESP存储的是栈顶地址,也是栈底地址
ESP 栈的栈顶 。并且始终指向栈顶
三个指针 系统中栈 栈的数据结构 后进先处
1.栈是用来存储临时变量,函数传递的中间结果 。
2.操作系统维护的,对于程序员是透明的 。
函数调用 栈实现 原理
【红队专题-REVERSE二进制逆向反编译】函数压栈 再出栈
- 「专题速递」数字人直播带货、传统行业数字化升级、远程协作中的低延时视频、地产物业
- 【愚公系列】2023年10月 WPF控件专题 Window窗体属性和事件
- 20189218 2018-2019-2 《密码与安全新技术专题》第5周作业
- 【电源专题】案例:充电芯片如何配置NTC偏置网络设定充电温度区间
- 内存管理专题04 伙伴分配器原理
- ionic 初级开发手机端移动应用视频课程-陶国荣-专题视频课程
- 护网行动、红蓝队专题
- 「纯音汇」专题:《纯音乐·最好听——名曲十首串烧》荐赏小集 世界经典的十大纯音乐
- 【无线通信专题】NFC基本原理
- “特别报道”卓越奖!《大美中国》黄山专题版面荣获世界大奖 中国版面上的世界之最