前言
前段时间,国外知名的安全公司fireeye发表了一篇病毒分析文章,讲述的主角是一个专门针对手机银行的android手机病毒。文章链接如下:https://www.fireeye.com/blog/threat-research/2015/12/slembunk_an_evolvin.html。这个手机病毒变种甚多,影响广泛,也不乏一些高端技术的应用。其中有一个很有意思的特性,就是它可以劫持手机银行的登录界面,从而盗取受害者的银行账号、密码。
看完fireeye这篇精彩的分析文章之后,我对这个病毒使用的一些技术很感兴趣,无奈没有找到样本,不能自己动手分析,因此也只能作罢。
事情过了大概一两个月,有一次和朋友出去吃饭聊起这个病毒的一些特性。友人说,你说的这个技术梆梆就有啊,而且他们还出了一个防御界面劫持的SDK呢。听完我甚是欣喜,于是就有了接下来对梆梆SDK的分析。下面分析的SDK均可以在梆梆的SDK主页上下载到。http://www.bangcle.com/solution/sdk-center/。
梆梆防界面劫持SDK
界面劫持概述
界面劫持通俗来说就是病毒或木马在后台实时监控某个窗口的产生,例如QQ、支付宝、手机银行等软件的登录界面。一旦发现目标窗口出现,病毒就马上创建一个跟目标窗口一毛一样的窗体来覆盖在它之上。
当发生界面劫持时,用户在无察觉的情况下将自己的账号、密码信息输入到仿冒界面中,恶意程序再把这些数据上报到其自身服务器,这个过程便是钓鱼攻击。
界面劫持具有病毒制作成本低(技术含量低)、用户难察觉、杀毒软件不易查杀等特点而被广泛使用。早在PC时代该技术就已经很成熟了,当时比较出名的是“QQ粘虫病毒”,此病毒看名字就已经通俗易懂了,主要是被用来盗取受害者的QQ账号密码。
SDK预览
梆梆的防界面劫持SDK里面提供了两个APK,一个是防界面劫持demo,我们可以称它为demo1,界面如图1。从图中可以看出,梆梆的SDK提供了基类和接口两种方式来防御界面劫持。
另一个就是界面劫持demo,我们可以称它为demo2,界面如图2所示。它的功能比较简单,就是启动和关闭界面劫持。
梆梆想的还是蛮周到的,提供了攻、防两个程序。Demo2开启功能后可以劫持demo1产生的窗口。Demo1检测到界面劫持之后会给用户一个提示,“疑似非本应用界面,请注意!!!”。如图3。
逆向分析
看完了梆梆SDK的功能演示,我觉得他们这技术很是新奇,于是准备逆向分析之。反编译界面劫持demo的时候发现该APK加了梆梆的壳,无奈手工脱壳,接着分析。(对梆梆加固的APK脱壳感兴趣的同学可以留个言,后面可以考虑出一篇怎么脱梆梆壳的文章)
在理解梆梆防界面劫持SDK原理之前,我们先来了解下android程序中onPause方法的一些知识。
onPause方法用于由一个Activity转到另一个Activity、设备进入休眠状态(屏幕锁住了)、或者有dialog弹出时由系统通知程序的一个方法。此时,我们的android程序知道自己的窗体发生切换了。在这个方法里面,开发者可以保存一些必要的窗体状态信息。
当界面劫持发生时,正常APP的登录界面会被病毒程序的仿冒界面覆盖,即上述所说的一个Activity转到另一个Activity,此时正常APP的onPause方法会被调用。因此,梆梆的界面劫持SDK在onPause阶段检查顶层窗口即可判断是否被劫持了。
梆梆防界面劫持SDK的代码非常简单,逆向出来的源码不足百行,已经自测功能正常,大致如下:
public class MyBaseActivity extends Activity { private static Set set = new HashSet(); private boolean b = true; @Override protected void onCreate(Bundle savedInstanceState) { if (set.size() == 0) { try { InputStream is = getAssets().open("white.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); while (true) { String write = br.readLine(); if (write == null) { break; } set.add(write); } is.close(); br.close(); } catch (IOException exp) { exp.printStackTrace(); } } set.add(getPackageName()); super.onCreate(savedInstanceState); } protected void onPause() { if(b) { String packagename = ((ActivityManager)getSystemService(Context.ACTIVITY_SERVICE)). getRunningTasks(1).get(0).topActivity.getPackageName(); if(!set.contains(packagename)) { String msg = "疑似界面劫持攻击,请小心使用,并查杀病毒!"; Toast toast = Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG); toast.setGravity(17, 0, 0); toast.show(); b = false; } } b = true; super.onPause(); } }
SDK的不足之处
逆完了梆梆的防界面劫持SDK之后,我觉得他们的这个检测方法并不是很好,主要有以下几点不足之处:
1. 误报多。
因为梆梆是在onPause的时候检测顶层窗口是不是自己的,如果不是,就开始报警。所以说,只要是窗口发生切换,不论是不是界面劫持它都会报警。为了证明我的猜测,我用Android Studio生成了一个完全没有功能的Hello World测试程序,之后点击“Run”按钮来启动程序。如图4。
稍等片刻之后,Android Studio会启动我们的测试程序。与此同时,窗体会发生切换,由梆梆的防界面劫持demo切到了我们的测试程序界面。此时,梆梆的防界面劫持demo就发出报警了,说有界面劫持发生。这是一个典型的误报。如图5所示。而且类似这样的界面切换操作,在android机器上是很容易发生的,因此多误报在所难免。
显然,梆梆也意识到了误报多这个问题了。于是,他们在SDK中加入了一些白名单,主要根据包名来过滤,如果是白名单中的程序就不报警了。白名单如图6所示。
2. 容易被绕过。
既然有了白名单,那么无疑是增加了被绕过的几率。例如图6中的com.sonyericsson.*,这些程序只有在索尼的机器上才会有。那么病毒木马只要把自己命名成com.sonyericsson.home,就可以在诸如小米、华为、三星这样的手机上绕过梆梆防界面劫持SDK的检测了。
3. 仅支持android 5.0以下机型。
由上面我逆向出来的代码中可以看出,梆梆防界面劫持SDK主要是通过getRunningTasks这个函数来获取顶层窗口对应的包名的。然而这个函数存在泄露用户个人信息的风险,因此在android 5.0以后google就不让第三方程序使用该API了。Google的文档中也写的很清楚了,如图7所示。
总结
通过逆向梆梆的防界面劫持SDK,我对android上的界面劫持技术有了一个更深入的了解。另外,梆梆在android安全方面有很多的技术储备,如果能很好的解决上述三个不足之处,那应该能造福不少的android用户。
pdf文档:
梆梆SDKs详细分析 - 防界面劫持SDK.zip.*转载请注明来自看雪论坛@PEdiy.com
相关推荐
北京梆梆安全科技有限公司-50749040-1.zip
"梆梆加固方案分析和破解--论梆梆安全加固的不可靠" 梆梆加固方案分析和破解是一篇关于Android应用程序加固方案的分析和破解文章。通过对梆梆加固方案的技术分析和破解,文章揭示了梆梆加固方案的保护策略和实现...
第一讲-梆梆安全--常见组件安全问题及规避第一讲-梆梆安全--常见组件安全问题及规避第一讲-梆梆安全--常见组件安全问题及规避
Andorid APK反逆向解决方案:梆梆加固原理探寻-CSDN
梆梆企业版加固防篡改相关文件主要关注的是移动应用的安全保护,特别是在Android平台上。梆梆(Baidu BabelSafe或BBK)是一家提供应用程序安全服务的公司,其企业版加固服务旨在保护开发者的应用程序不被逆向工程...
在给定的压缩包文件中,包含的“libDexHelper.so”是一个动态链接库文件,它在Android系统中起到关键作用,与梆梆企业版的防dump机制密切相关。 在Android应用开发中,Dex文件是Dalvik虚拟机执行的字节码格式,包含...
梆梆加固方案分析和破解__论梆梆安全加固的不可靠.doc
脱壳练习(2)-最新免费版梆梆加固脱壳笔记-附件资源
梆梆安全银行客户端漏洞案例分析梆梆安全银行客户端漏洞案例分析梆梆安全银行客户端漏洞案例分析梆梆安全银行客户端漏洞案例分析梆梆安全银行客户端漏洞案例分析
梆梆程序管理_0.8_wap世纪-4梆梆程序管理_0.8_wap世纪-4梆梆程序管理_0.8_wap世纪-4
梆梆安全测评平台的自动化检测解决方案可以大幅提升检测效率,并支持批量应用安全性数据的统计分析。 在应用安全管理方面,开发者在开发过程中往往容易忽视安全性问题或者难以全程追踪应用安全状况,导致在开发迭代...
MAC版梆梆加固助手是梆梆安全应用加固系统的 PC 端加固辅助工具,可以帮助客户实现“一 键加固 -> 自动下载 -> 自动打渠道包 -> 自动签名 -> 自动导出”的一站式加固服务体 验,是客户执行应用加固操作的必备助手。
DroidSword快速锁定具体的方法类名、FDex2_1.1去壳获取dex、GDA3.62查看去壳后的源代码
这里实现了安卓移动APP防二次打包、防重签名、防篡改的自动化一键式加固工具。成熟的安全加固方案,均已实现和投入使用,解决了企业和个人的安全问题。针对开发者指定的移动应用(apk),以本地工具的方式,自动完成...
1. **什么是.dex文件**:.dex文件是Android应用的主要组成部分,它包含了类、方法和字段的定义,以及相应的字节码。这些文件由Java源代码通过Java编译器和Dex工具转换而来。 2. **Android调试桥(ADB)**:Android ...