小白练手破解.NET软件的艰辛过程,与坛友交流,向大佬学习。

查看 132|回复 11
作者:hanicegoby   
奈何没有学过计算机编程,往往谈到破解都望而却步,最近闲来无事,研究.NET的软件破解,多向坛友学习。
首先,在论坛找到Detect It Easy查壳工具查壳。如图,软件是32位的,壳是有的“protector”保护的,壳的名字是.NET Reactor。


001查壳.png (37.14 KB, 下载次数: 0)
下载附件
2021-12-29 20:09 上传


第二,有壳就先脱壳。脱.NET软件的壳需要用的软件是:“de4dot.exe”把软件直接拖拽到脱壳软件上就自动脱壳了。


002.png (59.64 KB, 下载次数: 1)
下载附件
2021-12-29 19:53 上传

如果遇见了脱壳不成功的情况,请将脱壳软件设置成管理员权限。


003脱壳.png (45.97 KB, 下载次数: 0)
下载附件
2021-12-29 19:52 上传

  


004脱壳.png (23.03 KB, 下载次数: 0)
下载附件
2021-12-29 19:52 上传


三、可以破解软件了。    拿着OD教程看了好几天,不过还好,学习有进步。但是跟论坛里的大佬比,简直就是太LOW了。


005.png (34 KB, 下载次数: 1)
下载附件
2021-12-29 19:52 上传

研究了好几天,才发现,原来用OD是个错误的选择,应该用Dnspy软件,然后就愉快地使用上了这个软件。并且在B站看了几篇教程然后就开始钻研。


006.png (114.89 KB, 下载次数: 0)
下载附件
2021-12-29 20:09 上传

由于没有学过C#语言,所以我的破解思路就是NOP掉跳转的地方。首先,每次点注册都是显示注册失败,于是在搜索栏搜索“注册失败“”。


007.png (81.42 KB, 下载次数: 0)
下载附件
2021-12-29 19:52 上传

  
如图,已经停在断点上了,按照近几天看的破解教程,这里修改个真假、跳转、TEXT相等等手段就可以获得破解效果。


008.png (139.7 KB, 下载次数: 1)
下载附件
2021-12-29 19:53 上传

这就是破解这个软件的难度,这个软件有两种注册渠道,一个是加密狗,一个是注册。修改掉一切往加密狗引导的if函数,并且把跳转条件设置的脑残一些。于是就得到了自己想要的破解效果,结果只是破解了一个寂寞。只徒有其表,没有实现真正的破解。


009.png (116.4 KB, 下载次数: 1)
下载附件
2021-12-29 19:53 上传


看来想要实现真正的破解,只能制作注册机了。
说一下破解的难度和还没有攻克的问题。
1.此软件和其他教程都不一样,很多软件是出来就是登录界面,过不去登录界面就无法使用。次软件是不管你是否注册都可以用,只是极个别的功能受限,而无法完全使用软件。
2.软件有加密狗加持,很多if函数修改之后,就开始报错,无法完全清除掉系统的各种验证。
3.如果进行下一步破解,不知道该学些什么知识,现在有大学MOOC在线课程,想学计算机的任何编程课都是可以的,很方便。
小白学破解不久,不懂的东西实在是太多了,还请坛友多多帮助。
能做到这已经是我自学破解的极限了。下面的链接是我的练手用的这个软件,已经脱过壳了。希望走过路过的大佬帮我看看程序,并提供一些有价值的建议,在这里感激不尽,如果能做一个视频给我讲讲就是最好的了。
链接:https://pan.baidu.com/s/1EJ9r9R1asyDljzaVC9RX8Q
提取码:5252
复制这段内容后打开百度网盘手机App,操作更方便哦

下载次数, 脱壳

vipcrack   


hanicegoby 发表于 2021-12-30 09:58
不行啊,修改的都是非常表象的东西。

