Android IDA 动态调试so(过掉JNI_Onload调试检测)笔记

IDA Pro实战:Android so文件静态分析与动态调试全解析 在移动安全与逆向工程领域,共享对象库(so文件)作为承载Android应用核心逻辑与加密算法的关键组件,其分析技术是安全审计、漏洞挖掘与恶意代码研究的基石。理解ELF文件格式、ARM/Thumb指令集及JNI交互机制是分析工作的核心原理。掌握静态分析(反汇编、反编译、交叉引用)与动态调试(断点控制、内存修改、寄存器监控)相结合的方法,能高效定位加密算法、验证安全假设并绕过保护机制,极大提升逆向工程效率与深度。本文聚焦IDA Pro在Android so文件分析中的实战应用,涵盖环境搭建、反调试对抗、Frid 阅读详情

链接:https://pan.baidu.com/s/1oOH9RgukXJcXianq8jgYhg 
提取码:5lzf 
这个是我调试的样本APK,是阿里逆向前几年的一道题。

拿到APK,先用apktool 解包

apktool d ali.apk ,解包之后打开文件夹发现存在so文件,于是用JEB或者android killer打开APK

先查找入口主类,发现是com.yaotong.crackme.MainActivity 

然后看到android:bebuggable ="true"这个属性并没有在APK里面,想要动态调试APK的话,那么待会我就需要添加这段代码 。

先点开主类查看函数

 

主界面只有一个Button,所以button点击的函数事件就是检测密码,然后这个函数securityCheck()是注册在so文件里面的, 使用IDA 打开so文件,查看securityCheck()函数 

然后F5反汇编,其中这段代码是说输入密码和正确密码逐位对比,所以我们可以动态调试so输出正确密码

 

但是这题不可能有这么简单,CTRL+S查看init_array,没发现什么异常,再检测JNI_Onload,看到里面有一大堆代码,猜测应该是用来反调试用的(反调试手段不可能就只有个android:debuggable="false"或者不加这个属性这么简单,大多数情况会在init_array或者JNI_Onload开启线程检测TracePid或者端口23946之类的,因为程序启动的时候最先JNI_Onload和init_array是在主界面启动之前响应,所以在这里面加入反调试代码最好)

然后修改 AndroidManifest.xml添加android:debuggable="true",打包APK:apktool b ali -o ll.apk,使用签名工具对ll.apk进行签名,这里我用的是android killer进行签名,使用adb 命令将APK安装到手机 adb install C:\Users\a1046\Desktop\SecretJungle\ll_sign.apk

想要动态调试so文件,需要将IDA pro里面的android_server push 到手机 /data/local/tmp文件夹下,并赋予777权限

adb push XXXXX(路径)\android_server /data/local/tmp 

adb shell 

su 

cd /data/local/tmp

chmod -R 777 android_server,然后ls -al 查看,然后./android_server启动,重开一个cmd,输入adb forward tcp:23946 tcp:23946,然后以调试模式启动程序 adb shell am start -D -n com.yaotong.crackme/.MainActivity

打开IDA ,点击debugger->select debugger ,这样选择,然后确定

然后再Debugger->process options 进行如下设置

然后Debugger->attach to process ,找到目标进程 点击进去

 

接下来出现的选项点yes,然后Debugger->Debugger options进行如下设置

设置好了之后按F9,启动程序,打开ddmx(SDK tools 文件夹),打开cmd输入jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700,然后接着f9,直到jdb attach 住了(IDA出现的界面选项中 有yes点yes,有same 点same);

再linker加载进来之后ctrl+s搜索目标so ,看到so已经加载进来

cancel,然后再右侧moudules中搜索so 打开Jni_onload,下个断点,F9,出现选项点yes;

 

 

接着开始F7 F8单步调试。多次调试发现在运行玩BLX R7之后程序会退出,那么此处应该就是反调试检测机制了。

打开R7寄存器 出现pthread_create ,证明猜测正确

然后使用用IDA pro静态打开so 文件 找到汇编代码,产看blx R7 的十六进制,37 FF 2F E1

使用010 Editor或者win hex修改成 00 00 00 00 就是直接nop掉这条指令(直接删除指令的话,文件会发生错乱,因为so文件有固定的格式,比如很多段的内容,每个段的偏移值都是保存的,这样删除的话会影响偏移值)。

然后重新打包,签名,安装到手机,之后就是正常的动态调试了,启动程序,启动android_server ,转发端口

