unidbg逆向工程:原理与实践
全新正版 极速发货
¥
74.03
5.7折
¥
129
全新
库存21件
作者陈佳林
出版社机械工业
ISBN9787111741824
出版时间2024-01
装帧平装
开本其他
定价129元
货号1203181639
上书时间2024-07-05
商品详情
- 品相描述:全新
- 商品描述
-
作者简介
陈佳林(ID:r0ysue)<br/>资深安全技术专家,在逆向工程、移动安全领域积累了丰富的经验。曾为政府机关单位提供涉密项目研究开发,多次为银行和电信行业以及政府部门提供安全方面的培训服务。看雪论坛的版主和资深讲师,看雪“安卓高级研修班”负责人,在看雪安全开发者峰会、GeekPwn发表主题演讲,在看雪论坛、安全客、Freebuf等平台发表大量技术文章。著有《安卓Frida逆向与抓包实战》《安卓Frida逆向与协议分析》《Frida安卓SO逆向深入实践》等书籍。开源项目r0capture在Github的star数量超过5000个。
目录
<br />目 录?Contents<br />前 言<br />第一部分 进入unidbg的世界<br />第1章 unidbg环境准备与快速<br />上手 2<br />1.1 r0env环境介绍与集成 2<br />1.1.1 r0env各组件介绍 2<br />1.1.2 r0env下载及安装 5<br />1.2 IDEA安装及配置 6<br />1.3 第一个unidbg项目 7<br />1.3.1 unidbg介绍 7<br />1.3.2 unidbg下载与运行示例 8<br />1.3.3 unidbg示例讲解 9<br />1.4 本章小结 13<br />第2章 unidbg模拟执行初探 14<br />2.1 第一个NDK项目 14<br />2.1.1 使用Android Studio创建NDK项目 14<br />2.1.2 编写自己的so业务代码 16<br />2.2 unidbg的符号调用与地址调用 18<br />2.2.1 unidbg主动调用前置准备 18<br />2.2.2 unidbg主动调用so函数 19<br />2.2.3 unidbg部分API简单讲解 22<br />2.3 本章小结 24<br />第3章 unidbg补环境、Hook与<br />Patch 25<br />3.1 为so添加交互:使用JNI接口<br />编写md5方法 25<br />3.2 使用unidbg修补执行环境并<br />模拟执行 27<br />3.3 脱离编译器,使用命令行<br />编译so 34<br />3.4 unidbg的Hook 36<br />3.5 unidbg的Patch 39<br />3.6 本章小结 42<br />第二部分 unidbg原理<br />第4章 ELF文件执行视图解析 44<br />4.1 ELF文件结构 44<br />4.1.1 ELF头部结构 45<br />4.1.2 程序头部表 47<br />4.1.3 动态节区_DYNAMIC段 51<br />4.2 深入jelf代码细节,探究ELF<br />解析 54<br />4.2.1 分析原版jelf代码 54<br />4.2.2 分析unidbg版jelf代码 56<br />4.3 本章小结 60<br />第5章 Unicorn的初级使用与初探Linker 61<br />5.1 Unicorn的初级使用:模拟执行与Hook 61<br />5.1.1 使用Unicorn进行模拟<br />执行 61<br />5.1.2 Unicorn的Hook 64<br />5.1.3 Keystone与Capstone 70<br />5.2 初探Android系统源码 71<br />5.2.1 Java层代码追踪 73<br />5.2.2 Native层代码追踪 75<br />5.3 本章小结 78<br />第6章 深入Linker:so的加载、<br />链接、初始化 79<br />6.1 so的加载过程 79<br />6.2 so的链接过程 90<br />6.3 so的初始化操作 100<br />6.4 本章小结 102<br />第7章 使用Unicorn模拟Linker:so的加载过程 103<br />7.1 模拟Linker?:环境准备 103<br />7.2 模拟Linker?:so的加载 109<br />7.3 动态调试Linker,探究so的内存<br />布局图 118<br />7.4 本章小结 122<br />第8章 使用Unicorn模拟Linker:<br />so的链接过程 123<br />8.1 so的依赖库加载过程 123<br />8.2 so的动态链接 127<br />8.3 初尝试:使用unidbg模拟执行<br />简单so文件 131<br />8.4 探究unidbg的Linker代码<br />细节 133<br />8.4.1 unidbg加载so文件代码<br />入口 134<br />8.4.2 处理so信息并载入内存 135<br />8.4.3 对so的依赖库进行处理 137<br />8.4.4 重定位操作 138<br />8.4.5 处理so的初始化信息与生成module对象 140<br />8.4.6 执行初始化 141<br />8.5 本章小结 142<br />第9章 R0dbg实战与Unidbg_FindKey 143<br />9.1 模拟Linker?:so的初始化过程 143<br />9.2 指令追踪与排错 147<br />9.2.1 TLS线程局部存储环境<br />初始化 148<br />9.2.2 R0dbg对系统调用进行<br />处理 150<br />9.3 使用R0dbg模拟执行so 152<br />9.4 Unidbg_FindKey牛刀小试 154<br />9.5 本章小结 157<br />第10章 unidbg源码解析:AndroidEmulator 158<br />10.1 创建AndroidEmulator 158<br />10.2 创建FileSystem 165<br />10.3 创建Backend 168<br />10.4 创建SvcMemory 169<br />10.5 本章小结 172<br />第11章 unidbg源码解析:<br />DalvikVM 173<br />11.1 分析createDalvikVM() 173<br />11.2 Dvm相关类介绍 178<br />11.2.1 BaseVM解析 179<br />11.2.2 DalvikVM解析 184<br />11.2.3 DvmObject解析 185<br />11.2.4 DvmClass解析 187<br />11.3 本章小结 188<br />第12章 unidbg源码解析:模拟<br />执行流程追踪 189<br />12.1 编写含JNI交互的MD5算法并<br />模拟执行 189<br />12.1.1 编写含JNI交互的so 189<br />12.1.2 使用unidbg进行模拟<br />执行 190<br />12.2 模拟执行流程追踪:寻找<br />函数 192<br />12.3 模拟执行流程追踪:处理参数<br />并模拟执行 195<br />12.4 本章小结 202<br />第13章 unidbg源码解析:JNI<br />交互流程追踪 203<br />13.1 JNI注册 203<br />13.2 JNI指令执行 208<br />13.3 本章小结 217<br />第14章 unidbg源码解析:<br />Memory 218<br />14.1 Memory模块的创建 218<br />14.2 AndroidElfLoader的方法实现 219<br />14.2.1 内存相关方法实现 219<br />14.2.2 栈空间相关方法实现 226<br />14.2.3 用户常用方法解析 227<br />14.2.4 虚拟模块 230<br />14.3 加载so的loader功能 231<br />14.4 本章小结 237<br />第15章 unidbg源码解析:<br />Hook 238<br />15.1 unidbg的Hook框架 238<br />15.1.1 Hook框架的使用 238<br />15.1.2 Hook源码分析 243<br />15.2 Debugger模块解析 245<br />15.2.1 Console Debugger的<br />使用 245<br />15.2.2 Debugger源码分析 246<br />15.3 本章小结 256<br />第三部分 模拟执行与补环境实战<br />第16章 unidbg实战:I/O重定向 258<br />16.1 分析App的内部逻辑 258<br />16.1.1 了解App的运行流程 258<br />16.1.2 Java层逻辑分析 259<br />16.1.3 so层逻辑分析 262<br />16.2 unidbg模拟执行分析 267<br />16.2.1 unidbg模拟执行saveSN()<br />方法 267<br />16.2.2 unidbg的I/O重定向 269<br />16.3 本章小结 272<br />第17章 unidbg实战:Debugger<br />自吐 273<br />17.1 分析App的内部逻辑 273<br />17.1.1 了解App的运行流程 273<br />17.1.2 Java层逻辑分析 273<br />17.1.3 so层逻辑分析 275<br />17.2 使用unidbg工具进行分析 277<br />17.2.1 使用unidbg进行模拟<br />执行 277<br />17.2.2 使用Debugger模块实现<br />自吐 281<br />17.2.3 使用Patch进行自吐 283<br />17.3 本章小结 286<br />第18章 unidbg实战:指针参数与Debugger 287<br />18.1 指针参数的使用 287<br />18.1.1 对App进行分析 287<br />18.1.2 使用unidbg进行模拟<br />执行 290<br />18.2 快速识别AES算法 295<br />18.2.1 对App进行分析 295<br />18.2.2 使用unidbg进行模拟<br />执行 297<br />18.3 本章小结 301<br />第19章 unidbg实战:魔改Base64还原 302<br />19.1 逆向环境搭建 302<br />19.2 APK分析 303<br />19.3 so文件详细分析 304<br />19.3.1 基本类型手动修改 304<br />19.3.2 主体代码分析 308<br />19.4 使用unidbg辅助分析so 309<br />19.4.1 使用unidbg主动调用<br />Native层的算法 309<br />19.4.2 魔改Base64核心步骤<br />分析 312<br />19.5 本章小结 321<br />第20章 unidbg实战:使用unidbg<br />动态分析内存中的数据 322<br />20.1 环境搭建 322<br />20.2 APK基本分析 323<br />20.2.1 按钮事件分析 323<br />20.2.2 对输入框的内容进行<br />判断 325<br />20.3 使用IDA静态分析so并使用unidbg动态验证 326<br />20.3.1 静态代码块说明 326<br />20.3.2 IDA分析 326<br />20.4 本章小结 337<br />第21章 unidbg实战:使用unidbg<br />主动调用fork进程 338<br />21.1 样本情景复现 338<br />21.2 样本反编译分析 339<br />21.3 so中代码的分析 342<br />21.4 使用unidbg对fork进程中的<br />函数做处理 350<br />21.5 本章小结 356<br />第22章 unidbg补环境实战:<br />补环境入门 357<br />22.1 为什么要补环境 357<br />22.2 unidbg补环境的案例情景<br />复现 357<br />22.3 模拟执行so 361<br />22.3.1 参数获取 361<br />22.3.2 unidbg代码初始化 362<br />22.3.3 目标函数的调用 363<br />22.3.4 补环境说明 363<br />22.3.5 补环境实战 364<br />22.4 本章小结 374<br />第23章 unidbg补环境实战:标识记录 375<br />23.1 样本一:如何补JNI_OnLoad<br />环境 375<br />23.1.1 基本环境搭建 375<br />23.1.2 运行项目,异常分析 376<br />23.2 样本二:文件标识的补环境<br />策略 384<br />23.2.1 环境搭建 384<br />23.2.2 文件标识策略 386<br />23.3 样本总结 395<br />23.4 本章小结 395<br />第24章 unidbg补环境实战:设备风控 396<br />24.1 Android系统API补全策略 396<br />24.1.1 ActivityThread 398<br />24.1.2 android_id 399<br />24.2 目录获取 402<br />24.3 样本最后一个函数的调用 407<br />24.4 本章小结 416<br />第25章 unidbg补环境实战:<br />补环境加强 417<br />25.1 上文回顾 417<br />25.2 样本的框架搭建 417<br />25.3 补环境实操 420<br />25.3.1 getApplication环境<br />补充 420<br />25.3.2 无障碍服务的补环境 423<br />25.4 本章小结 437<br />第26章 unidbg补环境实战:<br />总结 438<br />26.1 补环境初始化 438<br />26.1.1 架构选择 438<br />26.1.2 进程名称初始化 439<br />26.1.3 处理器后端的设置 439<br />26.1.4 Android根目录设置 440<br />26.1.5 Android虚拟机创建 440<br />26.1.6 加载so 440<br />26.2 补环境适用场景 441<br />26.2.1 unidbg的报错 441<br />26.2.2 何时补环境 444<br />26.3 补环境的规范 450<br />26.3.1 通用规则 451<br />26.3.2 复杂类型的规则 452<br />26.4 本章小结 457<br />第四部分 反制与生产环境部署<br />第27章 Anti-unidbg系列:环境<br />变量检测 460<br />27.1 Linux中的环境变量 460<br />27.2 Android中的环境变量 462<br />27.2.1 查看和设置环境变量 462<br />27.2.2 常见环境变量说明 463<br />27.3 环境变量源码解析 465<br />27.3.1 Java层环境变量读取和<br />设置 466<br />27.3.2 Native层环境变量读取和<br />设置 468<br />27.3.3 情景模拟 469<br />27.4 unidbg如何设置环境<br />变量 470<br />27.5 本章小结 472<br />第28章 Anti-unidbg系列:xHook检测 473<br />28.1 xHook的基本使用 473<br />28.1.1 项目简介 473<br />28.1.2 项目编译 474<br />28.1.3 xHook API介绍 476<br />28.1.4 样本编写 478<br />28.2 xHook的原理阐述 479<br />28.2.1 文件编译和测试 479<br />28.2.2 出现的问题 482<br />28.2.3 ELF文件格式 482<br />28.2.4 Linker 486<br />28.2.5 重定向追踪 487<br />28.2.6 内存检索 489<br />28.2.7 跳转验证 491<br />28.3 xHook检测实
— 没有更多了 —
以下为对购买帮助不大的评价