目标和现象

分析目标:某行网银手机客户端

分析壳类型:
使用【d2j-dex2jar】反编译后发现关键代码缺失,因为 AndroidManifest.xml 中的绝大部分activity和server的实现都是在 cmb.pb 这个包中,但是反编译的代码里没有 cmb.pb 这个包,只有一些无关紧要的第三方sdk,判断其核心代码进行了加固。随后在反编译的代码看到了 “DexInstall” 类,并且搜索 “loadLibrary” 可以找到代码 System.loadLibrary(“CmbShield”);
从apk中解压出 libCmbShield.so ,使用 ida pro 反编译分析,根据一些代码特征结合网上搜索,可以判断出这个 so 其实就是 libSecShell.so 改了个名字,为2018年的梆梆加固免费版,2019年的最新梆梆加固免费版好像已经不是这个了,所以本文可能没法直接帮到你,主要目的还是在于总结思路,不断积累进步。

调试:
无论是要脱壳还是分析,一个重要的步骤就是调试,安装目标APK,依然是使用 Xposed + BDOpener 打开调试的大门,但是使用 AndroidStudio 附加到目标进程 cmb.pb 时,APP瞬间闪退消失,进程死亡,调试器断开连接,估计这个壳做了反调试检测。

分析

调试器附加上去的一瞬间,目标进程立即退出,很快就想到可能是调试操作触发了它的检测代码,并使用 kill 之类的函数结束了自身,而非定时轮询检测。

查看死亡前的 logcat 果然找到了一些蛛丝马迹:

2019-06-06 22:20:39.675 32678-32685/cmb.pb E/2g.out: libdvm_dvmDbgActive_stub called
2019-06-06 22:20:39.730 32678-32685/cmb.pb I/art: Debugger is active
2019-06-06 22:20:39.730 32678-32685/cmb.pb E/2g.out: kill:libdvm_dvmDbgActive_stub

不得不说这个壳实在是有点愚蠢,直接就给出了重要的关键信息,告诉你:

我在这儿呢,快来搞我呀

免费版的加固服务果然有免费版的特质,想不通某行这么大的企业竟不愿花钱买梆梆企业版。

依旧是打开 IDA Pro 分析这个 libCmbShield.so

ALT + T 搜索“ libdvm_dvmDbgActive_stub”,果然很快就找到了关键代码,F5反编译,原形毕露。

查看交叉引用,果然,该壳 Hook 了 libart.so 的 _ZN3art3Dbg8GoActiveEv() 函数,在调试器附加的时候,该函数被调用,实际调用的是被 Hook 替换后的 sub_1B330() 函数,然后在 sub_1B330() 函数中使用 unix api kill() 结束自身。

干它


最简单的办法就是在 sub_1B330() 函数中把 kill() 的调用去掉。我们可以把

