各位道友有没有在越过重重native反调试脱掉壳之后想要调试smali的过程中突然发现在使用AndroidStdio动态调试smali的时候只要一挂载APP就会崩溃,本篇主要整理一下在调试梆梆&爱加密过程中遇到的java层反调试以及绕过的方式

在将梆梆&爱加密脱壳之后通过AS调试APP遇到反调试挂载失败(只是hook未脱壳的APP,手机上安装的也是未脱壳的原始APP,hook dump dex出来之后直接反编译成smali通过AS动态调试是可行的),只要debug便会杀掉APP进程

Dalvik虚拟机下的反调试绕过

虽然Dalvik已经在逐步退出市场,但是这里还是由他开始,大家都知道Dalvik的核心库是libdvm.so,在调试的过程中与APP建立连接少不了对libdvm.so的引用,因此libdvm.so几乎是最有嫌疑的地方。

获取libdvm.so

所谓获取libdvm.so需要获取APP未启动时libdvm.so源文件,这里只要去/system/lib目录下将其提取到本地即可。
其次需要加固APP运行时libdvm.so,这里我通过IDA动态挂载APP之后将其从内存中dump出来。

static main(void)
{auto fp, begin, end, dexbyte;fp = fopen("D:\\dump.so", "wb");begin = 0x786A0000;end = begin + 0x67000 ;for ( dexbyte = begin; dexbyte < end; dexbyte ++ )fputc(Byte(dexbyte), fp);
}

小小脚本,不成敬意

比较libdvm.so

在获取到两个libdvm.so之后通过BeyondCompare进行比较

通过比较可以看出在加固的APP运行之后,libdvm.so被改了几部分数据,并不是所有修改的地方都和反调试有关,通过IDA对照比较去看看都改了什么地方,最终发现与java调试相关的地址为0x423B0,当然其他地方也有一些小惊喜,比如梆梆&爱加密抽取函数所hook的函数什么的。

_Z12dvmDbgActivev是java调试相关函数,主要功能是啥我也不是很清楚,有清楚的大佬希望可以留言告知一下,万分感谢。dvmDbgActive(_Z12dvmDbgActivev),Java附加调试,就会触发调用此函数,“全局变量gDebuggerActive”的值,这个值正是_Z12dvmDbgActivev函数来设置的

由此可见加固APP是通过hook _Z12dvmDbgActivev函数使其跳转到它自己构造的函数,并且在其中将进程kill掉防止调试。那么我们只要将Hook之后的libdvm.so再Hook修改为原始函数,让其正常运行_Z12dvmDbgActivev函数,就可以绕过反调试了。

Hook libdvm.so

这里通过frida hook _Z12dvmDbgActivev函数地址,打印内存,将原本函数正确内存数据写入对应地址中

# -*- coding: utf-8 -*-
import frida
import sysdef on_message(message, data):print(message)redv = frida.get_remote_device()
session = redv.attach("com.sf.activity")src = """var jnibind1 = undefined;var jnibind2 = undefined;var jnibind3 = undefined;var jnibind4 = undefined;var jnibind5 = undefined;var jnibind6 = undefined;var jnibind7 = undefined;var f = Module.findBaseAddress("libdvm.so");console.log("address: " + f);jnibind1 = f.add(0x000423C0);var p1P = new NativePointer(jnibind1);aryBuffer1 = Memory.readByteArray(p1P, 16);console.log(aryBuffer1);var vArray = [0x0D,0x4B,0x0E,0x4A,0x7B,0x44,0x10,0xB5,0x9C,0x58,0x94,0xF8,0xC6,0x33];Memory.writeByteArray(p1P, vArray);var p1P = new NativePointer(jnibind1);aryBuffer1 = Memory.readByteArray(p1P, 16);console.log(aryBuffer1);"""
script = session.create_script(src)
script.on("message", on_message)
script.load()
sys.stdin.read()

frida hook之后结果

反调试已经绕过啦!!!

Art虚拟机下的反调试绕过

获取libart.so

art虚拟机下的反调试绕过同上述的dalvik方法相同,只是关键的运行库libdvm.so替换为libart.so,同样要去/system/lib目录下将其提取到本地,这里需要注意的是在提取之前要确认运行的是libart.so还是libart64.so。

比较libart.so

在获取到两个libart.so之后通过BeyondCompare进行比较

最终确认反调试Hook地址为0x10ABC4

_ZN3art3Dbg8GoActiveEv函数功能同Dalvik中_Z12dvmDbgActivev函数功能类似,绕过方法与Dalvik保持一致。

Hook libart.so

这里通过frida hook _ZN3art3Dbg8GoActiveEv函数地址,打印内存,将原本函数正确内存数据写入对应地址中

# -*- coding: utf-8 -*-
import frida
import sysdef on_message(message, data):print(message)redv = frida.get_remote_device()
session = redv.attach("com.sf.activity")src = """var jnibind1 = undefined;var jnibind2 = undefined;var jnibind3 = undefined;var jnibind4 = undefined;var jnibind5 = undefined;var jnibind6 = undefined;var jnibind7 = undefined;var f = Module.findBaseAddress("libart.so");console.log("address: " + f);jnibind1 = f.add(0x00115BC4);var p1P = new NativePointer(jnibind1);aryBuffer1 = Memory.readByteArray(p1P, 16);console.log(aryBuffer1);var vArray = [0x2D, 0xE9, 0xF0, 0x4F, 0x9B, 0xB0, 0xDF, 0xF8, 0xBC, 0x0D, 0xDF, 0xF8, 0xBC, 0x1D];Memory.writeByteArray(p1P, vArray);var p1P = new NativePointer(jnibind1);aryBuffer1 = Memory.readByteArray(p1P, 16);console.log(aryBuffer1);"""
script = session.create_script(src)
script.on("message", on_message)
script.load()
sys.stdin.read()

