安卓逆向_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

Android SDK 中有 android.os.debug 类提供了一个 isDebuggerConnected方法,用于判断 JDWP 调试器是否正在工作

 

 

2. Java层反调试

 

示例:手动绕过百度加固 Debug.isDebuggerConnected 反调试的方法:
https://blog.csdn.net/QQ1084283172/article/details/78237571

 

**************************************************************************************************************

    AndroidStudio调试smali 和 java 都是用的 jdwp 进行转发, IDA调试 so 用的是 tcp 转发 

**************************************************************************************************************

 

JDWP 协议介绍

JDWP 是 Java Debug Wire Protocol 的缩写,它定义了调试器(debugger)和 被调试的 Java 虚拟机(target vm)之间的通信协议。JDWP 协议可以 远程 动态调试 Java 程序

JVM 自带有对这个协议相应的支持,通过命令 java -agentlib:jdwp=help 可以查看help文档。

说明一下 debugger target vm

  • Target vm 中运行着我们想要调试的程序,它与一般运行的 Java 虚拟机没有什么区别,只是在启动时加载了 Agent JDWP 从而具备了调试功能。
  • debugger 就是我们熟知的调试器,它向运行中的 target vm 发送命令来获取 target vm 运行时的状态和控制 Java 程序的执行。
  • Debugger target vm 分别在各自的进程中运行,他们之间的通信协议就是 JDWP

JDWP 与其他许多协议不同,它仅仅定义了数据传输的格式,但并没有指定具体的传输方式。这就意味着一个 JDWP 的实现可以不需要做任何修改就正常工作在不同的传输方式上(在 JDWP 传输接口中会做详细介绍)。

JDWP 是语言无关的。理论上我们可以选用任意语言实现 JDWP。然而我们注意到,在 JDWP 的两端分别是 target vm 和 debugger。Target vm 端,JDWP 模块必须以 Agent library 的形式在 Java 虚拟机启动时加载,并且它必须通过 Java 虚拟机提供的 JVMTI 接口实现各种 debug 的功能,所以必须使用 C/C++ 语言编写。而 debugger 端就没有这样的限制,可以使用任意语言编写,只要遵守 JDWP 规范即可。JDI(Java Debug Interface)就包含了一个 Java 的 JDWP debugger 端的实现(JDI 将在该系列的下一篇文章中介绍),JDK 中调试工具 jdb 也是使用 JDI 完成其调试功能的。

JDWP agent 在调试中扮演的角色

使用 JDWP 远程调试 java 程序:https://www.jianshu.com/p/4b322505087f

使用 JDWP 进行远程调试:https://blog.csdn.net/renfufei/article/details/52756556

 

 

3. so层反调试(  JNI_OnLoad )

 

拿到一个 apk 分析步骤:首先先分析有没有加壳,如果没有加壳,使用 jadx-gui 打开自动反编译,并进行分析,如果有加壳,需要先脱壳,然后在进行分析。找到 入口点 或者 入口页面 进去查看分析。

IDA Pro 分析 so 库 JNI_OnLoad:https://www.bilibili.com/video/BV1UE411A7rW?p=69

AntiDebug 源码:https://github.com/weikaizhi/AntiDebug 。

github 下载完直接编译报错 ,所以使用 AndroidStudio 打开项目后需要做如下修改

  • 在 antidebug.cpp 中添加 #include <pthread.h> 

  • AndroidManifest.xml 的 application 节点添加 android:debuggable=true

然后编译生成 apk,但是生成的 apk 是没有签名的,没法安装到手机或者模拟器上。

可以使用 AndroidStudio、apk上上签、AndroidKiller、安卓逆向助手等进行签名。这里使用 AndroidKiller 进行签名。。。

签名后就可以在手机或者模拟器上安装 apk 了。。。

源码中的反调试函数( 可以看到只检测了三个:状态、IsHookByXPosed、isBeDebug )

//反调试检测
MACRO_HIDE_SYMBOL void* AntiDebug::antiDebugCallback(void *arg)
{if(arg == NULL)return NULL;AntiDebug* pAntiDebug = (AntiDebug*)arg;while (true){try{bool bRet1 = pAntiDebug->readStatus();bool bRet2 = pAntiDebug->IsHookByXPosed();bool bRet3 = pAntiDebug->isBeDebug();if(bRet1 || bRet2 || bRet3){if(g_callbackRef != 0 && g_MethodCallback != 0){JNIEnv* env = GetEnv();if(env != NULL){env->CallVoidMethod(g_callbackRef, g_MethodCallback);}}}} catch (...){}sleep(1);}
}