BLX kill
STR R0, [SP,#0x28+var_24]

这6个字节的指令替换为

MOVS R0, R0
MOVS R0, #0
MOVS R1, #0

即做一个无用的空操作,然后让函数返回值为0,此处函数返回值为64位的 int ,所以需要对 r0 r1 两个寄存器均赋值为0,原本的 kill() 函数如果执行成功理应返回0,我们也返回0尽量不对调用者产生影响。

替换指令我们使用到了 IDA Pro 的一个插件【keypatch】可以直接将 arm 指令转换为机器码并填充上去,相当方便,否则你还需要查阅 arm 指令手册或用其它小工具,自行翻译为机器码后使用 010 Editor、UltraEdit 等16进制编辑器修改填充。

【keypatch】项目地址:https://github.com/keystone-engine/keypatch

修改后,直接在 IDA Pro 中,使用【Edit】-【Patch program】-【Apply patches to input file…】保存回二进制文件 libCmbShield.so 中

注意,libCmbShield.so 中可能有多个类似 sub_1B330() 的函数调用了 kill() ,我们在搜索和处理的时候,不要改了一处就以为万事大吉了,继续搜索,改掉所有相似的地方。

验证结果

接下来,由于手机已经 ROOT ,我们可以在 adb shell 下以 root 权限访问系统目录,我们把修改好的 libCmbShield.so push 到手机中,然后拷贝到目标APP的安装目录下覆盖原来的 libCmbShield.so

adb push libCmbShield.so /sdcard/
adb shell
su
cp /sdcard/libCmbShield.so /data/app/cmb.pb-1/lib/arm/


重新启动应用,使用 AndroidStudio 附加进程调试,果真没有再闪退了,稳的好像一条20多年的老狗。
接下来就可以愉快的调试分析进行脱壳或调试我们开发的 Xposed 模块了。

本文由encoderlee发表于CSDN博客: https://blog.csdn.net/CharlesSimonyi/article/details/91050233 转载请注明出处

Android逆向案例:干掉梆梆加固免费版的反调试检测相关推荐

  1. Android逆向之路---脱壳360加固原理解析

    前言 众所周知,上次说到了如何脱壳360加固,大致意思就是安装一个xposed插件,然后自动就会脱壳了,那么这个插件是如何工作的呢,本次重点说说这个. 上次说道了dumpDex脱壳360加固,其实先说 ...

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

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

  3. 安卓逆向_20 --- 模拟器检测、反调试检测、ELF动态调试、__libc_init 下断

    From( 模拟器检测实战分析 ):https://www.bilibili.com/video/BV1UE411A7rW?p=65 怎样过 app 的模拟器检测:https://bbs.pediy. ...

  4. Android逆向之脱掉“梆梆加固”的保护壳

    转载自:https://blog.csdn.net/jiangwei0910410003/article/details/54409957 此处仅作为学习记录一用.至于评论问答环节,请去上面地址翻阅四 ...

  5. Android逆向之脱掉“360加固”的壳

    转载自:https://blog.csdn.net/jiangwei0910410003/article/details/51769447 此处仅作为学习记录一用.至于评论问答环节,请去上面地址翻阅四 ...

  6. Android逆向之路---脱壳360加固

    前言 众所周知,现在软件在防止逆向采取了混淆,加壳等措施.比如360加固,腾讯加固,梆梆加固等等. 这两天在逆向一款app的时候找到了一个不错的xposed插件推荐给大家, 下载地址:点我下载 < ...

  7. Android逆向之路---脱壳360加固 1

    前言 众所周知,现在软件在防止逆向采取了混淆,加壳等措施.比如360加固,腾讯加固,梆梆加固等等. 这两天在逆向一款app的时候找到了一个不错的xposed插件推荐给大家, 下载地址:点我下载 前提环 ...

  8. Android逆向与安全——360 dex加固与脱壳

    前言 现在市面上对APP的安全合规管控越来越严格了,也就要求了APP在上架之前一定要做合规检测和加固处理.对APP就是加固的好处,可以提高APP的安全性,提高APP被逆向分析破解的门槛,同时通过加固保 ...

  9. 【python爬虫】js逆向:空气质量在线平台,解决反调试,加密

    js逆向:pyhon爬虫空气质量,无线debugger,AES,DES,MD5加密 前言 解决无限debugger 第一次debugger 第二次debugger 加密解密流程分析 请求数据加密 返回 ...

最新文章

  1. 关于可观察性的三大支柱,你应该了解这些
  2. sdut-1118 C语言实验——从大到小输出a、b、c(选择结构)
  3. 从无到有算法养成篇-链式存储结构之循环链表
  4. 方维O2O系统 后台业务员功能开发
  5. SAP UI5 main page design
  6. 数据结构与算法6—树
  7. windows下命令行修改系统时间;修改系统时间的软件
  8. EMNLP 2020 可解释性推理
  9. C# 操作Excel(不需要安装Excel),.Net版的 Excel 控件
  10. android如何实现环形缓冲区
  11. 登录后刷新token
  12. js刻度尺插件_html5 canvas+js刻度尺代码
  13. HTC Vive开发笔记之手柄震动 转
  14. Bezier曲线原理及实现代码(c++)
  15. Python实用脚本实践
  16. 一个简单的Vue过滤器
  17. Java网络编程UDP编程
  18. 期刊论文发表初审一般审哪些内容
  19. 计算机考研学校难度排行榜,计算机考研难度排行榜新鲜出炉 - 深圳远途教育
  20. nginx做缓存服务器、代理、文件服务器等笔记

热门文章

  1. 基于Bert论文构建Question-Answering模型
  2. cad指示箭头快捷键命令_CAD箭头引注快捷键是什么?
  3. 完美解决“无法验证发行者,确定要运行此软件吗”
  4. Spring boot + maven + jetty9在提交表单的时候出现Form too large
  5. Mac缓解或关闭鼠标加速
  6. 提前期与计划展望期------(转)
  7. 前端工程师面试问题归纳(一、问答类html/css/js基础)
  8. yarn报错Tarball is not in network and can not be located in cache
  9. ubuntu18.04怎么解压rar压缩文件
  10. MySQL深入浅出之索引