IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 【逆向分析课程】复习上篇 -> 正文阅读

[移动开发]【逆向分析课程】复习上篇

逆向课件复习

第一章 逆向分析概述

1.release模式和debug模式下对代码进行编译采用的方法是不一样的,具体表现在汇编代码不同。release模式下做更多的优化处理

2.汇编指令ja和jg

image-20220411170724632

第二章 程序逆向示例

1.运行在Windows平台的exe文件,通常被成为PE文件,而运行在linux平台的exe文件则称为ELF文件,而Android程序则可以直接通过程序的后缀进行判断。

2.判断Windows程序是32位还是64位?32位Windows下不能运行64位的程序,可以轻松判断;64位Windows可以通过反汇编工具查看程序中对应指令使用的寄存器进行判断。

3.从汇编语言中看,mian并不是程序的真正入口

4.IDA pro打开程序时,通常情况下,弹出的第一个窗口就是程序入口(main);另外可能弹出的是程序的直接入口(start)

5."Xrefs graph to…"指的是调用该函数的父函数以及“祖先”,而"Xrefs
graph from…"指的是该函数调用的子函数以及“子孙”

6.栈是程序中一块十分重要的内存空间,程序在加载到系统中时,操作系统会根据需要为其进程分配一块临时的内存空间,用以实现进程内函数调用时参数的传递,以及保存函数内局部变量的值

第三章 文件格式解析

1.Android App安装包ch3_example.apk是一个压缩文件

PE文件格式

2.PE文件使用一个平面地址空间,所有代码和数据被合并在一起。文件内容被划分为不同的区块,区段中包含代码数据,各个区块按照页边界来对齐,区块没有限制大小,是一个连续的结构。每块都有对应的属性,包括是否可读可写。

3.PE文件加载入内存中时,文件的内容几乎能在被装入到内存映射文件中找相同的信息。但是数据之间的位置可能改变,其某项的偏移地址可能区别与原始的偏移地址。

喵言喵语:“几乎”的原因应该是基地址发生变化。

image-20220411194546244

4.基地址:当PE文件通过Windows加载器被装入内存后,内存中的版本被称为模块。映射文件的起始地址被称为模块句柄,可以通过模块句柄访问其他的数据结构。这个初始内存地址就是基地址。

5.相对虚拟地址:RVA只是内存中的一个简单的相对于PE文件装入地址的偏移地址。

6.文件偏移地址:当PE文件存储在磁盘上时,某个数据的位置相对于文件头的偏移量也称为文件偏移地址或者物理地址。文件偏移地址从PE文件的第一个字节开始计数,起始为零。

7.PE文件的结构:从起始位置开始依次是DOS头、PE文件头、节表以及具体的节。

8.从PE文件中读取需要的内容时,正确的方法是按照数据目录表中的字段来进行定位。

9.各种块的描述

名称描述
.text默认的代码区块,它的内容全是指令代码,链接器把所有目标文件的text块连接成一个大的.text块。
.data默认的读/写数据块,全局变量,静态变量一般放在这个区段
.rdata默认只读数据区块,但程序中很少用到该块中的数据,一般两种情况用到,一是MS的链接器产生EXE文件中存放调试目录,二是用于存放说明字符串,如果程序的DEF文件中指定了DESCRIPTIO,字符串就会出现在rdata中。
.idata包含其他外来的DLL的函数及数据信息,即输入表,将.idata区块合并成另一个区块已成为一种惯例,典型的是.rdata区块,默认的,链接器只在创建一个Release模式的可执行文件时才能将idata合并到另外一个区块中。
.edata输出表,当创建一个输出API或数据的可执行文件时,连接器会创建一个.EXP文件,这个文件包含一个.edata区块,其会被加载到可执行文件中,经常被合并到.text或.rdata区块中
.rsrc资源,包括模块的全部资源
.bss未初始化的数据
.crt用于C++运行时所添加的数据
.tlsTLS的意思是线程局部存储器,用于支持通过_declspec(thread)声明的线程局部存储变量的数据
.reloc可执行文件的机制重定向
.sdata相对于全局指针的可被定位的短的读写数据
.pdata异常表
.didat延迟装入输入数据,在非Release模式下可以找到

10.PE文件运行需要借助Windows系统的系统函数。导入表就是帮助载入的PE找到所需调用的函数。

ELF文件格式

11.分成三类:

可执行文件(.out):包含代码和数据,是可以直接运行的程序。其代码和数据都有固定的地址(或相对于基地址的偏移)

可重定向文件(.o):包含基础代码和数据,但它的代码及数据都没有指定绝对地址,适合于与其他文件链接来创建可执行文件或者共享文件

共享文件(.so):称为动态库文件,包含了代码和数据,这些数据是在链接时被链接器和运行时动态链接器使用的

12.ELF文件的组成

ELF头、Program Hear Table、节和节头表

ELF提供两种视图,链接视图是以节为单位,执行视图是以段为单位的。

Program Hear Table描述文件中的各种Segments,用来告诉系统如何创建进程映像

segments是从运行的角度来描述ELF文件,sections是从链接的角度来描述ELF文件。

image-20220411201745523

一个segment包含若干个section

DEX文件

13.Dalvik是Android4.4及之前使用的虚拟机,它使用的是JIT技术来执行代码转译,每次执行应用的时候,Dalvik将程序的代码编译为机器语言执行。

14.java程序编译成class文件,再使用dx工具将所有class文件整合到dex文件,dex是Dalvik可执行文件格式。

class文件dex文件
class文件存在很多冗余信息dex工具去除冗余信息,并减少了I/O操作,提高了类的查找速度,让dex文件执行的更快
运行的虚拟机是JVM是8位运行的虚拟机DVM的字节码指令是16位
JVM执行的是基于虚拟栈的虚拟机DVM是基于寄存器的虚拟机,寄存器存储的速度比栈快的多,比较适合移动设备。

16.Dex文件结构

数据名称解释
文件头headerdex文件头,记录整个dex文件的相关属性
索引区string_ids字符串数据索引
type_ids类型数据索引
proto_ids原型数据索引
field_ids字段数据索引
method_ids类方法索引
class_defs类定义数据索引
数据区data数据区,保存了各个类的真实数据
link_data链接数据区
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-15 00:12:54  更:2022-04-15 00:15:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 20:49:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码