Dlan 发表于 2014-4-17 18:37

对小米火警的一些分析

本帖最后由 Dlan 于 2014-4-17 18:52 编辑

本人乃是十足的小菜鸟,以下是对火警的一些分析,不知道对不对。火警的混淆的好厉害,对我来说却是是个很大的挑战。一下午都在看这个了。
尝试了很多方法,均已失败告终,字符串什么的,肯定是搜不到了。
首先来到main方法:
public MainWindow()
{
    this.InitializeComponent();
    base.Title = "小米抢购助手-火警 V0415.3       下载地址:http://xiaomi119.com";
    if (DateTime.Now > DateTime.Parse("2014/3/24 18:00:00"))
    {
    }
    this.d.IsEnabled = false;
    bool a = bh.a;
    bool createdNew = true;
    this.b = new Mutex(true, "5456413215648315315561815616", out createdNew);
    if (!createdNew)
    {
      Environment.Exit(1);
    }
    else
    {
      Process[] processes = Process.GetProcesses();
      foreach (Process process in processes)
      {
            if (process.MainWindowTitle.Contains("小米抢购助手-火警 V"))
            {
                Environment.Exit(1);
                return;
            }
      }
      string str = u.b("CheckVersion:0415.3");
      if (!string.IsNullOrEmpty(str))
      {
            string[] strArray = str.Split(new string[] { "||" }, StringSplitOptions.None);
            if (strArray.Equals("True"))
            {
                MessageBox.Show("软件需要升级,请立即升级!");
                Process.Start("iexplore.exe", strArray);
                Environment.Exit(1);
            }
            else if (!string.IsNullOrEmpty(strArray))
            {
                ((MiSekillPanelVM) ((MiSekillPanel) this.e.Content).DataContext).SekillDateTimeStr = strArray;
            }
            if (strArray.Length > 3)
            {
                u.a = strArray;
            }
            if (strArray.Length > 4)
            {
                int result = 0;
                if (int.TryParse(strArray, out result))
                {
                  s.a = result;
                }
            }
      }
      else
      {
            MessageBox.Show("授权服务器连接失败,点击确定退出程序!", "错误", MessageBoxButton.OK, MessageBoxImage.Hand);
            Environment.Exit(1);
      }
    }
}







程序调用了u.b,发送 CheckVersion:0415.3 参数 如果返回不为空 则提示升级。
那我们进去看看u.b有什么
internal static string b(string A_0)
{
    try
    {
      string str = "http://115.28.34.62:1986/CheckAuth.aspx";
      if (b)
      {
            str = "http://wyh.hd.xiaomi.com:1986/CheckAuth.aspx";
      }
      string str2 = cr.b(A_0);
      bg bg = new bg {
            e = true
      };
      return cr.a(bg.b(str, "data=" + HttpUtility.UrlEncode(str2)));
    }
    catch
    {
      return string.Empty;
    }
}







刚开始在这里卡住了很长时间,也没太在意,因为下面的小米的网址迷惑了我。后来经过WPE授权抓包,确定 火警的验证IP为115.28.34.62


然后ctrl+B 看看谁调用了他。
发现 MiSekiller.MiSekillPanel.h(Object, RoutedEventArgs) : Void
关键代码:
else if ("miCopyPassword".Equals(item.Name))
    {
      Clipboard.SetText(selectedItem.Password);
    }
    else if ("miShouquanma".Equals(item.Name))
    {
      ShouquanmaWin win = new ShouquanmaWin();
      win.ShowDialog();
      string str = win.a();
      if (!string.IsNullOrEmpty(str))
      {
            string xiaomiId = selectedItem.XiaomiId;
            string[] strArray = u.b("AddShouquan:" + xiaomiId + "||" + str).Split(new string[] { "||" }, StringSplitOptions.None);
            if (strArray.Length == 2)
            {
                MessageBox.Show(strArray, "授权结果");
                if ("OK".Equals(strArray))
                {
                  this._vm.i.a(ai.e);
                  selectedItem.Message = "";
                  this._vm.i.b(true);
                  this._vm.i.t();
                }
            }
            else
            {
                MessageBox.Show("未知错误!", "授权结果");
            }
      }
    }
    else if ("miNoAuthTry".Equals(item.Name))


      
