Android逆向学习(十一) IDA动态调试Android so文件

一、 写在前面

这是吾爱破解论坛正己大大的第12个教程,并且发现一个神奇的事情,正己大大的教程竟然没有第11个,感觉很奇怪

写这个博客的主要原因是希望提供一种新的解法,并且记录自己android逆向学习的过程,所以本博客会有很多实际操作的方法,喜欢的话可以点个免费的赞

我的操作系统还是用的linux,windows也可以,流程也基本是一样的

二、课程目标

了解so加载流程,IDA开启动态调试,SO的防护手段。

三、课程内容

1. android中so文件的加载

直接看源代码:https://android.googlesource.com/platform/libcore/+/15d8280/luni/src/main/java/java/lang/System.java

可以简单了解调用so文件的流程:

Java 层 → System.loadLibrary → Runtime → VM ClassLoader → linker(android_dlopen_ext) → mmap so → 解析 ELF → JNI_OnLoad → so 注册方法 → Java 可以调用

其实就是通过JNI_OnLoad的方法把so文件给加载进来。

2. IDA对android的so文件动态调试

首先在IDA pro的安装路径下面找到android_server,选择对应的架构

在这里插入图片描述

然后使用命令将android_server上传到/data/local/tmp路径下,赋权并以root用户运行,这个类似于之前使用frida调试。

adb push android_server /data/local/tmp

上传之后先使用adb shell 启动android中的shell,然后按照下面流程走,就可以启动android_server

apollo:/ $ su
apollo:/ # cd /data/local/tmp
apollo:/data/local/tmp # ls
android_server  frida-server-16.7.14-android-arm64
apollo:/data/local/tmp # chmod 755 android_server                              
apollo:/data/local/tmp # ./android_server                                      
IDA Android 64-bit remote debug server(ST) v9.0.30. Hex-Rays (c) 2004-2024
2025-07-23 21:59:09 Listening on 0.0.0.0:23946...

和上个博客一样,打开ida pro,并分析对应的so文件

在这里插入图片描述

之后转发手机的23946端口

方法就是打开一个新的命令行窗口,并且输入

adb forward tcp:11111 tcp:23946

调整IDA pro的debug设置

首先是Debugger -> Switch Debugger选择远程android

在这里插入图片描述

然后是Debugger -> Debugger options
在这里插入图片描述

还有Debugger -> Process options

在这里插入图片描述

之后正常安装应用,并打开运行应用,并且打开加载的so部分的activity,也就是第七关,并且要触发so文件加载,也就是先随便一个验证一下,这样so文件加载之后,打开之后点击Debugger -> Attach to Process

然后ctrl+F搜索对应的线程

在这里插入图片描述

选择对应线程就会出现这个窗口,出现这个窗口说明我们加载成功了

在这里插入图片描述

然后点same后,从右边的modules中选择对应的so文件

在这里插入图片描述

并找到对应的check函数

在这里插入图片描述

双击之后就可以打断点调试了

在这里插入图片描述

然后点击Debugger ->Continue process,就可以进行调试了,F9 运行,F8 单步步过

点击手机上的验证,可以看到线程被卡到标点处了,需要注意的是如图中,w22代表寄存器的低 32 位,也就是右边x22的后几位,可以看到MOV W22, #1后,右边寄存器也发生了变化

在这里插入图片描述

这个有个小失误,就是在上一个博客中,已经对代码进行了修改,使其一直返回true,也就是这段代码,然后忘记改回来了

MOV W22, #1

所以这次为了验证动态调试修改有效,所以这次就动态修改为返回false,对寄存器进行修改,修改成全0,然后F9继续

在这里插入图片描述

就会发现原来一直成功的变成失败了,说明之前的修改起效了

在这里插入图片描述

3. SO的防护手段

这一段就是代码混淆技术,这个代码混淆技术就是比较概念性的东西,这里就不进行描述了,因为写这个教程主要是为了记录实际操作的过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/96245.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/96245.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/96245.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django全栈班v1.03 Linux常用命令 20250911 下午

课程定位 命令行 ! 黑客专属。 这套视频带你从Linux小白到命令行大师,涵盖文件管理文本处理系统监控网络操作。 零基础也能30分钟掌握程序员必备的技能。 课程亮点 1、零基础友好:从最基础的ls,cd命令开始,循序渐进 2、实战导向&a…

离线应用开发:Service Worker 与缓存

引言:离线应用开发在 Electron 中的 Service Worker 与缓存核心作用与必要性 在 Electron 框架的开发实践中,离线应用开发是提升用户体验和应用可用性的关键技术,特别是使用 Service Worker 实现缓存和离线功能,结合 Node.js 处理…

英发睿能闯关上市:业绩波动明显,毅达创投退出,临场“移民”

撰稿|张君来源|贝多商业&贝多财经近日,四川英发睿能科技股份有限公司(下称“英发睿能”)递交招股书,报考在港交所上市。据贝多商业&贝多财经了解,英发睿能还于9月3日披露《整体协调人公告-委任&…

Elixir通过Onvif协议控制IP摄像机,ExOnvif库给视频流叠加字符

Elixir 通过 ExOnvif 库,Onvif 协议可以控制IP摄像机等设备,这篇文章记录:使用ExOnvif库,给视频流叠加文字,使用ExOnvif库的接口模块:ExOnvif.Media、ExOnvif.Media2。 ExOnvif官方文档 此文章内容&#xf…

