嗯哼。。作为菜鸟好不容易破了一个软件,来这里分享一下~
这个帖子我原来是发布在这里的http://www.52pojie.cn/thread-375077-1-1.html
然后修改了一下发布在这里
先说一句
如果你是公益服腐竹(没有盈利性质)可以使用本款破解版软件
如果你是收费服腐竹或者服务器租赁商请勿使用本款破解版软件,若要测试请于下载后的24小时内删除
0x00.软件介绍
Minecraft腐竹们应该都知道McMyAdmin(以下简称MMA)这款网页管理服务器软件吧。。网页界面真心很赞
McMyAdmin网页界面
根据官方的说法,,MMA在安全方面也是卓越的(鬼知道呢)
然而MMA免费版仅仅允许服务器容纳<=10人,且还会在服务器运行期间不断发广告
/say "The server is running by McMyAdmin"
其实吧购买专业版也不是很贵(10欧元),但是相信很多童鞋都不会去买的对吧(比如我哈)
而且官方很自豪滴称
“我们的产品是用c#编写,可以跨平台哦”←_←大家都懂滴
于是呐。就拿MMA练练手吧
0x01.分析
既然是c#,免不了用reflector或者ilspy一番狂轰乱炸
先用ilspy试试看
ilspy
恩。还能打得开,就是这函数和变量名似乎都被混淆了。。(不知道是ilspy的问题还是真的混淆了。。如果有误请大神指正)
即便如此,主体部分还是能读得懂的(就是不能把代码全部复制到vs里重新构建了),于是乎我便开始找验证部分
/******************************************************************************************************
*******************************************************************************************************
******************************************************************************************************/
找了半天居然啥也没找到
什么鬼,tmd这软件是不会验证么!
后来再看看,发现有这么个东东
似乎打开了一个叫McMyAdmin.ebi的文件
也许这就是授权文件吧。。赶紧去文件夹目录看了一下,果然有
但是这授权文件也忒大了吧(700kb~),这也打消了我破解授权文件的念头
继续找找,发现在那行代码下面几行有个assembly加载dll的代码。。
也许这个ebi文件只是一个dll文件,只不过被改了后缀罢了。。
试试用ilspy看看
没戏。
既然要加载,同时这又不能被ilspy打开,那肯定经过特殊处理了咯
继续找找,找到了这部分代码
ok就是这段了,接下来就是把这个经过特殊处理的文件进行解包咯
我之前说过因为代码混淆的原因不能直接复制进去
直接复制进去&运行就和这张图上说的一样
RT,因为vs不知道你这里的a指的是变量还是函数,因此报错(歧义)
无奈之下也只能将源代码删删减减复制进去,前面没问题,后面却来了
这TM明显又实例化了一个类
你们可能会说,把这个ds类继续拉进来&自行修码咯
我当时也是这么想的,结果呢
又来了个fj
后来再fj找,fj又初始化了另外的三个类,,,,,
要是真修的话那还不如我自己编一个呢= =
也就这问题困扰了我好几个星期
/***************************************************************************/
但天无绝人之路,我在百般无聊地开fj的代码时找到这么一行
GZipStream?我顿时有了个大胆的猜测,这个fj类会不会就仅仅是一个压缩&解压GZip的类呢?
哪还不如先把这一段注释掉,等能够解包出文件后再用好压来解压呢
于是注释+写了一段写文件的代码
代码在介里[C#] 纯文本查看 复制代码 private const string cta = "http://www.mcmyadmin.com/Downloads/MCMA2-Latest.zip";
private const string ctb = "McMyAdmin.ebi";
public static string ctc = "";
private static bool ctd = false;
private static bool cte = false;
private static byte[] g = new byte[]
{
69,
66,
73,
1
};
static void Main(string[] args)
{
byte[] array = File.ReadAllBytes("...."); //TODO:locate the McMyAdmin.ebi file by yourself
for (int i = 0; i < g.Length; i++)
{
if (array[i] != g[i])
{
Console.WriteLine("Unrecognised File Header");
}
}
MemoryStream memoryStream = new MemoryStream(array, false);
BinaryReader binaryReader = new BinaryReader(memoryStream);
memoryStream.Seek(-12L, SeekOrigin.End);
int num = binaryReader.ReadInt32() - 2;
int num2 = binaryReader.ReadInt32();
int num3 = binaryReader.ReadInt32();
memoryStream.Seek((long)(-(long)(num + 20 - num3)), SeekOrigin.Current);
int count = binaryReader.ReadInt32();
int count2 = binaryReader.ReadInt32();
memoryStream.Seek(0L, SeekOrigin.Begin);
byte[] array2 = new byte[]
{
31,
139
};
binaryReader.ReadBytes(4);
byte[] signature = binaryReader.ReadBytes(count);
byte[] keyBlob = binaryReader.ReadBytes(count2);
memoryStream.Seek(8L, SeekOrigin.Current);
byte[] array3 = binaryReader.ReadBytes(num);
byte[] array4 = new byte[num + 2];
array2.CopyTo(array4, 0);
array3.CopyTo(array4, 2);
byte[] array5 = new byte[num2];
MemoryStream a_ = new MemoryStream(array4);
FileStream fs = new FileStream("......", FileMode.Create); //TODO:Enter your own output file directory
//将byte数组写入文件中
fs.Write(array4, 0, array4.Length);
fs.Close();
运行完毕,果然
我创建的文件名就是array4.gz,用好压打开
excellent!格式果然就是GZip
PS:这还真的带有一点运气成分
打开那个解压出来的东东,没问题了
搞了半天那个exe只是个启动器,这个ebi文件才是真正的主程序
那么,继续找验证部分
/*******************/
找是找到了。。但是看不懂。。。不知道是因为ilspy的原因还是官方故意混淆的。。
如果有兴趣的话大家可以自己看看这段。。总觉得怪怪的(也有可能是我太菜)
既然这条道路行不通,继续观察
依据官方的说法,只要购买,他们会给你一个licence key,复制到面板里去即可
说明这款软件已经包含全部功能。既然如此,在程序里肯定有个flag来记录用户的类型(Personal,Professional,Enterprise)
那就找找呗
/******************************************************************************************/
没找到flag,找到了这个
PS:这里是Professional = 2,ilspy的问题
既然找到这个,那么搜索Personal即可(毕竟最初软件肯定给flag赋的是权限最低的用户)
这里有一个(cq类里)
再找找有没有反盗版(就是那种检测用户是否为正版的函数)
不过貌似还真有(依旧cq类)
至此分析完毕
0x03.暴力
既然都找到了这些,开始修改咯~
这里呐我用的是DotNet Resolver(这款软件nop的时候可以大块大块的nop掉)当然之后呢我还会用Reflector的Reflexil还有JustDecompiler里的Reflexil(这三者各有优点&缺点,实际破解的时候只要取长补短即可)
先解决flag
好吧这明显是reflector
接下来解决反盗版(在cq类里的n())
这个倒是用的dotnet Resolver,大段nop特别爽
nop后效果图如下
=>等于啥都没做
PS:IL语句没学多少,如果有误还请指正
好了修改完毕,别忘了保存哦~
0x04. "结束"
改好了还不快替换掉原来的McMyAdmin.ebi试试看
然而打不开了。。。
0x05. "思考"
后来想想觉得自己傻x了,软件原本加载的就是经过特殊处理的文件,我这样直接丢进去,读得出来才怪!
那就把McMyAdmin.exe那段解包的代码nop掉了
0x06.继续分析&修改
这次用的还是DotNet Resolve,切换到IL语句里观察
进行修改
/*patch过后的McMyAdmin.exe和McMyAdmin.ebi在这里
MMA.zip
(814.95 KB, 下载次数: 446)
*/
最后效果图
不作任何处理直接返回array1(就是读取文件的byte[]数组)
0x07. 成功?
试着运行了一下,可以加载ebi了,但是。。。。
为什么还是Personal?
0x08.再度修改ebi
脑残了一上午,找到这么段
public string bn = "Personal";
具体什么作用我不说你们都懂的吧,,,
开JustDecompile改了它。。(Reflector抽了)
0x09.成功!
再度打开,效果如图
至此结束~
PS:伸手党们如果你们正在找我发的破解版&看到这里没找到的话,请再看一遍,谢谢配合
|