当反调试被触发时,会出现一个弹窗,如图所示:

 

 

静态分析

下面使用 IDA Pro 进行 so 库的分析,解压 apk ,找到 so 文件

使用 IDA 打开,首先 Ctrl + s 搜索 段,看下 init_array 里面有没有函数,发现没什么有用的东东,继续在 Exports 里面搜索 java_ 和 jni,分析后发现 java_ 开头的静态注册函数也没有啥东东,所以分析 JNI_OnLoad 函数

源码中 JNI_OnLoad 函数

继续分析 sub_9C9C 这个函数。。。

 

方法 2:通过 IDA Pro 的 String 查看,看看有没有可疑的字符串。这种方法信息量比较多,还是推荐直接分析 JNI_OnLoad

源码中的反调试函数( 可以看到只检测了三个:状态、IsHookByXPosed、isBeDebug )

可以参看源码 和 so 理解反调试。。。。。

 

 

动态分析

 

参考:安卓逆向_17 --- 动态调试【 环境搭建、so库调试【动态普通、动态debug模式】、JNI_OnLoad调试分析、java_ 开头函数分析】:https://blog.csdn.net/freeking101/article/details/106701908

 

 

4. 示例

 

4.1 FindTracer.apk 过反调试 (  动态调试 JNI_OnLoad )

 

反调试:https://www.bilibili.com/video/BV1UE411A7rW?p=70

FindTracer 破解反调试:https://www.jianshu.com/p/a2b3517d4815

安装 apk,然后打开 app,没有被调试时,显示 Everything fine 。

首先看下 Java 层,使用 jadx-gui 反编译 apk,看下 Java 代码,查看 入口点、入口页面

可以看到 FindTracer.getInstance().findTracer()  就是检测反调试的代码,双击 findTracer() 函数,进入查看函数

可以看到是 native 函数,所以需要从 so 库入手。。。

IDA 打开 so 后( init_array 执行时间比 JNI_OnLoad 早,所以先分析 init_array,再分析 java_ 或者 jni_onload):

  • Ctrl + s ,找到 init_array,看下 init_array 里面有没有检测函数 ( 本例没有 )
  • 搜索 java_ 和 jni_onload,进行分析

 

 

4.2 自毁程序密码.apk (  动态调试 JNI_OnLoad )

 

APK文件下载链接: http://pan.baidu.com/s/1ntiKXg1 密码: 37xw

其中  AliCrackme_2.apk 是原安装包, signed.apk 是包含修改后so文件的安装包。

自毁程序密码(第二题)》分析( IDA 动态调试so ):https://www.pd521.com/thread-291-1-1.html

:https://www.bilibili.com/video/BV1UE411A7rW?p=71

安装 apk,然后打开 app 如图所示:

打开 app 后,直接出现如上图界面,这个就是 "入口页面"。首先还是从 Java 层开始,使用 jadx-gui 反编译 apk,看下 Java 代码,查看 入口点、入口页面。

入口页面代码:

可以看到如果 if 条件满足,则直接打开 ResultActivity 页面,通过查看 ResultActivity 页面的代码可知这个是成功后的页面

如果不满足,则弹出 "验证码校验失败",所以 if 里面的 securityCheck 函数就是检测反调试的。securityCheck 函数被 native 修饰,所以是在 so 里面实现的。同时 securityCheck 没有被 static 修饰。

 

使用 IDA 打开 crackme.so ---> Exports ---> 搜索 java_ jni_onload ---> 分析C++ 函数

 

搜索 java_ 

securityCheck 函数只有一个 String 类型的参数,所以securityCheck对应的 java_ 开头的函数的第三个参数类型修改为 jstring

通过分析,没找到有用的东东,然后再 分析 jni_onload

搜索 jni_onload,发现也看不出什么有用的东东,

