![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
移动安全面试题
文章平均质量分 86
移动安全面试题、逆向、漏洞、系统、hook、动静态分析、加固脱壳、汇编、混淆、调试、反调试、iOS逆向、风控、抓包
移动安全星球
这个作者很懒,什么都没留下…
展开
-
移动安全面试题—抓包
这样,即使服务器使用了自签名证书或抓包工具的证书,应用也会接受。SSL-pinning 是一种安全策略,要求应用只信任预先定义的证书或公钥,而不是系统证书存储中的证书。应用具有强大的抓包检测和防护机制,例如检查代理设置、安装的 SSL 证书、运行环境等,一旦发现异常,会立即采取相应的防护措施(如中断网络请求、退出应用等)。在应用运行时检测抓包工具、代理设置等,如果发现异常,则采取相应的防护措施(如终止网络请求、退出应用等)。替换应用内的 pinned 证书或公钥为抓包工具的证书,使应用信任抓包工具的证书。原创 2023-08-17 08:45:10 · 5030 阅读 · 3 评论 -
移动安全面试题—编程基础
访问速度:栈的访问速度通常比堆快,因为栈有固定的访问顺序(后进先出,LIFO)并由 CPU 寄存器指向栈顶,而堆的内存访问可能涉及较复杂的内存管理操作。内存空间:堆的内存空间通常比栈大,因为堆用于存储动态分配的对象,可能需要更多的内存;栈不容易产生内存碎片,因为栈内存的分配和释放是连续的。Java 栈中的数据类型受到 JVM 规范的限制,而 C 栈具有更大的灵活性,可以存储各种数据类型和结构。根据这些内存段的定义,局部变量通常存放在栈上,而全局变量根据是否初始化,存放在数据段或 BSS 段。原创 2023-08-15 09:07:36 · 4616 阅读 · 0 评论 -
移动安全面试题—风控
设备指纹防护主要包括保护设备指纹的生成、传输和存储过程,以防止设备指纹被篡改、伪造或泄露。需要注意的是,在 native 层获取设备信息可能需要额外的权限,且某些设备信息可能受到系统限制或隐私政策保护。设备信息可变性: 设备指纹中的某些信息可能会随着时间、设备状态或用户操作而发生变化,导致指纹不稳定。设备指纹分析: 分析设备指纹,识别出异常或重复的设备,从而发现可能的群控行为。设备信息泄露: 如果设备指纹中包含敏感信息,可能导致用户隐私泄露。设备信息伪造: 攻击者可能伪造或篡改设备信息,导致设备指纹失效。原创 2023-08-16 08:25:25 · 4863 阅读 · 1 评论 -
移动安全面试题—调试&反调试
对抗方法:使用内核模块或 Xposed 插件拦截对 /proc/self/status 的读取,将 TracerPid 字段设置为 0。对抗方法:使用内核模块或 Xposed 插件拦截对 /proc/self/maps 的读取,移除与调试器相关的内存映射信息。检测 /proc/self/status 中的 TracerPid 字段:如果该字段的值不为 0,则表示有调试器附加。修改 /proc/self/status 中的 TracerPid 字段,伪装成无调试器附加的状态。可能需要结合静态和动态分析工具。原创 2023-08-12 07:46:08 · 4921 阅读 · 0 评论 -
移动安全面试题—iOS相关
通过插入包含砸壳功能的动态库,可以在程序运行时拦截并解密程序的加密部分,实现砸壳的目的。由于已经设置了 DYLD_INSERT_LIBRARIES,dyld 会在程序启动时自动加载砸壳动态库,从而在运行时解密程序的加密部分。导出解密后的程序:在完成上述步骤后,可以使用其他工具(如 class-dump、MachOView 等)导出解密后的程序,以便进一步分析和逆向工程。编写砸壳动态库:首先,我们需要编写一个包含砸壳功能的动态库。获取待砸壳程序的路径:需要获取目标应用程序的路径,以便在稍后的步骤中运行它。原创 2023-08-14 08:48:17 · 5439 阅读 · 0 评论 -
移动安全面试题—系统相关知识
SELinux 通过为操作系统中的对象(如文件、目录、端口等)和进程(如应用程序)之间的访问操作定义一组安全策略来提高系统的安全性。SELinux 的目标是限制进程的权限,使其仅能执行预先定义的操作,从而减少潜在的安全风险和漏洞。启动 Zygote 进程:init进程启动Zygote 进程,这是 Android 系统中所有 Java 应用程序(包括应用和系统服务)的父进程。在 ELF 文件中,section 是用来存储各种类型的信息(例如:代码段、数据段、符号表、重定位表等)。原创 2023-08-10 08:52:59 · 4375 阅读 · 0 评论 -
移动安全面试题—混淆
Java 层混淆:主要通过修改类、方法和变量名称,以及插入无关代码等手段,使得逆向分析变得困难。常见的 Java 层混淆工具有 ProGuard、DexGuard 等。这些工具在 Android 开发中得到了广泛应用,以保护应用的源代码和逻辑。so 层混淆:主要针对 Native 代码(C/C++)进行混淆,包括改变函数名、变量名、数据结构等,以及插入无关代码等。so 层混淆可以进一步提升应用的安全性,防止攻击者轻易分析应用的内部结构和逻辑。原创 2023-08-08 08:57:42 · 4638 阅读 · 0 评论 -
移动安全面试题—加固脱壳
so 加壳通常是指在原始 so 库的基础上,添加一层保护壳,使得分析和逆向工程变得更加困难。脱壳的过程就是去除保护壳,还原原始 so 库。替换 soinfo 的方法主要是 Hook 动态链接器的相关函数,修改加载过程中的 soinfo 结构,使其指向加壳后的 so 库。原创 2023-06-23 21:58:46 · 5755 阅读 · 0 评论 -
移动安全面试题—汇编
ARM 指令集具有较高的代码密度和能效。总之,ARM 指令和字节码指令分别针对硬件和虚拟机设计,具有不同的执行方式和跨平台兼容性。ARM 指令直接在 ARM 处理器上执行,而字节码指令需要在虚拟机中解释执行或通过 JIT 编译成本地代码。花指令(junk instructions)是一种代码混淆技术,它通过在原始代码中插入无关紧要或无害的指令,增加逆向分析的难度。ARM 和 x86 在处理器设计、寄存器数量和指令集方面还有很多其他区别,但这里我们主要关注函数调用约定、函数传参和返回这些方面的区别。原创 2023-06-23 21:57:13 · 5719 阅读 · 0 评论 -
移动安全面试题—漏洞相关
以下是关于栈溢出、格式化字符串漏洞、保护手段、绕过栈上 Canary 保护以及 ROP 攻击原理的简要概述:原创 2023-06-23 21:56:03 · 5640 阅读 · 0 评论 -
移动安全面试题—APP 安全开发
安全开发: 遵循安全编码规范,及时修复已知漏洞,避免使用不安全的接口或组件。加固应用: 采用代码混淆、资源加密、JNI/NDK 等技术,提高破解难度。完整性检测: 对应用签名、哈希值等进行验证,确保应用未被篡改。环境检测: 检测运行环境,如模拟器、root 状态等,以降低攻击者的调试能力。反调试技术: 通过各种手段阻止或干扰攻击者对应用进行调试。安全通信: 使用 HTTPS、TLS 等安全协议进行网络通信,保护数据传输的安全。原创 2023-06-14 10:09:04 · 5717 阅读 · 1 评论 -
移动安全面试题—静态分析&动态分析
静态分析是在不实际运行目标程序的情况下,分析程序代码或二进制文件的一种技术。反编译:使用反编译工具(如 jadx、apktool)将 APK 文件反编译为 Java 代码或 Smali 代码,以便分析程序的逻辑和结构。代码审查:分析反编译后的代码,寻找关键逻辑、算法和敏感数据,以便对目标程序进行深入的理解。符号分析:通过分析函数名、变量名和注释等信息,推测代码的功能和目的。控制流分析:分析代码的执行顺序和跳转情况,了解程序的执行流程。原创 2023-06-13 11:19:39 · 5508 阅读 · 0 评论 -
移动安全面试题—hook技术
Substrate 是一个跨平台的代码修改框架,支持 Android、iOS、macOS 和 Linux 等平台。它允许开发者在运行时修改目标程序的行为。实现原理:Substrate 的 hook 实现方式包括 Inline Hook 和 trampoline 技术。在 Android 平台上,Substrate 主要针对 native 层函数。通过修改目标函数的入口指令,插入跳转到自定义 hook 函数的指令。在 hook 函数中完成自定义操作后,通过 trampoline 跳回目标函数的下一条指令。原创 2023-06-13 11:16:01 · 6615 阅读 · 0 评论