对小米火警的一些分析
本帖最后由 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 不知道分析的对不对,还请大神指正
没有看懂! {
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;
}
}
是不是在这改最多数量的 这是用RE反汇编出来的? brack 大神坐不住了?呵呵 都是你收费太高的原因,生意就要被逼人顶了。 学习了。不过有点没看懂。 思路出来了,那修改后有没有用呢 你搞定了,没有,发出来瞧瞧呗 楼主分析的没错,支持一下 懂了!已破授权,我也是在这里卡住了 说实话NET的完全不会{:301_998:}