线程安全相关的注解

主要有下面三个加在类上的线程安全相关的注解。一.Immutable标记一个类为不可变的。这意味着该类的实例在构造完成后,其状态(数据)永远不能被更改。实现不可变性的严格条件(Java内存模型中的定义):所有字段…

基于Springboot + vue3实现的在线智慧考公系统

项目描述本系统包含管理员、教师、用户三个角色。管理员角色:用户管理:管理系统中所有用户的信息,包括添加、删除和修改用户。配置管理:管理系统配置参数,如上传图片的路径等。权限管理:分配和管理不同角色…

赋能高效设计:12套中后台管理信息系统通用原型框架

中后台管理信息系统是企业数字化转型的核心引擎,肩负着提升运营效率、赋能精准决策的重任。面对多样化的业务场景和复杂的逻辑需求,如何快速、高质量地完成系统设计与原型构建,成为产品、设计与开发团队共同面临的挑战。 为此,一套…

LangGraph中ReAct模式的深度解析:推理与行动的完美融合——从理论到实践的智能Agent构建指南

在人工智能的演进历程中,ReAct(Reasoning and Acting)模式无疑是最具革命性的突破之一。它不仅仅是一种技术实现,更是对智能Agent思维模式的深刻重构。而LangGraph,作为这一理念的优秀实践者,将ReAct模式演…

蜂窝物联网模组在换电柜场景的发展前景分析

蜂窝物联网模组在换电柜场景中正迎来爆发式增长机遇,特别是在Cat.1技术路线主导的市场格局下,其应用价值已从基础通信服务拓展至安全监测、智能管理、电池溯源等核心领域,成为换电柜行业标准化、智能化升级的关键技术支撑。随着2025年新国标全…

机器学习之K折交叉验证

为了更好的评估机器学习训练出模型的泛化能力,即避免模型在训练集上表现良好,但在未见过的数据上表现不佳(即过拟合),同时也减少了单一训练/测试集划分带来的随机性影响。一、什么是K折交叉验证?1、将数据集…

详细解读k8s的kind中service与pod的区别

Pod 是运行应用实例的“容器”,而 Service 是访问这些 Pod 的“稳定网络门户”。Pod(容器组)1. 核心概念: Pod 是 Kubernetes 中可以创建和管理的最小、最简单的计算单元。一个 Pod 代表集群上正在运行的一个工作负载实例。2. 职责…

python---PyInstaller(将Python脚本打包为可执行文件)

在Python开发中,我们常需要将脚本分享给不熟悉Python环境的用户。此时,直接提供.py文件需要对方安装Python解释器和依赖库,操作繁琐。PyInstaller作为一款主流的Python打包工具,能将脚本及其依赖打包为单个可执行文件(…

利用归并算法对链表进行排序

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };这里是链…

论文阅读_大模型情绪分析预测股票趋势

英文名称:Stock Price Trend Prediction using Emotion Analysis of Financial Headlines with Distilled LLM Model 中文名称:利用蒸馏大型语言模型对财务新闻标题情绪分析以预测股价趋势 链接: https://dl.acm.org/doi/pdf/10.1145/3652037.3652076作…

websocket和socket区别

websocket和socket区别,这是一个非常经典的问题。简单来说,Socket 是构建网络通信的工具和基础,而 WebSocket 是建立在它之上的一种具体的通信协议。可以把它们的关系想象成:Socket 像是修路和建立交通规则的基础工程。它定义了车…

网络复习1

1.网络协议栈 一般一个主机内的应用(进程)进行通信,直接在操作系统层面进行 进程交互即可。而不同位置两台主机进行通信需要通过网线传输信号,因此 这些通信的数据为网络数据,而网络数据进程传输必须从应用层依次向下…

AFSim2.9.0学习笔记 —— 4.2、ArkSIM文件结构介绍及项目结构整理

🔔 AFSim2.9.0 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 若还没有下载AFSim2.9.0完整软件或源码,请先进入本人另篇文章了解下载。 文章概要 本文主要对上篇…

hbuilderx配置微信小程序开发环境

hbuilderx配置微信小程序开发环境 借鉴HbuilderX微信开发者工具配置_hbuilder和微信开发者工具-CSDN博客 在微信开发者工具的设置选项的安全设置打开服务端口 在hbuidex的工具的设置选项的运行配置的微信开发者工具路径的方框输入 D:/software/wxchatmini 方可成功&#xf…

AUTOSAR Adaptive Platform 日志与追踪 (Log and Trace) 规范深度解析

<摘要> [R22-11 AUTOSAR Adaptive Platform (AP) 日志规范是AUTOSAR标准体系中针对高性能计算域&#xff08;如自动驾驶、智能座舱&#xff09;的关键组成部分。本文对AUTOSAR AP日志与追踪&#xff08;Log and Trace, LT&#xff09;进行了系统性解析&#xff0c;涵盖了…

[硬件电路-179]:集成运放,虚短的是电压,虚断的是电流

集成运放&#xff08;运算放大器&#xff09;中的“虚短”和“虚断”是分析其线性应用&#xff08;如反相放大器、同相放大器等&#xff09;时的两个核心概念&#xff0c;它们分别描述了运放输入端的电压和电流特性。以下是详细解释&#xff1a;1. 虚短&#xff08;Virtual Sho…