提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


文章目录

  • Java sdk环境变量配置
  • 初识花指令
  • OD的初步使用(滴水逆向课程)
  • 未完成事项及原因
  • 下周学习计划



一、JAVA sdk 环境变量的配置(使用apkIDA时配置)

1.下载与安装

下载地址:Java Downloads | Oracle

下载合适的版本 本处我选择的是 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

java os命令注入代码 jdk os命令注入_java os命令注入代码

 

目前尚未学习永真条件跳转与call&ret构造花指令

3.花指令的简单去除(IDA)

修改字节码 找到花指令的关键字节码,将其改为nop


三.OD的初步使用(滴水逆向课程)

1.od窗口

java os命令注入代码 jdk os命令注入_java os命令注入代码_02

 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了解动态调试