打开IDA->Debugger ->attach->Remote Armlinux/Android Debugger ,确定

找到com.yaotong.crackme进程点击进去。在modules查看crackme.so 打开SecurityCheck函数,下个断点,F9在手机上随便输入密码:crackSample,开始单步调试

调试到这的时候,点击R0寄存器查看 发现是我输入的密码

那么R2应该就是正确密码了,为aiyou,bucuoo(0x61为a)

打开程序检测 输入 ,正确 搞定

 

 

 

安卓逆向_21 --- Java层和so层的反调试( IDA 动态调试 JNI_OnLoad、init_array下断) 1. 安卓程序动态调试条件 安卓程序动态调试条件 ( 2个满足1个即可 ): 1. 在 AndroidMainfest.xml ---> application 标签下,设置或者添加属性android:debuggable="true" 2. 系统默认模式,在 build.prop(boot.img),ro.debuggable=1 And... 阅读详情

相关推荐

【APP逆向】动态调试so库

文章目录一、IDA server安装1、把本地IDA server文件推送进手机目录2、进入手机shell3、修改权限运行server二、了解反调试策略三、反调试处理方法1、给app加上可调式权限2、检查flags中是否有应许debug项3、以调试模式启动APP APP此时会挂住4、以调试模式启动APP APP此时会挂住 一、IDA server安装 1、把本地IDA server文件推送进手机目录 adb push android_server(cpu型号要对应 模拟器是x86) /data/loc

ssrf 2067

【iOS逆向与安全】越狱检测与过检测附ida伪代码

放入项目运行,用 ida 打开后 F5 得到下面的。首先在网上查找一些检测代码。用 frida hook。

六桥风月IT随笔 2767

IDA Pro远程调试Android so库:告别盲调,掌握动态分析核心技巧

动态调试是软件逆向工程和安全分析中的关键技术,它允许分析者在程序运行时实时观察其内部状态,包括寄存器值、内存数据和执行流程。其原理是通过调试器与目标进程建立连接,控制指令执行流,并在预设断点处暂停,从而实现对程序行为的深度洞察。这项技术的核心价值在于能够绕过代码混淆和加密,直接观察算法的实际输入输出与中间状态,极大提升了分析复杂逻辑、加密算法和漏洞的效率和准确性。在移动安全、软件逆向、漏洞挖掘和恶意代码分析等场景中,动态调试是理解黑盒闭源程序行为的必备手段。本文聚焦于使用业界标准工具IDA Pro对Andr

diaoju3333的博客 1259

No JNI_OnLoad问题解决

报错问题如下: 04-29 13:53:12.184: D/dalvikvm(361): Trying to load lib /data/data/com.conowen.helloworld/lib/libHelloWorld.so 0x44edea98 04-29 13:53:12.204: D/dalvikvm(361): Added shared lib /data/data/com

tianqingtz的专栏 8773

Android SO库跨平台动态调试实战:从IDA配置到反调试绕过

动态调试是理解程序运行时行为的关键技术,它允许分析者在程序执行过程中实时监控内存、寄存器和指令流。其核心原理是通过调试器与目标进程建立通信,实现断点设置、单步执行和状态查看。在移动安全与逆向工程领域,这项技术对于分析原生代码(如Android SO库)的价值尤为突出,能有效应对静态分析难以处理的加解密、协议解析等动态逻辑。典型的应用场景包括漏洞挖掘、恶意软件分析和应用性能优化。本文聚焦于使用IDA Pro对Android SO库进行跨平台动态调试,详细介绍了通过ADB建立调试通道、配置远程调试器以及应对反调

weixin_30631587的博客 970

在JNI_onload函数处下断点避开针对IDA的反调试

一、在JNI_onload函数处下断点避开针对IDA的反调试 为了防止apk中的so文件被动态调试,开发者往往会使用一些反调试手段来干扰黑客的动态调试。其中最常见的就是在so文件中检测TracerPid值。通过在JNI_onload下断点即可避开反调试。 二、反调试原理 1、ptrace:是系统调用的一个方法

武天旭的博客 1718

ubuntu 编译移植库总结

Ubuntu 版本的命名规则和开发代号等科普 https://www.jianshu.com/p/5ce0dc0525c4 Linux 下编译安装软件,找不到共享库 xx.so 的分析 解决 办法 https://www.cnblogs.com/digdeep/p/4801467.html Ubuntu设置和查看环境变量 https://blog.csdn.net/white...

what, when, why, how... 534

