吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 82029|回复: 309
收起左侧

[.NET逆向] 对火警的破解过程

    [复制链接]
ysd87 发表于 2014-4-18 20:11
本帖最后由 ysd87 于 2014-4-18 23:16 编辑

首先感谢 [Blue]大大的新手教程,菜鸟小白我看了之后第一个拿小米火警V0415.3来破解
------------------------------------------------------------------------------我是分割线--------------------------------------------------------------------------------------------------------------------
先上Blue大的新手教程传送门

第一课 http://www.52pojie.cn/thread-248348-1-1.html
第二课 http://www.52pojie.cn/thread-249034-1-1.html
第三课 http://www.52pojie.cn/thread-250626-1-1.html
第四课 http://www.52pojie.cn/thread-250633-1-1.html

------------------------------------------------------------------------------我是分割线--------------------------------------------------------------------------------------------------------------------
不说废话了,开始
首先,不管那么多,拿 NETReflector  加载  小米火警.exe 再说

火警1

火警1


发现一堆乱七八糟的名字,这不科学啊肯定是被混淆过了的,这就需要反混淆
还好 Blue 大教程里面的那个Reflexil 插件自带有反混淆的功能
QQ截图20140418175923.gif



火警3

火警3




果然发现了,这exe 用了 Dotfuscator 混淆过了,,戳死它,这会生成一个 小米火警.Cleaned.exe 的文件,再用Re来加载它
戳得爽吧,这下代码好看多了
终于开始正真的破解了
1.最核心的问题授权破解
用Bule大的方法。。直接搜索   “授权” 相信大家都会找到这个地方
[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();
                }
            }


幸福来的太容易了,很像关键代码,我的思路是看它授权成功的时候做了什么操作,,我再把这写操作注入到对象的构造器上面
在这里搞了好久。事实证明,不行。。怎么办
最后,在Re里面乱翻代码,可以说这里面每个方法都给我翻过了几遍。看哪个方法比较可疑
后来注意到一个方法 Class121里面的 method_0 方法,很明显一看就知道是登陆的方法, 登陆成功之后做了两个操作
[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];


给ID赋值当然不用说啦。。关键在于 赋值了个 this.Enum0_0 = Enum0.const_4; 然后就没后续操作了,也就是说后续操作是通过判断this.Enum0_0的状态来进行操作 const_4 代表着登陆成功的状态,大家都知道登陆成功之后就是开始验证授权了,那就是说授权失败的状态也是通过赋值 Enum0_0的
好啦。解析来查找 给 Enum0_0 赋值的地方了
4.gif

这么多引用不怕,老实的一个个看下去,
在  Class121的method_11() 看到。。方法内容是根据Enum状态的不同执行不同操作,仔细一看,这分明就是整个,从登陆到抢购的执行流程嘛,
刚才登陆的时候 赋值了个  Enum0.const_4  ,那么找到这个状态接下去要执行的方法 5.gif ,跑不掉了吧,戳进去


[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");
        }




关键代码在这了,这就是验证授权的地方了。。那么到底哪个才是正确授权的逻辑呢
在上面的执行流程可以看到,Enum0.const_4  接下里的状态是 6 跟 8
很明显了,中间那个判断就是授权成功的逻辑了。。。找到了。。那么就修改IL改变方法逻辑就行啦
具体怎样改我就不多说了,大家自己动手,相信能够改出来的



------------------------------------------------------------------------------我是分割线--------------------------------------------------------------------------------------------------------------------
授权搞定了,那么接下来就是臭名昭著的  后门
不用考虑,后门肯定要取自己的服务器数据。。最直接的,,抓包,我用的是 HTTP Analyzer
额。这个时候问题来了,我发现。我开着 HTTP Analyzer的时候。软件就到了  登陆中  就死都不动了,
我关掉它,又能跑下去了。。纠结啊
折腾好久才找到,居然在软件里面判断了现有进程的标题,对于特定的标题,软件就罢工真可恶
在 Class118 的 method_7()
[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();
                            }
                        }


