本帖最后由 ysd87 于 2014-4-24 11:31 编辑
哈喽,我又出来卖萌了。。
上个帖子破解过程才发,奶奶的火警就给我加强混淆了。。真操蛋。继续跟进。。。。
这次内容是以上个帖子内容为基础的。没看过的先看上个帖子吧,传送门:http://www.52pojie.cn/thread-252697-1-1.html
------------------------------------------------------------------------------我是分割线--------------------------------------------------------------------------------------------------------------------
好了,进入正题
首先,我知道按照上个帖子的步骤反混淆的话,最终反出来的exe是不能运行的。。
自带的工具不行。那么我们用其他的工具。。 .Net 程序反混淆神器啊 de4dot 附上传送门下载 http://pan.baidu.com/s/1pKXwM 密码: ap5n
下载下来就是这个了。。接下来。反混淆 ,用命令行 de4dot 小米火警.exe的全路径 --dont-rename
这时就会生成一个叫做 小米火警-cleaned.exe 的文件了,嘿,这个文件可以运行的哦。。注意,,命令行的 --dont-rename 一定要加,不然反出来的效果就跟Re里面插件反出来的效果一样了
还是用Re打开它
额,这是啥东西。心中万匹草泥马奔腾而过。。
好吧,蛋定。看看里面的代码先。。。
大家还记得上个帖子关于授权修改的那个位置吧。。里面有个字符串 ASw==AE8
直接搜索这个字符串。。。嘿,还真有。。看看代码
[C#] 纯文本查看 复制代码 private void Class()
{
if (Class && !this.Class())
{
string str = Class.(Class.Class("awBoAHQAQwBoAHUAZQBBAgGAlBAVAMGA") + ":" + this..Class(this).XiaomiId);
this..Class(str);
if (str.StartsWith(Class.Class("ARw==AE4")))
{
this.Class(Class.Class);
this.Class(false);
this..Class(this).Message = Class.Class("C4ALpUuAC5R+1PzDXuuftA+d");
}
else if (str.StartsWith(Class.Class("ASw==AE8")))
{
this.Class(Class.Class);
this.Class(true);
}
else
{
this.Class(Class.);
this..Class(this).Message = Class.Class("++VGWdD/wFgb2OI+U49XXiTZ");
}
}
else
{
this.Class(Class.Class);
this.Class(true);
}
}
这代码真心难看。。。不过大家对比一下V0415.3版本的代码
[C#] 纯文本查看 复制代码 private void method_1()
{
if (Class121.bool_0 && !this.Boolean_0)
{
string text = Class0.smethod_0(Class1.smethod_0("awBoAHQAQwBoAHUAZQBBAgGAlBAVAMGA") + ":" + this.miSekillPanelVM_0.method_6(this).XiaomiId);
this.miSekillPanelVM_0.method_5(text);
if (text.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 (text.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");
}
}
}
else
{
this.Enum0_0 = Enum0.const_10;
this.Boolean_1 = true;
}
}
大家有没有发现啥,这2个代码根本就是对基友,除了名称不一样之外。。其他的完全一样
那。接下来该怎么爆它菊花,大家心里有数了吧。。上个版本怎么爆,这个就怎么爆。。
对于这个乱七八糟的名称,对我们的的干扰也就基本忽略不计啦。。。
(PS:这Re有时候发神经会看不了源代码,,弹出个错误说,不明确的匹配..我也有,这时候大家可以用其他工具 ILSpy 传送门:链接: http://pan.baidu.com/s/1pKXwM 密码: ap5n 这工具反出来的代码质量比Re要高)
其实对于一款成型的软件。。除非要重构,不然基本上不会大幅度的修改代码,也就是说,代码基本都是一个鸟样的。
所以建议大家保留 V0415.3 这个版本。。没啥,就为了看代码,我是用 ILSpy 看代码,Re用来修改IL
------------------------------------------------------------------------------我是分割线--------------------------------------------------------------------------------------------------------------------
上个帖子大家普遍反映不知道怎么修改IL
话说。这个真不好讲解。。看不懂就去网上搞一份IL指令解释,我就是这么过来的
简单说一下这个授权的地方我的修改吧。。。。
首先,就是为了程序能执行 ASw==AE8 这个判断里面的逻辑。。。。我的想法就是把这个方法变成这样的
[C#] 纯文本查看 复制代码 private void Class()
{
if (Class.Class && !this.Class)
{//直接执行 ASw==AE8 这个判断逻辑里面的代码
this.Class = Class.Class;
this.Class = true;
}
else
{
this.Class = Class.Class;
this.Class = true;
}
}
大家看这个方法的IL
选中的那一行就是最外面的if判断,如果不成立就跳到第 70行指令,成立就继续
那么 就是说,从第 9 行 到第 68 行都是这个if 执行的语句,这些我们都不要,,就想执行那么两句代码而已。。
接下来找到我们想要让它执行的两句代码
随便搞个记事本先记录一下
然后把 9-68 干掉,再往这里面插入记事本记录的几句
不过上面的代码太难看。。手工插入也是个问题。。。
那就把这几句上面部分,跟下面部分删掉就是啦。。 也就是 9-51,58-68 中间这几句自然就留下了
附上我自己改过之后的IL
IL修改就到这啦。。这玩意儿没啥可说的。改多了就会,不动手看一百遍都不会
------------------------------------------------------------------------------我是分割线--------------------------------------------------------------------------------------------------------------------
看其他大大发布的破解版,都说这玩意儿有2个后门,我后来找了一下,又找了一个,不也知道真假。不过话说我只捅一个后门的破解版也抢到了红米note
两个位置,在这。为了方便看代码,我就用 V0415.3 版本的代码截图吧
如果有哪位看官知道其他后门位置,请告诉我哈。。
|