#总结

这里再简述一下反调试的原理,壳APP通过Hook libdvm.so&libart.so中的_Z12dvmDbgActivev&_ZN3art3Dbg8GoActiveEv函数,使其跳转到自己写的函数中执行kill操作导致无法调试。Java附加调试,就会触发调用此函数,“全局变量gDebuggerActive”的值,这个值正是_Z12dvmDbgActivev函数来设置的。目前在脱壳之后遇到java反调试,皆可用对比libdvm.so&libart.so寻找差异点将其修复绕过反调试,感兴趣的大佬可以通过其他被hook的函数研究加固或者函数抽取的原理。

注意不同的机器,对应的字节码是不一样的。

梆梆爱加密java反调试绕过相关推荐

  1. 爱加密和梆梆的加固的破解方法

    爱加密和梆梆加固的破解方法 By Bob Pan 梆梆与爱加密都使用了将原有的dex隐藏, 在运行时解压, 并且通过修改app的类加载器的方式实现加固. 参考: AndoridAPK反逆向解决方案:梆 ...

  2. 梆梆加固的病毒分析-破解篇

    一.文件信息 文件名:tx.qq898507339.bzy9-1.apk MD5:77603118E1B061374DDB8A4D1EA70CB2 SHA1:A85B9387DD598E64548F6 ...

  3. 梆梆安全加固企业版分析

    我是一名奋战在安全第一线的程序猿,爱好和平,爱好打包不平,Freedom Forever ! 最近移动安全太火,火的我都忍不住玩了一把,最近几个月在研究各家的安全加固方案,大多dex加密.反调试等技术 ...

  4. Android逆向案例:干掉梆梆加固免费版的反调试检测

    目标和现象 分析目标:某行网银手机客户端 分析壳类型: 使用[d2j-dex2jar]反编译后发现关键代码缺失,因为 AndroidManifest.xml 中的绝大部分activity和server ...

  5. Andorid APK反逆向解决方案---梆梆加固原理探寻

    本文章由Jack_Jia编写,转载请注明出处.   文章链接: http://blog.csdn.net/jiazhijun/article/details/8892635 作者:Jack_Jia   ...

  6. 【移动安全高级篇】————5、Andorid APK反逆向解决方案---梆梆加固原理探寻

    一.序言 目前Android市场充斥着大量的盗版软件,开发者的官方应用被"打包党"们恶意篡改.如何使程序代码免受盗版篡改就成了开发者面临的头等大事,今天我们将分析一个不错的解决方案 ...

  7. Andorid APK反逆向解决方案:梆梆加固原理探寻

    一.序言 目前Android市场充斥着大量的盗版软件,开发者的官方应用被"打包党"们恶意篡改.如何使程序代码免受盗版篡改就成了开发者面临的头等大事,今天我们将分析一个不错的解决方案 ...

  8. 安卓逆向_21 --- Java层和so层的反调试( IDA 动态调试 JNI_OnLoad、init_array下断)

    1. 安卓程序动态调试条件 安卓程序动态调试条件 ( 2个满足1个即可 ): 1. 在 AndroidMainfest.xml ---> application 标签下,设置或者添加属性 and ...

  9. java反编译之 基础篇(class未加密未混淆)

    常用的工具有两个:jd-jui,DJ java Decomplier , 第一个工具最为常用,但有时候,译的也不准备,第二个工具不认带有中文的目录.两个一起用,可以减少语法错误. 从class文件到j ...

  10. 修改Android手机内核,绕过反调试

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/57086486 0x1.手机设备环境 Model number: Nexus 5 O ...

最新文章

  1. linux中系统调用和库函数的区别
  2. CString 操作指南
  3. 思科数据中心Nexus 3000
  4. 6月份Asp.net源码推荐
  5. antimalware service executable占用内存过高_SQLServer占用服务器内存过高,更改这个设置就能降低内存使用率
  6. 街头霸王背景_街头霸王与摇滚明星:开放式领导的艺术
  7. ROS笔记(28) Setup Assistant
  8. RColorBrewer | R语言中的配色方法汇总(Ⅰ)
  9. https://leetcode-cn.com/
  10. Asp.Net随机中文汉字验证码
  11. 区块链底层架构概览:第一原则框架
  12. DAMA-DMBOK 数据治理功能框架
  13. Debian安装WPS的方法
  14. 视图中的调用者权限控制bequeath current_user
  15. 信息检索(IR)笔记1: 倒排索引(Inverted Index)
  16. 【土旦】在vue filters中 优雅的使用对象的key、value来替换 if switch多重判断简化流程...
  17. 【王喆-推荐系统】前沿篇-(task3)流处理平台Flink:实时推荐
  18. 【POJ No. 3764】 最长xor 路径 The xor-longest Path
  19. Unity学习-熟悉环境
  20. solr mysql 增量索引_solr中实现MySQL数据全量索引和增量索引

热门文章

  1. 国赛培训——最优化智能算法——模拟退火
  2. 魂斗罗4 java 7723_FC魂斗罗4游戏下载-魂斗罗4FC无敌修改版下载-电玩咖
  3. 容易遗忘的几个js知识点(一)
  4. mysql r_mysql:’r’是什么意思?
  5. 从360图书馆抓取全球国家的中文名与英文名(requests_html)
  6. 查找农历生日与阳历生日属于同一天的次数和年份
  7. BZOJ[3772]精神污染 二维数点
  8. 菜狗杯Web_我眼里只有$wp
  9. 读《大数据时代》有感
  10. 论以建筑全生命周期管理建设公司大数据平台