所以 动态调试 看下。(自毁程序密码:( IDA 动态调试so ):https://www.pd521.com/thread-291-1-1.html)

 

 

4.3 crackme (  动态调试 JNI_OnLoad )

分析类似 4.2 ,导入 jni.h 识别函数

:https://www.bilibili.com/video/BV1UE411A7rW?p=72

 

 

5. init_array 下断

 

:https://www.bilibili.com/video/BV1UE411A7rW?p=74

 

 

 

 

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

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

相关文章

一文读懂:深扒人脸识别60年技术发展史

来源&#xff1a;与非网摘要&#xff1a; “他来听我的演唱会&#xff0c;门票换了手铐一对”。最近歌神张学友变阿SIR&#xff0c;演唱会上频频抓到罪犯&#xff0c;将人脸识别技术又一次推到了大众的视线中。“他来听我的演唱会&#xff0c;门票换了手铐一对”。最近歌神张学…

安卓逆向_22( 一 ) --- Xposed【 Android Studio + Xposed 实现简单的 hook 】

From&#xff1a;使用渗透测试框架 Xposed 框架 hook 调试 Android APP&#xff1a;https://www.freebuf.com/articles/terminal/56453.html Xposed框架分析&#xff1a;https://blog.csdn.net/zjx839524906/article/details/81046844 xposted框架 原理 Xposed框架之函数Hoo…

TED演讲 | 2100年,神经学家如何研究人类大脑?

“本文来源于药明康德微信公众号&#xff08;ID&#xff1a;WuXiAppTecChina&#xff09;”除非我们弄清楚如何在健康人体中获得神经元的电活动&#xff0c;否则不会在理解人类大脑或疾病方面取得任何进展。 Were not going to make any progress towards understanding the hu…

安卓逆向_24( 一 ) --- Hook 框架 frida( Hook Java层 和 so层) )

From&#xff1a;Hook 神器家族的 Frida 工具使用详解&#xff1a;https://blog.csdn.net/FlyPigYe/article/details/90258758 详解 Hook 框架 frida ( 信抢红包 )&#xff1a;https://www.freebuf.com/company-information/180480.html APP逆向神器之Frida【Android初级篇】…

最前线丨新零售结果、AT暗战,今年的618都讲了哪些故事

来源&#xff1a;36Kr今年的618成了巨头们验收新零售成果的好时机。618源于2010年&#xff0c;最初为京东店庆。2013年天猫加入618大促&#xff0c;苏宁、国美紧随其后。此后&#xff0c;618成为电商价格战的战场&#xff0c;也成为全网狂欢的节日。618今年已经走到底第9个年头…

什么是RUP

一、RUP产生的背景 UML能够用来为系统进行面向对象建模&#xff0c;但是并没有指定应用UML的过程&#xff0c;它仅仅是一种语言&#xff0c;它是独立于任何过程的。如果想要成功的应用UML一个好的过程是必要的。合理的过程能够有效的测度工作进度&#xff0c;控制和改善工作效率…

动态 | DeepMind 首次披露旗下专利申请情况

来源&#xff1a;AI科技评论摘要&#xff1a;作为一家顶尖的人工智能研究公司&#xff0c;DeepMind 近年来申请了一堆国际专利&#xff0c;但是具体到专利内容和申请数量就不得而知了。近日&#xff0c;DeepMind首次披露了一系列国际专利&#xff0c;这些专利涉及了现代机器学习…

Frida Android hook

From&#xff1a;https://eternalsakura13.com/2020/07/04/frida/ 开发环境配置 ( IDE 智能提示 frida )&#xff1a; 下载 nodejs&#xff1a; https://nodejs.org/zh-cn/download/npm install types/frida-gum 见过的较好的frida笔记&#xff1a; https://kevinspider.gith…

寒武纪宣布完成B轮融资 整体估值达25亿美元

来源&#xff1a;网易智能摘要&#xff1a;6月20日&#xff0c;芯片领域公司寒武纪宣布完成数亿美元的B轮融资&#xff0c;由中国国有资本风险投资基金、国新启迪、国投创业、国新资本联合领投。中金资本、中信证券投资&金石投资、TCL资本、中科院科技成果转化基金跟投。原…

安卓模拟器 Genymotion 安装

Form&#xff1a;https://www.runoob.com/w3cnote/android-tutorial-genymotion-install.html Linux (Ubuntu) 下的 Android 模拟器&#xff1a;Genymotion&#xff1a;https://blog.csdn.net/qq_25978793/article/details/49923579 Android 模拟器 Genymotion 安装使用教程详解…