因此我猜想,向这个IP 发送不同的数据返回不同的结果 ,比如
发送 CheckVersion:0415.3 返回版本信息
发送AddShouquan:" +xiaomi + "||" +str 返回授权结果等等 编码方式程序也说得很清楚
通过上面代码看到strArra[1] 中存着授权结果 ,如果 strArra[0] 为OK 则执行this._vm.i.a(ai.e);
                  selectedItem.Message = "";
                  this._vm.i.b(true);
                  this._vm.i.t();

到这里 破解思路就出来了。菜鸟第一次破解,net 不知道分析的对不对,还请大神指正

caiziyaya 发表于 2014-4-17 18:42

没有看懂!

vip624585662 发表于 2014-4-18 01:21

{
        this._fileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
        this._fileDialog.FilterIndex = 1;
        this._fileDialog.RestoreDirectory = true;
        if (this._fileDialog.ShowDialog() == true)
        {
                this.txtAccountFile.Text = this._fileDialog.FileName;
                FileStream fileStream = new FileStream(this.txtAccountFile.Text, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                StreamReader streamReader = new StreamReader(fileStream, Encoding.ASCII);
                int num = 0;
                int num2 = bh.a ? 20 : 20;
                while (CSVDataViewModel.GetInstance().SekillInfoList.Count < num2)
                {
                        string text = streamReader.ReadLine();
                        if (text == null)
                        {
                                IL_241:
                                if (num > 0)
                                {
                                        CSVDataViewModel.GetInstance().Save();
                                }
                                fileStream.Close();
                                this.InitSekillInfoList();
                                MessageBox.Show("共导入了" + num + "条账号数据!");
                                return;
                        }
                        bool flag = false;
                        if (text.Length == 172)
                        {
                                text = ah.a(text);
                                flag = true;
                        }
                        if (text.Contains("----"))
                        {
                                MiSekillPanel.c c = new MiSekillPanel.c();
                                c.a = text.Split(new string[]
                                {
                                        "----"
                                }, StringSplitOptions.None).Trim();
                                string text2 = text.Split(new string[]
                                {
                                        "----"
                                }, StringSplitOptions.None).Trim();
                                if (flag)
                                {
                                        text2 = ah.b(text2);
                                }
                                if (CSVDataViewModel.GetInstance().SekillInfoList.Count(new Func<UserSekillVM, bool>(c.b)) > 0)
                                {
                                        MessageBox.Show("存在重复的账号:" + c.a);
                                }
                                else
                                {
                                        UserSekillVM item = new UserSekillVM
                                        {
                                                Account = c.a,
                                                Password = text2,
                                                Status = "导入成功"
                                        };
                                        CSVDataViewModel.GetInstance().SekillInfoList.Add(item);
                                        num++;
                                }
                        }
                }
                MessageBox.Show("本软件最多支持" + num2 + "个账号同时抢购!");
                goto IL_241;
        }
}
是不是在这改最多数量的

brack 发表于 2014-4-17 18:43

这是用RE反汇编出来的?

丶老衲徒伤悲 发表于 2014-4-17 19:02

brack 大神坐不住了?呵呵 都是你收费太高的原因,生意就要被逼人顶了。

马斯维尔 发表于 2014-4-17 19:03

学习了。不过有点没看懂。

我好气呀 发表于 2014-4-17 19:05

思路出来了,那修改后有没有用呢

davidmtk 发表于 2014-4-17 19:07

你搞定了,没有,发出来瞧瞧呗

Owner_Cracker 发表于 2014-4-17 19:19

楼主分析的没错,支持一下

lwangqinger 发表于 2014-4-17 19:19

懂了!已破授权,我也是在这里卡住了

凌云9 发表于 2014-4-17 19:22

说实话NET的完全不会{:301_998:}
页: [1] 2 3 4 5 6 7
查看完整版本: 对小米火警的一些分析