吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7946|回复: 65
收起左侧

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

  [复制链接]
hanicegoby 发表于 2021-12-29 19:58
本帖最后由 hanicegoby 于 2022-1-7 14:19 编辑

奈何没有学过计算机编程,往往谈到破解都望而却步,最近闲来无事,研究.NET的软件破解,多向坛友学习。

首先,在论坛找到Detect It Easy查壳工具查壳。如图,软件是32位的,壳是有的“protector”保护的,壳的名字是.NET Reactor。

001查壳.png




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



002.png





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




003脱壳.png   
004脱壳.png


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

005.png


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





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


007.png   


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


008.png


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


009.png


看来想要实现真正的破解,只能制作注册机了。



说一下破解的难度和还没有攻克的问题。



1.此软件和其他教程都不一样,很多软件是出来就是登录界面,过不去登录界面就无法使用。次软件是不管你是否注册都可以用,只是极个别的功能受限,而无法完全使用软件。


2.软件有加密狗加持,很多if函数修改之后,就开始报错,无法完全清除掉系统的各种验证。


3.如果进行下一步破解,不知道该学些什么知识,现在有大学MOOC在线课程,想学计算机的任何编程课都是可以的,很方便。


小白学破解不久,不懂的东西实在是太多了,还请坛友多多帮助。



能做到这已经是我自学破解的极限了。
下面的链接是我的练手用的这个软件,已经脱过壳了。希望走过路过的大佬帮我看看程序,并提供一些有价值的建议,在这里感激不尽,如果能做一个视频给我讲讲就是最好的了。





链接:https://pan.baidu.com/s/1EJ9r9R1asyDljzaVC9RX8Q
提取码:5252


复制这段内容后打开百度网盘手机App,操作更方便哦



免费评分

参与人数 12吾爱币 +11 热心值 +9 收起 理由
HedgehogQd + 1 + 1 谢谢@Thanks!
Hmily + 3 + 1 用心讨论,共获提升!
bennyking + 1 + 1 谢谢@Thanks!
huiye123 + 1 我就是那个破解了个寂寞的人
plasd + 1 用心讨论,共获提升!
ywlgdlxg + 1 热心回复!
SFY110 + 1 + 1 用心讨论,共获提升!
aa530416 + 1 + 1 我很赞同!
GY19699 + 1 + 1 我很赞同!
cy2931 + 1 谢谢@Thanks!
kkrunner + 1 我很赞同!
h07799486 + 1 感谢分享~之前在论坛瞎逛,才知道net程序要用dnspy去破解,没编程基础打开.

查看全部评分

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

vipcrack 发表于 2021-12-30 10:36
本帖最后由 vipcrack 于 2021-12-30 10:38 编辑
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 < num))
                                {
                                        string text3 = Strings.Mid(text, num7 + 1, 1);
                                        str += text3;
                                        num3++;
                                        num2++;
                                        if (num2 >= array.Length)
                                        {
                                                num6 = num7;
                                                num2 = 0;
                                        }
                                        if (num3 >= num)
                                        {
                                                num6 = num7;
                                        }
                                }
                                else if ((num3 >= num) & (num7 == num6 + array2[num4]) & (num5 < 16))
                                {
                                        string text3 = Strings.Mid(text, num7 + 1, 1);
                                        text2 += text3;
                                        if (text2.Length == 4)
                                        {
                                                text2 += "-";
                                        }
                                        if (text2.Length == 9)
                                        {
                                                text2 += "-";
                                        }
                                        if (text2.Length == 14)
                                        {
                                                text2 += "-";
                                        }
                                        num5++;
                                        num4++;
                                }
                                num7++;
                        }
                        while (num7 <= 760);
                        binaryReader.Close();
                        fileStream.Close();
                        this.michinecode = str;
                        this.regcode = text2;


机器码,注册码,需要逆回去。

注册码算法:
                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 <= 11);
                                }
                                else if (Code == 32)
                                {
                                        int num = 0;
                                        do
                                        {
                                                text += Conversion.Hex(array[num]).ToLower();
                                                num++;
                                        }
                                        while (num <= 15);
                                }
                                else
                                {
                                        int num2 = 0;
                                        int num3 = array.Length - 1;
                                        int num = num2;
                                        for (;;)
                                        {
                                                int num4 = num;
                                                int num5 = num3;
                                                if (num4 > num5)
                                                {
                                                        break;
                                                }
                                                text += Conversion.Hex(array[num]).ToLower();
                                                num++;
                                        }
                                }
                                return text;
                        }
                }

免费评分

参与人数 4吾爱币 +4 热心值 +4 收起 理由
aabbcc123123 + 1 + 1 热心回复!
Hmily + 1 + 1 用心讨论,共获提升!
hanicegoby + 1 + 1 谢谢@Thanks!
木木小白 + 1 + 1 大佬厉害!!

查看全部评分

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

只需要改这一处就行了
这个程序,有两个验证版本,一个是插加密狗的情况下,用的是上面那个方法的MD5。
如果没有插加密狗就使用单纯输入账号密码的情况下MD5,这里只需要改我说的这个就行了,别的不用动
 楼主| hanicegoby 发表于 2023-8-11 14:39
Mrlu60 发表于 2023-7-23 15:31
我也是到这一步就卡注了

找个新的软件,重新破解,然后发个帖,会有大佬为你提供帮助的。
cdj68765 发表于 2021-12-29 20:51
image.png
理解函数过程,只需要让这个方法返回空的字符串就行了,记得操作完保存模块,这个你应该懂的

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
Hmily + 1 + 1 用心讨论,共获提升!
hanicegoby + 1 + 1 热心回复!

查看全部评分

头像被屏蔽
longskr 发表于 2021-12-31 12:22
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| hanicegoby 发表于 2021-12-29 20:57
cdj68765 发表于 2021-12-29 20:51
理解函数过程,只需要让这个方法返回空的字符串就行了,记得操作完保存模块,这个你应该懂的

感谢指导,
说实话,才学第三天,现在刚着手系统学习C语言。慢慢学吧,有兴趣学的就快。
 楼主| hanicegoby 发表于 2021-12-29 21:02
cdj68765 发表于 2021-12-29 20:51
理解函数过程,只需要让这个方法返回空的字符串就行了,记得操作完保存模块,这个你应该懂的

刚打开看了一下,上面和下面还有很多MD5的效验值,全都修改吗?
 楼主| hanicegoby 发表于 2021-12-29 21:06
cdj68765 发表于 2021-12-29 20:51
理解函数过程,只需要让这个方法返回空的字符串就行了,记得操作完保存模块,这个你应该懂的

懂了,原来就差高手的画龙点睛啊。
B888 发表于 2021-12-29 21:33
我想说:有没有修复电脑得NET 那么多不知道怎么搞
seeworld5 发表于 2021-12-29 21:48
学习了了
包子学渗透 发表于 2021-12-29 22:08
谢谢 学习了
咔c君 发表于 2021-12-29 22:58
不错学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-4-19 18:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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