提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- Java sdk环境变量配置
- 初识花指令
- OD的初步使用(滴水逆向课程)
- 未完成事项及原因
- 下周学习计划
一、JAVA sdk 环境变量的配置(使用apkIDA时配置)
1.下载与安装
下载合适的版本 本处我选择的是 Java se 8u251—Windows X64 下载完成后进行安装。
安装时注意安装的路径地址,后面配置环境变量的时候需要用到。
2.配置环境变量
打开属性—>高级属性—>选择配置环境变量—>点击环境变量—>新建
新建环境变量一:
变量名:JAVA_HOME
路径:【电脑jdk的路径】(打开刚刚的安装的文件夹->Java->jdk,进入后复制文件所在地址)
新建环境变量二:
变量名:CLASSPATH
路径:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(保持一致即可)
点击环境变量中的Path->新建->输入%JAVA_HOME%\bin
二、初识花指令
1.分类:可执行式花指令和不可执行式花指令
(主要认识了不可执行式花指令)
2.不可执行式花指令(IDA)
指被插入到原始代码中但又不改变原始程序逻辑性的一组无用字节。这类花指令有如下特点:①不可以正常运行;②不改变任何寄存器的值;③反汇编器可能会错误反汇编这些字节。
IDA所用的分析算法为递归下降,从程序入口开始读取机器码进行反汇编,通过程序的控制流确定反汇编的下一条指令,遇到无条件跳转则从跳转目的地址处继续解析,遇到条件跳转则从两个命令执行分支处进行解析 (优先解析顺序执行分支)。
但递归算法的缺点在于准确确定间接转移目的地址的难度较大。
目前学习已知简单的强制跳转指令和互补条件跳转指令
简单的jmp指令
__asm{
jmp label1
db junkcode
label1:
}
jmp指令为无条件跳转指令,会给两种信息:转移的目的地址和转移的距离
在IDA中能正常识别此指令,在字符串中可以找寻
互补条件跳转指令
_asm{
jz label1
jnz label1
db junkcode
label1: }
此处利用jz和jnz的互补跳转指令来代替jmp
目前尚未学习永真条件跳转与call&ret构造花指令
3.花指令的简单去除(IDA)
修改字节码 找到花指令的关键字节码,将其改为nop
三.OD的初步使用(滴水逆向课程)
1.od窗口
2.各个窗口的作用
反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址、HEX 数据、反汇编、注释可以通过在窗口中右击出现的菜单 界面选项->隐藏标题 或 显示标题 来进行切换是否显示。用鼠标左键点击注释标签可以切换注释显示的方式。
寄存器窗口:显示当前所选线程的 CPU 寄存器内容。同样点击标签 寄存器 (FPU) 可以切换显示寄存器的方式。
信息窗口:显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等。
数据窗口:显示内存或文件的内容。右键菜单可用于切换显示方式。
堆栈窗口:显示当前线程的堆栈。
3.OD快捷键的使用
F2 下断点,也就是指定断点的地址
F3 加载一个可执行程序,进行调试分析
F4 程序执行到光标处
F5 缩小、还原当前窗口
F7 单步步入
F8 单步步过
F9 直接运行程序,遇到断点处,程序暂停
Ctrl+F2 重新运行程序到起始处,一般用于重新调试程序
Ctrl+F9 执行到函数返回处,用于跳出函数实现
Alt+F9 执行到用户代码处,用于快速跳出系统函数
Ctrl+G 输入十六进制地址,快速定位到该地址处
4.初步使用(寄存器)
mov指令:该指令将第二个操作数赋值给第一个操作数 例如MOV EAX, EBX解释为将EBX的值赋值给EAX。
add指令:add 目标操作数 ,源操作数 把源操作数 与目标操作数相加,并且把结果存到目标操作数
例:add eax ,12
sub指令:sub 目标操作数 ,源操作数 用目标操作数相减去源操作数,并且把结果存到目标操作数
例:sub eax ,12
and指令:and 目标操作数 ,源操作数 用目标操作数和源操作数进行与运算,并且把结果存到目标操作数
例:and eax ,12
or指令:or 目标操作数 ,源操作数 用目标操作数和源操作数进行或运算,并且把结果存到目标操作数
五.未完成事项及原因
1.C语言数组的进一步学习
2.花指令的更深入学习 原因:对于汇编的内容学习不够,某些指令目前还理解不了用法
六.下周学习计划
1.继续学习滴水逆向课程
2.学习汇编指令以提高对花指令的认识与使用
3.学习C语言,在PTA上做题提高编程能力
4.结合IDA和OD了解动态调试