吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 23585|回复: 65
收起左侧

[.NET逆向] 对小米火警的一些分析

  [复制链接]
Dlan 发表于 2014-4-17 18:37
本帖最后由 Dlan 于 2014-4-17 18:52 编辑

本人乃是十足的小菜鸟,以下是对火警的一些分析,不知道对不对。火警的混淆的好厉害,对我来说却是是个很大的挑战。一下午都在看这个了。
尝试了很多方法,均已失败告终,字符串什么的,肯定是搜不到了。
首先来到main方法:
[Asm] 纯文本查看 复制代码
public MainWindow()
{
    this.InitializeComponent();
    base.Title = "小米抢购助手-火警 V0415.3       下载地址:[url=http://xiaomi119.com]http://xiaomi119.com[/url]";
    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[0].Equals("True"))
            {
                MessageBox.Show("软件需要升级,请立即升级!");
                Process.Start("iexplore.exe", strArray[1]);
                Environment.Exit(1);
            }
            else if (!string.IsNullOrEmpty(strArray[2]))
            {
                ((MiSekillPanelVM) ((MiSekillPanel) this.e.Content).DataContext).SekillDateTimeStr = strArray[2];
            }
            if (strArray.Length > 3)
            {
                u.a = strArray[3];
            }
            if (strArray.Length > 4)
            {
                int result = 0;
                if (int.TryParse(strArray[4], out result))
                {
                    s.a = result;
                }
            }
        }
        else
        {
            MessageBox.Show("授权服务器连接失败,点击确定退出程序!", "错误", MessageBoxButton.OK, MessageBoxImage.Hand);
            Environment.Exit(1);
        }
    }
}

 

 



程序调用了u.b  ,发送 CheckVersion:0415.3 参数 如果返回不为空 则提示升级。
那我们进去看看u.b有什么
[Asm] 纯文本查看 复制代码
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
关键代码:
[Asm] 纯文本查看 复制代码
 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[1], "授权结果");
                if ("OK".Equals(strArray[0]))
                {
                    this._vm.i[selectedItem].a(ai.e);
                    selectedItem.Message = "";
                    this._vm.i[selectedItem].b(true);
                    this._vm.i[selectedItem].t();
                }
            }
            else
            {
                MessageBox.Show("未知错误!", "授权结果");
            }
        }
    }
    else if ("miNoAuthTry".Equals(item.Name))


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

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

免费评分

参与人数 4热心值 +4 收起 理由
zxd0112 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
blmk + 1 我很赞同!
liuchengwen + 1 我很赞同!
1006706246 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

caiziyaya 发表于 2014-4-17 18:42
没有看懂!
vip624585662 发表于 2014-4-18 01:21
[HTML] 纯文本查看 复制代码
{
	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)[0].Trim();
				string text2 = text.Split(new string[]
				{
					"----"
				}, StringSplitOptions.None)[1].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
丶老衲徒伤悲 发表于 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的完全不会
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 13:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表