吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11493|回复: 18
收起左侧

[Android 原创] 【Android逆向案例】干掉梆梆加固免费版的反调试检测

  [复制链接]
encoderlee 发表于 2019-6-14 00:06
本文并无技术含量,纯属这个壳太傻,主要分享常见工具的使用心得


目标和现象

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

分析壳类型:
使用【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 之类的函数结束了自身,而非定时轮询检测。
1.png
查看死亡前的 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

3.png

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

4.png

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

干它

5.png

最简单的办法就是在 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尽量不对调用者产生影响。

6.png

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

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

7.png

修改后,直接在 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/

8.png

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

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

免费评分

参与人数 12威望 +2 吾爱币 +23 热心值 +11 收起 理由
qtfreet00 + 2 + 12 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
老板来包辣条 + 1 + 1 用心讨论,共获提升!
小宇同志 + 1 + 1 热心回复!
diaoxingyu + 1 + 1 在线网银客服端贷款,可以修改数据直接贷款,新闻报道了
XhyEax + 1 + 1 我很赞同!
cxp521 + 1 + 1 银行客户端这个。。。
ggshihai + 1 + 1 热心回复!
c_kongfe + 1 + 1 我很赞同!
debug_cat + 1 + 1 用心讨论,共获提升!
独行风云 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
zhanghui1982 + 1 + 1 我很赞同!
就这个名 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| encoderlee 发表于 2019-6-14 19:50
莫问刀 发表于 2019-6-14 10:26
向大佬低头,可惜看不懂ida里面的代码。怎么办

按 F5 反编译为 C 代码
chenjingyes 发表于 2019-6-14 00:51
我一楼  哈哈哈   谢谢楼主分享,好久没有这类文章了
飘舞的雪花 发表于 2019-6-14 01:49
夜步城 发表于 2019-6-14 08:14
不错,支持作者
xyzmiaomiao 发表于 2019-6-14 08:25
不错不错,支持一下
福慧增长69 发表于 2019-6-14 08:49
怎么看出是哪个银行
qq8945051 发表于 2019-6-14 08:56
路过看看你。。。。。。。。。。。。。。。。。
hdivy_ 发表于 2019-6-14 09:52
技术强,厉害了。。
Bruce_HD 发表于 2019-6-14 09:59
支持支持,感谢分享。
debug_cat 发表于 2019-6-14 10:26
向大佬低头,可惜看不懂ida里面的代码。怎么办
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-28 20:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表