首页
社区
课程
招聘
[原创]手机版MSN用户帐号安全性分析及通过网络数据包还原用户密码
2012-9-3 13:42 10575

[原创]手机版MSN用户帐号安全性分析及通过网络数据包还原用户密码

2012-9-3 13:42
10575
1、【软件简介】:
以下文字摘自其官方网站:http://3g.msn.cn/pc/  (王婆卖瓜,自卖自夸,你懂的……)
微软MSN移动互联网服务提供包括手机MSN(即时通讯Messenger)、必应移动搜索、手机SNS(全球最大Windows Live在线社区)、中文资讯,手机娱乐和手机折扣等创新移动服务,满足了用户在移动互联网时代的沟通、社交、出行、娱乐等诸多需求。

2、【胡言乱语】
有的人一看微软出品,就天真的以为必属精品,其实不然。近年来用户隐私问题日趋严峻,而智能移动终端的普及有带来了新的机遇同时也带来了新的安全隐患,用户个人密码的泄漏导致给犯罪分子以可乘之机,犯罪分子只要获得你的一个可用密码就可以根据你的密码组成来破解你的银行卡号,邮箱密码等。
写的不好,大家多担待。

3、【算法分析】
软件 MSN_Android.apk 版本:7.1.0.12
工具:ApkTool_GUI 2.0.exe

==========================================================
文件: cn.msn.messenger.h.a.java
  // 函数功能:发送一些客户端信息到服务器,登录hotmail
  // 参    数:paramString1 登录帐号, paramString2 登录密码
  // 返 回 值: 无
  public final void a(String , String paramString2)
  {
    if (CoreControler.o)
      return;
    CoreControler.D = System.currentTimeMillis();
    CoreControler.T = 1;
    j.a("MCCPCMD reqeustAuthentication");
    CoreControler.H = false;
    cn.msn.messenger.f.b localb1 = new cn.msn.messenger.f.b();
    localb1.a = ContactListActivity.a;
    CoreControler.ak.a(0, localb1);
   
    // str1 是登录密码的密文,h.a() 是加密算法,文件是:cn.msn.messenger.l.h.java
    String str1 = h.a(paramString2, paramString1);
   
   
   
    String str2 = CoreControler.aw.d();
    cn.msn.messenger.g.m localm = CoreControler.ay;
    String str3 = Integer.toString(CoreControler.ay.p());
    StringBuffer localStringBuffer = new StringBuffer();
    if ((Build.MODEL != null) && (!"".equals(Build.MODEL)))
    {
      localStringBuffer.append("model:");
      localStringBuffer.append(Build.MODEL);
    }
    if ((Build.VERSION.SDK != null) && (!"".equals(Build.VERSION.SDK)))
    {
      localStringBuffer.append(" sdk ver:");
      localStringBuffer.append(Build.VERSION.SDK);
    }
    if ((Build.VERSION.RELEASE != null) && (!"".equals(Build.VERSION.RELEASE)))
    {
      localStringBuffer.append(" release ver:");
      localStringBuffer.append(Build.VERSION.RELEASE);
    }
    String str4 = cn.msn.messenger.l.m.d(localStringBuffer.toString());
    int i = 1 + a;
    a = i;
    String str5;
    label236: String str6;
    if (str2.equals("0"))
    {
      str5 = "";
      if (localm == null)
        break label593;
      str6 = localm.x();
      label248: if (!cn.msn.messenger.l.m.a(str3))
        break label600;
      label256: if (!cn.msn.messenger.l.m.a(CoreControler.aH))
        break label607;
    }
    label593: label600: label607: for (String str7 = CoreControler.aH; ; str7 = "320*240")
    {
      if (str4.trim().equals(""))
        str4 = "0";
      String str8 = CoreControler.aw.f();
      String str9 = CoreControler.aw.g();
      String[] arrayOfString = new String[17];
      arrayOfString[0] = "RASI";
      arrayOfString[1] = i;
      arrayOfString[2] = paramString1;
      arrayOfString[3] = str1;
      arrayOfString[4] = str5;
      arrayOfString[5] = str6;
      arrayOfString[6] = "0";
      arrayOfString[7] = str3;
      arrayOfString[8] = "PICA";
      arrayOfString[9] = "2000";
      arrayOfString[10] = "7.1.0.12";
      arrayOfString[11] = str7;
      arrayOfString[12] = str4;
      arrayOfString[13] = str8;
      arrayOfString[14] = str9;
      arrayOfString[15] = "PNG";
      arrayOfString[16] = "AMR";
      g localg = new g(f.a(arrayOfString).getBytes(), this);
      localg.d = a;
      localg.a = true;
      localg.f = true;
      b(localg);
      if (!CoreControler.l)
        break;
      cn.msn.messenger.f.b localb2 = new cn.msn.messenger.f.b();
      localb2.a(2131231109);
      CoreControler.ak.a(9, localb2);
      break;
      str5 = str2;
      break label236;
      str6 = "";
      break label248;
      str3 = "1";
      break label256;
    }
  }

==========================================================
文件: cn.msn.messenger.l.h.java
package cn.msn.messenger.l;

public final class h
{
  public static String a(String paramString1, String paramString2)
  {
    byte[] arrayOfByte1 = paramString2.getBytes();
    byte[] arrayOfByte2 = paramString1.getBytes();
    int i = 0;
    int j = 0;
    while (true)
    {
      if (i >= arrayOfByte2.length)//循环次数为密码的长度
        return new String(b.a(arrayOfByte2));//这里是base64算法,对 arrayOfByte2 进行base64
      arrayOfByte2[i] = (byte)(arrayOfByte2[i] ^ arrayOfByte1[j]);//密码异或帐号等到->arrayOfByte2
      j++;
      if (j == arrayOfByte1.length)//如果密码长度大于帐号长度则循环异或帐号
        j = 0;
      i++;
    }
  }
}
==========================================================
通过以上分析,我们可以看出这种密钥传输机制几乎没有安全性可言。黑客可以很容易在网关抓到数据包,然后从中得到用户的登录密码。从而阅读你的邮件。
如果恰巧你的支付宝也是它,可能会给您带来经济损失。

登录数据包格式如下:(因为隐私原因,我就不上传数据包来,大家可以自己抓包分析一下。)


附一个密码解密工具
Msn_Key_Finder.rar

4、写在最后,如果你的手机搜索到没有加密的Wifi热点,不要随便登录你的个人邮箱,IM软件,因为这很可能是黑客搭的一个蜜罐。
比如北京的朋友可以搭建一个"“My Beijing"的热点来钓鱼

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞3
打赏
分享
最新回复 (3)
雪    币: 6140
活跃值: (3362)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
MaYil 2012-9-3 13:52
2
0
沙发,支持一下下.
雪    币: 388
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
huzhao 2012-9-3 15:07
3
0
是土匪么?
雪    币: 122
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
张振江 2012-11-5 17:21
4
0
不是土匪,是强盗……
游客
登录 | 注册 方可回帖
返回