① 套娃之arm架构下的MacBook通过parallels+rosetta安装linux amd64版本的IDA Pro
在MacBook上使用arm架构进行生产力工作是一个创新之举,虽然大部分工具已经能在mac环境下运行,但仍有部分闭源软件,如IDA Pro 7.6版,需要在amd64架构的Linux环境中运行。本文将分享在arm设备上通过Parallels和Rosetta安装Linux amd64版本IDA Pro的实践经验,以供需要的同学参考。
重点在于在arm环境下运行amd64程序,以及利用Parallels Desktop 19的新功能。在Parallels v19之后,苹果官方支持在arm虚拟机中运行amd64程序,用户可通过创建一个预配置的Ubuntu 22.04虚拟机镜像,选择带有x86_64模拟功能的选项。
首先,在虚拟机中安装IDA Pro 8.3,但可能会遇到ldd报错,因为虚拟机默认组件不完整,需要额外安装binutils等组件。作者逐步安装了amd64架构的binutils和其他缺失的库,如libGL.so.1、libgthread-2.0.so.0等,同时解决了Qt插件加载问题。
在安装过程中,遇到了ldd跨架构运行的问题,因为原版ldd无法识别amd64程序。通过分析ldd脚本发现,需要针对不同架构调整ld-linux动态链接库。作者将ld-linux-x86-64.so.2替换到amd64架构下,解决了ldd的运行问题,进而解决了所有依赖库缺失的问题。
最终,IDA Pro成功安装并运行,包括idapython的兼容问题也得到了解决。这个过程不仅适用于IDA Pro,也适用于其他跨架构软件的安装。通过这些步骤,arm架构的MacBook可以流畅地运行Linux上的amd64版本软件,如IDA Pro。
② Android软件安全与逆向分析的书名
本书由浅入深、循序渐进地讲解了Android 系统的软件安全、逆向分析与加密解密技术。包括Android软件逆向分析和系统安全方面的必备知识及概念、如何静态分析Android 软件、如何动态调试Android 软件、Android 软件的破解与反破解技术的探讨,以及对典型Android 病毒的全面剖析。
本书适合所有Android 应用开发者、Android 系统开发工程师、Android 系统安全工作者阅读学习。 丰生强(网名非虫)
Android软件安全专家。看雪论坛Android安全版版主;安卓巴士开发交流版版主。
对Android软件与系统安全有狂热的爱好和独到的见解,对Android系统的全部源代码进行过深入地研究和分析。逆向分析实战经验丰富。
在国内信息安全杂志上发表过多篇有价值的软件安全文章,目前就职于国内某Android开发企业,常年混迹于看雪论坛(ID非虫)。
作者邮箱:[email protected]
愿与国内安全爱好者共同交流与探讨安全技术。 第1章 Android程序分析环境搭建11.1 Windows分析环境搭建11.1.1 安装JDK11.1.2 安装Android SDK31.1.3 安装Android NDK51.1.4 Eclipse集成开发环境61.1.5 安装CDT、ADT插件61.1.6 创建Android Virtual Device81.1.7 使用到的工具91.2 Linux分析环境搭建91.2.1 本书的Linux环境91.2.2 安装JDK91.2.3 在Ubuntu上安装Android SDK101.2.4 在Ubuntu上安装Android NDK111.2.5 在Ubuntu上安装Eclipse集成开发环境121.2.6 在Ubuntu上安装CDT、ADT插件131.2.7 创建Android Virtual Device131.2.8 使用到的工具151.3 本章小结15第2章 如何分析Android程序162.1 编写第一个Android程序162.1.1 使用Eclipse创建Android工程162.1.2 编译生成APK文件192.2 破解第一个程序202.2.1 如何动手?202.2.2 反编译APK文件202.2.3 分析APK文件212.2.4 修改Smali文件代码262.2.5 重新编译APK文件并签名262.2.6 安装测试272.3 本章小结28第3章 进入Android Dalvik虚拟机293.1 Dalvik虚拟机的特点——掌握Android程序的运行原理293.1.1 Dalvik虚拟机概述293.1.2 Dalvik虚拟机与Java虚拟机的区别293.1.3 Dalvik虚拟机是如何执行程序的343.1.4 关于Dalvik虚拟机JIT(即时编译)363.2 Dalvik汇编语言基础为分析Android程序做准备373.2.1 Dalvik指令格式373.2.2 DEX文件反汇编工具393.2.3 了解Dalvik寄存器403.2.4 两种不同的寄存器表示方法——v命名法与p命名法423.2.5 Dalvik字节码的类型、方法与字段表示方法433.3 Dalvik指令集443.3.1 指令特点453.3.2 空操作指令453.3.3 数据操作指令463.3.4 返回指令463.3.5 数据定义指令463.3.6 锁指令473.3.7 实例操作指令473.3.8 数组操作指令483.3.9 异常指令483.3.10 跳转指令483.3.11 比较指令493.3.12 字段操作指令503.3.13 方法调用指令503.3.14 数据转换指令513.3.15 数据运算指令513.4 Dalvik指令集练习——写一个Dalvik版的Hello World523.4.1 编写smali文件523.4.2 编译smali文件543.4.3 测试运行543.5 本章小结55第4章 Android可执行文件564.1 Android程序的生成步骤564.2 Android程序的安装流程594.3 dex文件格式664.3.1 dex文件中的数据结构664.3.2 dex文件整体结构684.3.3 dex文件结构分析714.4 odex文件格式804.4.1 如何生成odex文件804.4.2 odex文件整体结构814.4.3 odex文件结构分析834.5 dex文件的验证与优化工具dexopt的工作过程884.6 Android应用程序另类破解方法914.7 本章小结93第5章 静态分析Android程序945.1 什么是静态分析945.2 快速定位Android程序的关键代码945.2.1 反编译apk程序945.2.2 程序的主Activity955.2.3 需重点关注的Application类955.2.4 如何定位关键代码——六种方法965.3 smali文件格式975.4 Android程序中的类1005.4.1 内部类1005.4.2 监听器1025.4.3 注解类1055.4.4 自动生成的类1085.5 阅读反编译的smali代码1105.5.1 循环语句1105.5.2 switch分支语句1155.5.3 try/catch语句1215.6 使用IDA Pro静态分析Android程序1275.6.1 IDA Pro对Android的支持1275.6.2 如何操作1285.6.3 定位关键代码——使用IDA Pro进行破解的实例1325.7 恶意软件分析工具包——Androguard1355.7.1 Androguard的安装与配置1355.7.2 Androguard的使用方法1375.7.3 使用Androguard配合Gephi进行静态分析1445.7.4 使用androlyze.py进行静态分析1485.8 其他静态分析工具1525.9 阅读反编译的Java代码1525.9.1 使用dex2jar生成jar文件1525.9.2 使用jd-gui查看jar文件的源码1535.10 集成分析环境——santoku1545.11 本章小结156第6章 基于Android的ARM汇编语言基础——逆向原生!1576.1 Android与ARM处理器1576.1.1 ARM处理器架构概述1576.1.2 ARM处理器家族1586.1.3 Android支持的处理器架构1596.2 原生程序与ARM汇编语言——逆向你的原生Hello ARM1606.2.1 原生程序逆向初步1606.2.2 原生程序的生成过程1626.2.3 必须了解的ARM知识1646.3 ARM汇编语言程序结构1666.3.1 完整的ARM汇编程序1666.3.2 处理器架构定义1676.3.3 段定义1686.3.4 注释与标号1696.3.5 汇编器指令1696.3.6 子程序与参数传递1706.4 ARM处理器寻址方式1706.4.1 立即寻址1706.4.2 寄存器寻址1716.4.3 寄存器移位寻址1716.4.4 寄存器间接寻址1716.4.5 基址寻址1716.4.6 多寄存器寻址1716.4.7 堆栈寻址1726.4.8 块拷贝寻址1726.4.9 相对寻址1726.5 ARM与Thumb指令集1736.5.1 指令格式1736.5.2 跳转指令1746.5.3 存储器访问指令1756.5.4 数据处理指令1776.5.5 其他指令1846.6 用于多媒体编程与浮点计算的NEON与VFP指令集1856.7 本章小结186第7章 Android NDK程序逆向分析1877.1 Android中的原生程序1877.1.1 编写一个例子程序1877.1.2 如何编译原生程序1887.2 原生程序的启动流程分析1947.2.1 原生程序的入口函数1947.2.2 main函数究竟何时被执行1987.3 原生文件格式1997.4 原生C程序逆向分析2007.4.1 原生程序的分析方法2007.4.2 for循环语句反汇编代码的特点2047.4.3 if...else分支语句反汇编代码的特点2087.4.4 while循环语句反汇编代码的特点2117.4.5 switch分支语句反汇编代码的特点2157.4.6 原生程序的编译时优化2187.5 原生C++程序逆向分析2227.5.1 C++类的逆向2227.5.2 Android NDK对C++特性的支持2257.5.3 静态链接STL与动态链接STL的代码区别2277.6 Android NDK JNI API逆向分析2327.6.1 Android NDK提供了哪些函数2327.6.2 如何静态分析Android NDK程序2337.7 本章小结235第8章 动态调试Android程序2368.1 Android动态调试支持2368.2 DDMS的使用2378.2.1 如何启动DDMS2378.2.2 使用LogCat查看调试信息2388.3 定位关键代码2408.3.1 代码注入法——让程序自己吐出注册码2408.3.2 栈跟踪法2448.3.3 Method Profiling2478.4 使用AndBug调试Android程序2508.4.1 安装AndBug2518.4.2 使用AndBug2518.5 使用IDA Pro调试Android原生程序2548.5.1 调试Android原生程序2558.5.2 调试Android原生动态链接库2568.6 使用gdb调试Android原生程序2608.6.1 编译gdb与gdbserver2608.6.2 如何调试2628.7 本章小结264第9章 Android软件的破解技术2659.1 试用版软件2659.1.1 试用版软件的种类2659.1.2 实例破解——针对授权KEY方式的破解2659.2 序列号保护2719.3 网络验证2729.3.1 网络验证保护思路2729.3.2 实例破解——针对网络验证方式的破解2739.4 In-app Billing(应用内付费)2779.4.1 In-app Billing原理2779.4.2 In-app Billing破解方法2809.5 Google Play License保护2819.5.1 Google Play License保护机制2819.5.2 实例破解——针对Google Play License方式的破解2839.6 重启验证2849.6.1 重启验证保护思路2859.6.2 实例破解——针对重启验证方式的破解2859.7 如何破解其他类型的Android程序2969.7.1 Mono for Android开发的程序及其破解方法2969.7.2 Qt for Android开发的程序及其破解方法3019.8 本章小结309第10章 Android程序的反破解技术31010.1 对抗反编译31010.1.1 如何对抗反编译工具31010.1.2 对抗dex2jar31110.2 对抗静态分析31210.2.1 代码混淆技术31210.2.2 NDK保护31510.2.3 外壳保护31610.3 对抗动态调试31610.3.1 检测调试器31610.3.2 检测模拟器31710.4 防止重编译31810.4.1 检查签名31810.4.2 校验保护31910.5 本章小结320第11章 Android系统攻击与防范32111.1 Android系统安全概述32111.2 手机ROOT带来的危害32111.2.1 为什么要ROOT手机32111.2.2 手机ROOT后带来的安全隐患32211.2.3 Android手机ROOT原理32211.3 Android权限攻击32911.3.1 Android权限检查机制32911.3.2 串谋权限攻击33311.3.3 权限攻击检测33611.4 Android组件安全33911.4.1 Activity安全及Activity劫持演示34011.4.2 Broadcast Receiver 安全34311.4.3 Service安全34511.4.4 Content Provider安全34611.5 数据安全34711.5.1 外部存储安全34711.5.2 内部存储安全34811.5.3 数据通信安全35011.6 ROM安全35111.6.1 ROM的种类35211.6.2 ROM的定制过程35211.6.3 定制ROM的安全隐患35911.6.4 如何防范36011.7 本章小结361第12章 DroidKongFu变种病毒实例分析36212.1 DroidKongFu病毒介绍36212.2 配置病毒分析环境36312.3 病毒执行状态分析36412.3.1 使用APIMonitor初步分析36512.3.2 使用DroidBox动态分析36912.3.3 其他动态分析工具37312.4 病毒代码逆向分析37612.4.1 Java层启动代码分析37612.4.2 Native层启动代码分析38112.4.3 Native层病毒核心分析39312.5 DroidKongFu病毒框架总结40412.6 病毒防治40612.7 本章小结406