小型游戏《笑傲江湖之精忠报国》全过程源代码

小型游戏《笑傲江湖之精忠报国》全过程源代码

IDA调试检测

查看 /proc/pid/status 目录下的 tracePid 是否为0 若为0 则未被调试 若不为0 则被调试。time()函数 time_t结构体 clock()函数 clock_t结构体 gettimeofday()函数。比如说:我们写了一个demo apk 来调用so文件(要调试的apk比较大 环境比较复杂 调试的时候容易跑蹦)如果IDA动态调试走到此断点处 IDA会正常的处理此断定指令 但是我们的信号处理函数已经将此指令处理完毕。有可能在内联汇编中做此反调试 反调试设置的地方在其周围。

Codeoooo 博客 2012

(实战)[re:Invent 2018]-001:赛道分析-(致敬1024)

打印log

Rainbow 2779

PostGIS 小白入门详细指南

PostGIS 是 PostgreSQL 的一个扩展,它将 PostgreSQL 转变为一个功能强大的空间数据库,使其能够存储、查询和分析地理空间数据。PostGIS 遵循开放地理空间联盟(OGC)的标准,支持各种空间数据类型和操作,如点、线、多边形、缓冲区、空间连接等。存储各种空间数据类型(如几何类型和地理类型)空间索引,提高查询性能丰富的空间函数和操作支持投影和坐标系统转换城市规划与管理环境监测与分析物流与运输优化地图制作与可视化位置服务与导航。

落魄书生的职业学习生涯 1万+