这个注册需要逆一个算法代码。
下面这个是读取注册文件的代码,你得逆回去,从注册码,机器码逆回去得到注册文件数据。
后面的内容是注册码部分的内容,就是对用户名,机器码进行了MD5的处理。
[C#] 纯文本查看 复制代码FileStream fileStream = new FileStream(openFileDialog.FileName, FileMode.Open);
                        BinaryReader binaryReader = new BinaryReader(fileStream, Encoding.Unicode);
                        int num = 15;
                        string text = binaryReader.ReadString();
                        int[] array = new int[] { 5, 7, 19, 28, 36, 41, 57 };
                        int[] array2 = new int[]
                        {
                                23, 35, 54, 79, 151, 162, 168, 179, 193, 237,
                                251, 264, 321, 347, 362, 377, 412
                        };
                        int num2 = 0;
                        int num3 = 0;
                        int num4 = 0;
                        int num5 = 0;
                        int num6 = 32;
                        string str = "";
                        string text2 = "";
                        int num7 = 0;
                        do
                        {
                                if (num7 == 24)
                                {
                                        string text3 = Strings.Mid(text, num7 + 1, 1);
                                        num = Strings.Asc(text3) - 32;
                                }
                                else if ((num7 == num6 + array[num2]) & (num3 = array.Length)
                                        {
                                                num6 = num7;
                                                num2 = 0;
                                        }
                                        if (num3 >= num)
                                        {
                                                num6 = num7;
                                        }
                                }
                                else if ((num3 >= num) & (num7 == num6 + array2[num4]) & (num5
机器码,注册码,需要逆回去。
注册码算法:
                public static object smethod_0(string str3, string Str2)
                {
                        string text = "";
                        int num = 0;
                        checked
                        {
                                int num2 = Strings.Len(str3) - 1;
                                int num3 = num;
                                for (;;)
                                {
                                        int num4 = num3;
                                        int num5 = num2;
                                        if (num4 > num5)
                                        {
                                                break;
                                        }
                                        text += Conversion.Hex(Strings.Asc(Strings.Mid(str3, num3 + 1, 1)));
                                        num3++;
                                }
                                return string.Concat(new string[]
                                {
                                        Strings.Mid(MD5.MD5CODE(Strings.Mid(MD5.MD5CODE(text + Str2, 16), 3, 4), 16), 2, 4),
                                        "-",
                                        Strings.Mid(MD5.MD5CODE(Strings.Mid(MD5.MD5CODE(Str2 + text, 32), 1, 4), 32), 3, 4),
                                        "-",
                                        Strings.Mid(MD5.MD5CODE(Strings.Mid(MD5.MD5CODE(text + Str2, 32), 7, 4), 32), 6, 4),
                                        "-",
                                        Strings.Mid(MD5.MD5CODE(Strings.Mid(MD5.MD5CODE(Str2 + text, 16), 3, 5), 16), 6, 4)
                                });
                        }
                }
[C#] 纯文本查看 复制代码public static string MD5CODE(string strSource, short Code)
                {
                        string text = "";
                        byte[] bytes = new ASCIIEncoding().GetBytes(strSource);
                        byte[] array = ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(bytes);
                        checked
                        {
                                if (Code == 16)
                                {
                                        int num = 4;
                                        do
                                        {
                                                text += Conversion.Hex(array[num]).ToLower();
                                                num++;
                                        }
                                        while (num  num5)
                                                {
                                                        break;
                                                }
                                                text += Conversion.Hex(array[num]).ToLower();
                                                num++;
                                        }
                                }
                                return text;
                        }
                }
cdj68765   


hanicegoby 发表于 2021-12-29 21:02
刚打开看了一下,上面和下面还有很多MD5的效验值,全都修改吗?

只需要改这一处就行了
这个程序,有两个验证版本,一个是插加密狗的情况下,用的是上面那个方法的MD5。
如果没有插加密狗就使用单纯输入账号密码的情况下MD5,这里只需要改我说的这个就行了,别的不用动
hanicegoby
OP
  


Mrlu60 发表于 2023-7-23 15:31
我也是到这一步就卡注了

找个新的软件,重新破解,然后发个帖,会有大佬为你提供帮助的。
cdj68765   



image.png (68.73 KB, 下载次数: 0)
下载附件
2021-12-29 20:50 上传

理解函数过程,只需要让这个方法返回空的字符串就行了,记得操作完保存模块,这个你应该懂的
longskr   


cdj68765 发表于 2021-12-29 20:51
理解函数过程,只需要让这个方法返回空的字符串就行了,记得操作完保存模块,这个你应该懂的

感谢指导,
说实话,才学第三天,现在刚着手系统学习C语言。慢慢学吧,有兴趣学的就快。
hanicegoby
OP
  


cdj68765 发表于 2021-12-29 20:51
理解函数过程,只需要让这个方法返回空的字符串就行了,记得操作完保存模块,这个你应该懂的

刚打开看了一下,上面和下面还有很多MD5的效验值,全都修改吗?
hanicegoby
OP
  


cdj68765 发表于 2021-12-29 20:51
理解函数过程,只需要让这个方法返回空的字符串就行了,记得操作完保存模块,这个你应该懂的

懂了,原来就差高手的画龙点睛啊。
hanicegoby
OP
  

我想说:有没有修复电脑得NET 那么多不知道怎么搞
B888   

学习了了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部