辩论届人机大战:IBM新AI完胜人类冠军!

来源&#xff1a;智东西导语&#xff1a;6月18日&#xff0c;IBM的AI系统Project Debater首次与人类进行现场公开辩论。Project Debater能够理解对方观点&#xff0c;并有针对性地做出清晰的反驳&#xff0c;最终成功战胜人类辩手。6月19日消息&#xff0c;美国时间6月18日&…

没有人能阻止程序员将电脑上的一切搬到网页上

操作系统模拟&#xff08;OS Simulator&#xff09; Web QQ Q版的界面&#xff0c;看起来大体上是模拟Mac OS而不是Windows&#xff0c;不过那些桌面Widget又是Windows的展品。也算是取各家所长。使用他的唯一理由可能就是在没有QQ的电脑上用QQ吧 Windows 3.1 Windows 95(感谢大…

一篇文章带你领悟 Frida 的精髓(基于安卓8.1)

转载&#xff08;一篇文章带你领悟Frida的精髓&#xff08;基于安卓8.1&#xff09;&#xff09;&#xff1a;https://www.freebuf.com/articles/system/190565.html 《Frida操作手册》&#xff1a;https://github.com/hookmaster/frida-all-in-one Frida github 地址&#x…

神经元之间是如何形成“社交网络”的

来源&#xff1a;中科院神经科学研究院摘要&#xff1a;我们的大脑中存在着亿万个神经元&#xff0c;在神经科学领域有一个非常重要的问题&#xff0c;就是一个神经元是如何在这亿万个神经元中选择与某一些神经元形成突触联系的。演讲者&#xff1a;中国科学院神经科学研究所徐…

毕马威:2018全球科技创新报告(附PDF下载)

来源&#xff1a;走向智能论坛摘要&#xff1a;日前&#xff0c;毕马威发布《2018全球科技创新报告》&#xff0c;报告显示&#xff0c;我们如今正处在一个科技创新爆发的时代&#xff0c;人工智能、机器人和物联网必将会影响全球的商业&#xff0c;那些不主动去抓住未来趋势的…

GWT(Google Web Tookit) Eclipse Plugin的zip下载地址(同时提供GWT Designer下载地址)

按照Eclipse Help->Install new software->....(这里是官方安装文档&#xff1a;http://code.google.com/intl/zh-CN/eclipse/docs/install-eclipse-3.6.html) 的方法安装失败&#xff0c;界面始终显示Pedding状态&#xff0c;很长时间都没反映&#xff0c;无奈之下&…

《卫报》长文解读机器的崛起:人类越来越无法掌控它们

来源&#xff1a;网易智能摘要&#xff1a;技术正开始以智能和不可预知的方式运作&#xff0c;连它的创造者都无法捉摸。正当机器越来越多地改变全球事件时&#xff0c;我们该如何重新控制它们呢&#xff1f;《卫报》网站今日撰文详述了机器的崛起。技术正开始以智能和不可预知…

Android 逆向分析大全

转载&#xff1a;Android 逆向分析大全&#xff1a;https://www.jianshu.com/p/a12d04fc748f 1. 概述 1.1 分析步骤 通用逆向分析步骤 1. 了解该模块正向编程相关方法2. 使用apktool解密apk&#xff0c;得到资源、jni模块等文件3. 从apk提取出dex文件&#xff0c;使用dex2jar转…

美国智库报告:自动驾驶对社会、经济与劳动力的影响

来源&#xff1a;资本实验室在过去几年中&#xff0c;从政府到企业&#xff0c;自动驾驶的开发和应用已经成为新的投入重点。自动驾驶汽车在道路安全、生产率、燃料消耗和自然环保等方面的预期进步也充分吸引了公众的想象力和注意力。SAFE&#xff08;Securing America’s Futu…

一篇文章带你搞懂 DEX 文件的结构

From&#xff1a;https://blog.csdn.net/sinat_18268881/article/details/55832757 Dex文件格式详解&#xff1a;https://www.jianshu.com/p/f7f0a712ddfe dex文件解析(第三篇)&#xff1a;https://blog.csdn.net/tabactivity/article/details/78950379 深入理解DEX文件格式…