本帖最后由 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 不知道分析的对不对,还请大神指正
|