【手游逆向】初探Unity3d+il2cpp.so网游修改新手教程篇[内附所有相关工具下载地址和说明介绍】

此文由于先发布到了吾爱破解,所以图片带有水印,点我看原文 这里找的是一款Himi喜欢的韩国游戏厂商Fincon公司使用Unity3d制作的3DMMORPG 《HelloHeroEpicBattle》(apk并附带obb,附件过大,这里附上下载链接:点我下载 ,google play地址:点我查看 ) 【第一步】:对安装apk进行取出必要的两个文件(通过解压工具解压、或者直接在双击apk,直接找到两个文件拖拽出来): 1. apk/assets/bin/Data/Ma...

李华明Himi 9376

AlphaFold-multimer实战:从零开始预测STAT1-STAT2蛋白复合物结构

本文详细介绍了使用AlphaFold-multimer从零开始预测STAT1-STAT2蛋白复合物结构的完整实战流程。内容涵盖环境配置、数据库准备、序列处理、参数优化及结果可信度评估,为研究者利用这一AI工具进行复合物结构预测提供了系统指南和深度解析。

weixin_29094301的博客 886

IDA动态调试so源码 F5伪代码查看

今天已是国庆的第五天,白天去武馆训练过后,晚上回来品一杯西湖龙井,更一篇博客,一来帮助需要之人,二来加深自己的理解。 下面就说关于在IDA中Android so的动态调试的问题以及在so的三个层次下断点的操作。 问题篇: 1.动态调试的作用以及与我们常说的脱壳区别之处? 2.IDA的下断点调试的原理? 3.有无反调试的步骤区别?以及原理? 4.反调试与反附加的区

六桥风月IT随笔 8254

攻克Windows平台3DGS复现:从环境配置到可视化实战全记录

本文详细记录了在Windows平台成功复现3D Gaussian Splatting(3DGS)的完整流程,涵盖从环境配置、依赖安装、数据准备到模型训练与可视化的全步骤。重点解决了Windows下CUDA版本匹配、Visual Studio编译及SIBR_viewers可视化工具部署等核心难题,为开发者提供了一份详实的避坑指南与实战手册。

weixin_28839699的博客 252

三维重建(十八)——colmap的使用(粗浅)

三维重建(十八)——colmap的使用(粗浅)

河海大学研究生在读的学习笔记 1374

ida动态调试so文件,踩坑记录

正常流程 1.推送文件 adb push android_server 注意模拟器选x86系列, 真机的话要选android_server 不要选armlinux!!! 2.进入shell adb shell 真机要用su切换到root用户,模拟器不用 su 进入tmp目录 cd /data/local/tmp 修改权限 chmod 777 android_server 运行 ./android_server 端口转发 adb forward tcp:23946 tcp:23946 3.i

weixin_44154094的博客 2925

Python 安装 PyTorch(GPU)详细教程

本章教程,介绍如何安装PyTorch GPU版本的具体教程。

猿小白的博客 1620

Android IDA So的动态调试大法

今天已是国庆的第五天,白天去武馆训练过后,晚上回来品一杯西湖龙井,更一篇博客,一来帮助需要之人,二来加深自己的理解。 下面就说关于在IDA中Android so的动态调试的问题以及在so的三个层次下断点的操作。 问题篇: 1.动态调试的作用以及与我们常说的脱壳区别之处? 2.IDA的下断点调试的原理? 3.有无反调试的步骤区别?以及原理? 4.反调试与反附加的区别? 5.I...

雪一梦的博客 4万+

R语言机器学习算法实战系列(十三)随机森林生存分析构建预后模型 (Random Survival Forest)

本教程运用随机森林生存分析筛选与患者生存状态显著相关特征。该方法借随机森林这一强大机器学习算法,构建多棵决策树并集成结果,以提高生存分析准确性,识别关键生物标志物。接着,利用选定特征构建风险得分,将多个特征转化为单一数值,量化患者风险水平。之后,依据风险得分将患者分为高、低风险亚型,为临床治疗提供个性化指导。最后,通过分析时间依赖的 ROC 曲线评估模型长期预测能力。此曲线计算不同阈值下的真正例率与假正例率,在多个时间点评估,全面展现模型长期稳定性与准确性。

专注生信领域 2019

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

安卓逆向实践5——IDA动态调试so源码

之前的安卓逆向都是在Java层上面的,但是当前大多数App,为了安全或者效率问题,会把一些重要功能放到native层,所以这里通过例子记录一下使用IDA对so文件进行调试的过程并对要点进行总结。 一、IDA常用快捷键总结 Shift+F12:快速查看so文件中的字符串信息,分析过程中通过一些关键字符串能够迅速定位到关键函数; F5: 可以将ARM指令转化为可读的C代码,同时可以使用Y键,对J...

Ray的博客 2万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

使用Ida动态调试Android 中的so文件的方式以及技巧

首先要想调试对应APP的so,一般要拿一个自己编译的AOSP最方便杂七杂八的问题最少。 将ida的android_server push 到/data/local/tmp,执行后监听local port 23946 adb forward tcp:23496 tcp:23946 以debug模式启动APP am start -D -n 包名/.类名 一定记得打开ddms(不推荐mon

Arno_W的博客 1792

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

安卓逆向学习笔记(5) - 在JNI_Onload 函数处下断点避开针对IDA Pro的反调试

在上篇文章中,我们介绍了如何利用IDA Pro来动态调试so文件。在移动安全领域有攻就有防,为了防止apk中的so文件被动态调试,开发者往往会使用一些反调试手段来干扰黑客的动态调试。 其中最常见的就是在so文件中检测TracerPid值,详情请见这篇博客:爱加密脱壳 本文以2015阿里巴巴移动安全大赛中的第二道题为例,IDA Pro版本为6.5 。 这里只介绍如何通过在JNI_Onload下

蜗牛 9712

Android逆向之旅---破解某应用加密算法(动态调试so和frida hook so代码)

一、样本静态分析 最近有位同学发了一个样本给我,主要是有一个解密方法,把字符串加密了,加解密方法都放在so中,所以之前也没怎么去给大家介绍arm指令和解密算法等知识,正好借助这个样本给大家介绍一些so加密方法的破解,首先我们直接在Java层看到加密信息,这个是这位同学直接告诉我这个类,我没怎么去搜了: ​ 这个应用不知道干嘛的,但是他的防护做的还挺厉害的,之前我们介绍过小黄车应用内部也用了这...

尼古拉斯.赵四的博客 1万+

IDA动态调试破解AliCrackme与反调试对抗

文章目录前言APK破解(上)1.1 静态分析1.2 动态分析反调试对抗2.1 Ptrace2.2 全局调试2.3 反反调试APK破解(下)3.1 重新编译3.2 动态调试总结 前言 在前面的文章中 IDA动态调试破解EXE文件与分析APK流程 介绍了 IDA 对 APK 进行动态调试分析的简单流程,然而实际上很多 APP 为了防止被动态调试分析,经常会做一些反调试的防护措施。本文将通过 2014 年阿里安全挑战赛的第二题 AliCrackme_2(APK下载地址),来进一步学习 APK so 文件的动态调试

道阻且长,行则将至 4102
上一篇: android 反调试(TracePid 不断轮询检查 JAVA )
下一篇: pwndbg调试笔记
Viewz
博客等级 码龄9年 309粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值