戳爆它,继续抓包

抓到的包看到。。登陆完成之后还发了一个请求,指向 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)));


查找引用
6.gif



[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++;
            }


看来没错了。。这段代码存在明显的给用户名,密码赋值。。
当然还有其他判断依据 。。  UAcgBtAEkAbwBwAHQAcgAAcgBGAG0AbwBlAFM=gc2BGA  这个字符串解密出来的意思就是  ImportFromServer  怎么解出来的就不说了。
反正是找到了。。
好,接下来再找到哪个地方调用到这个该死的方法
7.gif

怎么找就不用说了吧。。找到这。。这后门就出来啦。。
改IL,砸了它,自己动手丰衣足食哈。就不多说了。我是把他这个if逻辑里面的指令清空



------------------------------------------------------------------------------我是分割线--------------------------------------------------------------------------------------------------------------------
这上面也只是火警两个最主要的核心破解啦,当然,还有其他的,去更新,去账号限制,改标题之类的就不说了,这些不难找
这里面用到的东西大多都是  Blue大新手教程里面的。嘿,小白第一次破解。哪里不对的欢迎指出。。
Blue大不发布破解版只能自己更生了,既然Blue大自己搞定制版,那我也不好自己发放破解版了,大家有需要的可以找Blue大搞定制版
当然,也可以跟我一样自己更生啦,没问题的

好啦,本次就说到这啦,谢谢观赏。此乃我在吾爱的处女贴啊,各位看官多洒点分分啊没图没真相,上个最后的结果图吧

pic

pic



这流程确实没详细说的那么详细,特别是IL指令的修改,没放出来就是让大家琢磨自己改,自己动手琢磨才印象最深刻(PS:其实是怕Blue大拿菜刀砍我)


点评

能不能出一个视频啊?你太有毅力了吧。  发表于 2014-9-24 13:37
简直是伟人啊~~~就一贴,就精华。。。。。  发表于 2014-4-21 18:41

免费评分

参与人数 66吾爱币 +1 热心值 +66 收起 理由
13111912317 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
otto + 1 我很赞同!
zjw99998 + 1 我很赞同!
drliunt + 1 我很赞同!
lliurf + 1 热心回复!
a721781832 + 1 谢谢@Thanks!
卟雨忆萧萧 + 1 谢谢@Thanks!
lhl510 + 1 热心回复!
dachensdu + 1 鼓励转贴优秀软件安全工具和文档!
nianhua + 1 谢谢@Thanks!
zcq21274711 + 1 我很赞同!
♂偶是屌丝℡ + 1 牛呀 可惜 我是小白 完全看不懂
tiandong0213 + 1 我很赞同!
119117 + 1 谢谢@Thanks!
じ☆ve_ㄣ晓影 + 1 伟人啊,必须要加分 啊
zhyf + 1 我很赞同!
struth + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
123qwe3 + 1 谢谢@Thanks!
MW1314 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
randy + 1 我很赞同!
Clarence + 1 我很赞同!
Aoouch + 1 谢谢@Thanks!
minianson + 1 我很赞同!
zhangbox0163 + 1 鼓励转贴优秀软件安全工具和文档!
yao6100 + 1 热心回复!
你与明日 + 1 已答复!
chaojiak47 + 1 兄弟,你学的挺快,我看半天都没看明白
没有名字 + 1 希望在明天能破解啊!~
cr7890 + 1 感谢你,雷锋同志~
jack55555 + 1 真的很牛逼!~!
449219454 + 1 先来学习呢,加油楼主。我也学习了。
juster7785 + 1 热心回复!
vipcrack + 1 昨天通用补丁作者说2处后门,一处后门校验.
zoshl + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
swater07 + 1 我很赞同!
421717582 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
aken + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
Jack101 + 1 我很赞同!
benko + 1 已答复!
zwb122521 + 1 感谢您的宝贵建议,我们会努力争取做得更好.
abc279479185 + 1 我很赞同!
yangguanglgh + 1 我很赞同!
守恒 + 1 这才是分享精神,32个赞
bm11459 + 1 不错 学习了 也可以自力更生
娈壹吧 + 1 谢谢@Thanks!
anson613 + 1 给力。感谢你的无私分享。blue大大的定制版.
X_son + 1 我很赞同!
铅笔先生 + 1 谢谢@Thanks!
秋山红叶 + 1 赞分享
Hyok + 1 我很赞同!
Fonq + 1 我很赞同!
密密麻麻 + 1 我很赞同!
小小小青年 + 1 咱一个把 ! 膜拜大大。。
ycan888 + 1 谢谢@Thanks!
丶老衲徒伤悲 + 1 可以的话加我好友,你是未来的大神
H2o + 1 鼓励优秀软件安全工具和文档!
chengley123 + 1 我很赞同!
符号人生 + 1 我很赞同!
Shark恒 + 1 我很赞同!
brack + 1 我很赞同!
mismore + 1 谢谢@Thanks!
卧龙传说 + 1 很好很强大 有意咨询。
小寒 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
半回车 + 1 你很牛,解救世界和平,发福利的任务就靠你.
紫色天堂 + 1 谢谢@Thanks!
jojaajj + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

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

 楼主| ysd87 发表于 2014-4-18 20:12
