苏飞论坛
标题: 来个破解【小米火警】的教程 [打印本页]
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:08
标题: 来个破解【小米火警】的教程
现在小米的手机现在很火爆so 现在抢小米官网抢手机就很难
------现在出来很多抢小米的软件,今天就拿火警为例讲讲他的破解过程Let‘s Go-----
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:09
不说废话了,开始
首先,不管那么多,拿 NETReflector 加载 小米火警.exe 再说
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:12
发现一堆乱七八糟的名字,这不科学啊undefined肯定是被混淆过了的,这就需要反混淆
还好 Blue 大教程里面的那个Reflexil 插件自带有反混淆的功能
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:15
怎么图片不能一下全部发出来?一发出来就变成小的啦~
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:16
果然发现了,这exe 用了 Dotfuscator 混淆过了,,戳死它,这会生成一个 小米火警.Cleaned.exe 的文件,再用Re来加载它
戳得爽吧,这下代码好看多了undefined
终于开始正真的破解了
1.最核心的问题授权破解
用Bule大的方法。。直接搜索 “授权” 相信大家都会找到这个地方
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:17
[C#] 纯文本查看 复制代码
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();
}
}
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:18
幸福来的太容易了,很像关键代码,我的思路是看它授权成功的时候做了什么操作,,我再把这写操作注入到对象的构造器上面
在这里搞了好久。事实证明,不行。。怎么办undefined
最后,在Re里面乱翻代码,可以说这里面每个方法都给我翻过了几遍。看哪个方法比较可疑
后来注意到一个方法 Class121里面的 method_0 方法,很明显一看就知道是登陆的方法, 登陆成功之后做了两个操作
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:19
[C#] 纯文本查看 复制代码
this.Enum0_0 = Enum0.const_4;
this.miSekillPanelVM_0.method_6(this).XiaomiId = str3.Split(new string[] { "userId=" }, StringSplitOptions.None)[1].Split(new char[] { ';' })[0].Split(new char[] { ',' })[0];
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:19
给ID赋值当然不用说啦。。关键在于 赋值了个 this.Enum0_0 = Enum0.const_4; 然后就没后续操作了,也就是说后续操作是通过判断this.Enum0_0的状态来进行操作 const_4 代表着登陆成功的状态,大家都知道登陆成功之后就是开始验证授权了,那就是说授权失败的状态也是通过赋值 Enum0_0的
好啦。解析来查找 给 Enum0_0 赋值的地方了
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:20
这么多引用不怕,老实的一个个看下去,
在 Class121的method_11() 看到。。方法内容是根据Enum状态的不同执行不同操作,仔细一看,这分明就是整个,从登陆到抢购的执行流程嘛,
刚才登陆的时候 赋值了个 Enum0.const_4 ,那么找到这个状态接下去要执行的方法 ,跑不掉了吧,戳进去
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:21
[C#] 纯文本查看 复制代码
string str = Class0.smethod_0(Class1.smethod_0("awBoAHQAQwBoAHUAZQBBAgGAlBAVAMGA") + ":" + this.miSekillPanelVM_0.method_6(this).XiaomiId);
this.miSekillPanelVM_0.method_5(str);
if (str.StartsWith(Class1.smethod_0("ARw==AE4")))
{
this.Enum0_0 = Enum0.const_5;
this.Boolean_1 = false;
this.miSekillPanelVM_0.method_6(this).Message = Class1.smethod_0("C4ALpUuAC5R+1PzDXuuftA+d");
}
else if (str.StartsWith(Class1.smethod_0("ASw==AE8")))
{
this.Enum0_0 = Enum0.const_8;
this.Boolean_1 = true;
}
else
{
this.Enum0_0 = Enum0.const_23;
this.miSekillPanelVM_0.method_6(this).Message = Class1.smethod_0("++VGWdD/wFgb2OI+U49XXiTZ");
}
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:23
关键代码在这了,这就是验证授权的地方了。。那么到底哪个才是正确授权的逻辑呢
在上面的执行流程可以看到,Enum0.const_4 接下里的状态是 6 跟 8
很明显了,中间那个判断就是授权成功的逻辑了。。。找到了。。那么就修改IL改变方法逻辑就行啦
具体怎样改我就不多说了,大家自己动手,相信能够改出来的
------------------------------------------------------------------------------我是分割线---------------------------------------------------------------------------------------------
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:24
授权搞定了,那么接下来就是臭名昭著的 后门
不用考虑,后门肯定要取自己的服务器数据。。最直接的,,抓包,我用的是 HTTP Analyzer
额。这个时候问题来了,我发现。我开着 HTTP Analyzer的时候。软件就到了 登陆中 就死都不动了,
我关掉它,又能跑下去了。。纠结啊
折腾好久才找到,居然在软件里面判断了现有进程的标题,对于特定的标题,软件就罢工真可恶
在 Class118 的 method_7()
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:25
[C#] 纯文本查看 复制代码
foreach (Process process in enumerable)
{
string str = process.MainWindowTitle.ToLower();
if (!(((!str.Contains("http") && !str.Contains("sniffer")) && ((!str.Contains("wireshark") && !str.Contains("sock")) && !str.Contains("charles"))) || process.MainWindowTitle.ToLower().Contains("http://")))
{
Thread.Sleep(0x3e8);
this.method_7();
}
}
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:26
戳爆它,继续抓包
抓到的包看到。。登陆完成之后还发了一个请求,指向 http://115.28.34.62:1986/CheckAuth.aspx
狐狸尾巴出来了,接下来就是 搜索字符串,找到 Class0 的 smethod_0(string)[C#] 纯文本查看 复制代码
string str = "http://115.28.34.62:1986/CheckAuth.aspx";
if (bool_0)
{
str = "http://wyh.hd.xiaomi.com:1986/CheckAuth.aspx";
}
string str2 = Class1.smethod_3(string_1);
Class118 class2 = new Class118 {
bool_1 = true
};
return Class1.smethod_4(class2.method_0(str, "data=" + HttpUtility.UrlEncode(str2)));
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:27
查找引用
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:29
[C#] 纯文本查看 复制代码
string[] strArray = Class0.smethod_0(Class1.smethod_0("UAcgBtAEkAbwBwAHQAcgAAcgBGAG0AbwBlAFM=gc2BGA") + ":" + int_0).Split(new char[] { '\n' });
int num = 0;
foreach (string str in strArray)
{
if (!string.IsNullOrEmpty(str))
{
string[] strArray2 = str.Split(new char[] { '\r' });
UserSekillVM item = new UserSekillVM {
Account = strArray2[0].Trim(),
Password = strArray2[1].Trim(),
Status = "Imported"
};
list.Add(item);
num++;
}
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:35
看来没错了。。这段代码存在明显的给用户名,密码赋值。。
当然还有其他判断依据 。。 UAcgBtAEkAbwBwAHQAcgAAcgBGAG0AbwBlAFM=gc2BGA 这个字符串解密出来的意思就是 ImportFromServer 怎么解出来的就不说了。
反正是找到了。。
好,接下来再找到哪个地方调用到这个该死的方法
怎么找就不用说了吧。。找到这。。这后门就出来啦。。
改IL,砸了它,自己动手丰衣足食哈。就不多说了。我是把他这个if逻辑里面的指令清空
------------------------------------------------------------------------------我是分割线--------------------------------------------------------------------------------------------------------------------
这上面也只是火警两个最主要的核心破解啦,当然,还有其他的,去更新,去账号限制,改标题之类的就不说了,这些不难找
这里面用到的东西大多都是 Blue大新手教程里面的。嘿,小白第一次破解。哪里不对的欢迎指出。。
作者: ^陪妳ソ看日落 时间: 2014-4-21 16:39
谢谢观赏!
作者: bor———— 时间: 2014-4-21 22:25
受教了,学习中……
作者: cload 时间: 2014-4-21 22:38
我只是路过看看的。
作者: dyyyj 时间: 2014-4-22 11:23
这里可真是藏龙卧虎啊
作者: paywoll 时间: 2014-4-22 15:25
反混淆后无法运行呀
作者: xjwebs 时间: 2014-4-23 16:20
这么给力的教程,真希望有个简单的视频教程
作者: ss0075 时间: 2014-4-24 09:11
我擦 托管语言 太不安全了 混淆器都没用
作者: wllaoshu 时间: 2014-4-25 15:50
楼主工具给提供一个连接被。
作者: yyhapy 时间: 2014-4-27 00:28
强烈支持楼主ing……
作者: jiejieme 时间: 2014-5-3 20:12
新版用了DNGuard加壳了破解难度加大。
作者: h245289645 时间: 2014-5-4 22:12
是不是楼主自己破解过程还是转发别人的,这篇我在吾爱破解论坛看到过
作者: 风龙天泉 时间: 2014-5-13 17:14
真是难得给力的帖子啊,强烈支持楼主。
作者: zilo555 时间: 2014-6-14 16:03
C:\360高速下载\1.png
大师 这是什么情况
作者: zilo555 时间: 2014-6-14 16:04
求教大师
作者: ♂.Smile 时间: 2014-6-18 15:24
看到很窝火,你转载就转载吧。你tm还发帖。这个贴在52破解上。已经很久了。
强烈要求群主删帖。
作者: 小飞牛 时间: 2014-8-20 16:39
额,我还正准备,给个赞呢。难道是那边发帖的人,又来这边发了。
作者: 席城的爱 时间: 2014-9-24 11:14
请问你说的 bule的教程在哪里?
作者: zdking 时间: 2016-5-5 23:17
碉堡了
欢迎光临 苏飞论坛 (http://www.sufeinet.com/) |
Powered by Discuz! X3.4 |