果断自沙
紫色天堂 发表于 2014-4-18 20:16
蛤蛤,这种教程终于出来了,虽然不怎么详细~~~~~

顺便问一句,LZ能找到限制多开的代码么
linshoulu 发表于 2015-4-4 13:18
厉害,那么这样说火警的后门是真的存在的,太可怕了
小爱网络 发表于 2015-3-30 19:31
建议楼主去做个破解补丁 要不然每期都这样搞  ~~~~
追风之音 发表于 2015-1-19 12:23
谢谢LZ分享  下载了 学习学习
LUOluodawei 发表于 2014-11-29 15:30
膜拜    求楼主发破解好的用下      983242188@qq.com
谢谢哈
lyh8766 发表于 2014-4-18 20:36
感谢楼主的教程,学习一下
半回车 发表于 2014-4-18 20:32
很好的科普帖子,学习了
zyf21 发表于 2014-4-18 20:29 来自手机
终于出教程了
铅笔先生 发表于 2014-4-19 08:59
吴战神 发表于 2014-4-18 20:52
插件Reflexi怎么添加到Relector中

Blue大大的教程里面有哦
 楼主| ysd87 发表于 2014-4-18 20:18
紫色天堂 发表于 2014-4-18 20:16
蛤蛤,这种教程终于出来了,虽然不怎么详细~~~~~

顺便问一句,LZ能找到限制多开的代码么

多开很容易找啊,在主窗体的构造函数里面做了限制了,干掉就是
紫色天堂 发表于 2014-4-18 20:19
ysd87 发表于 2014-4-18 20:18
多开很容易找啊,在主窗体的构造函数里面做了限制了,干掉就是

能把他的限制代码给我么,我照着找找
ak103 发表于 2014-4-18 20:20
膜拜大大啊
jojaajj 发表于 2014-4-18 20:22
支持教程,+1

点评

靠,全是优姐。。。。。。。  发表于 2014-4-21 18:40
 楼主| ysd87 发表于 2014-4-18 20:24
紫色天堂 发表于 2014-4-18 20:19
能把他的限制代码给我么,我照着找找

就在主窗体 MainWindow 的构造方法啊,
里面有
Process[] processes = Process.GetProcesses();
        foreach (Process process in processes)
        {
            if (process.MainWindowTitle.Contains("小米抢购助手-火警 V"))
            {
                Environment.Exit(1);
                return;
            }
        }
这段就是
lwangqinger 发表于 2014-4-18 20:25
感谢楼主!阅读之后茅厕顿开啊,一切都明了了
紫色天堂 发表于 2014-4-18 20:27
ysd87 发表于 2014-4-18 20:24
就在主窗体 MainWindow 的构造方法啊,
里面有
Process[] processes = Process.GetProcesses();

多谢,照着你的说法试试
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-21 19:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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