leiphone4s 发表于 2018-6-4 09:49

跟大神学“[.NET逆向] 星宇财务记账软件正式版追码/注册机”

本帖最后由 leiphone4s 于 2018-6-4 11:00 编辑

跟大神学“[.NET逆向] 星宇财务记账软件正式版 -- 追码/注册机”
本人小白,也不搞程序开发,所以学习这个还是比较吃力的
最近在学.net程序破解,主要以爆破为主看到大神这个贴子,就跟着学
原贴地址 https://www.52pojie.cn/forum.php?mod=viewthread&tid=413431&extra=page%3D1%26filter%3Dtypeid%26typeid%3D256
发这个帖子是为了从小白的角度分析这个软件,有些地方和大神的不太一样,有的大神没说清楚,小白看起来吃力
我是先自己破解,然后才和大神的做比较,所以我在这主要就说下不一样的地方
1.软件爆破方面
我用的是dnspy 动态分析比较简单,首先也是分析出来输入注册码点确定提示重启软件,这块只是保存输入的用户名和密码,没啥关键用,所以肯定是在窗口加载的时候验证的
观察程序主程序,有“试用版”这些关键字,搜索这个能到man_load这个函数


2 注册方面



就是函数让我头疼了好一会,根据名字的意思是,由注册码反生成用户名,如果生成的用户名和原来保存的(就是最开始注册时输入的名字)一样,函数返回真,上层那个IF条件才能为真
一开始我就头疼了,完蛋这要怎么写注册机?我哪知道正确的注册码样式是什么样的?到这卡住 了
然后看大神的贴子,才知道那个method2是method3的逆向函数,根据名字也能看出是根据用户名算注册码,可是我没查到哪里有调用这个method2函数,我知道它的只调函数是GETSN()这个方法,
求大神帮忙分析下哪里有调用这个,作者写这个的用途是啥 ,为了方便我们破解?
静态分析不会的话,用dnspy动态分析。明确函数是method2这个,它有三参数
string encryptStr, string key, string IV   encryptstr(输入的用户名)key (2008-10-10) iv(xysoft2008)
开始写注册机,小白这个也不会,我也是学的大概说下
用reflector打开脱壳的主程序


选择保存路径会生成许多 .cs文件,找到里面的SLEncrypt.cs(因为method2在这里面)
打开SharpDevelop(编写c#程序的),新建 一个解决方案(为啥叫这名字?小白不懂)
添加SLEncrypt.cs
编一个这个窗体(这个不会就百度,没法细说),运行一下程序,报错,SLEncrypt.cs下class6什么的报错,把SLEncrypt.cs里面不重要的删掉

上面成这样,再运行不报错了,然后双击“生成注册码”编写代码

保存就可以了

我最后写的是这样的,为了验证方法3


最后还是声明 ,学破解是爱好,本人不搞软件开发,也没相关经验,上面的什么函数方法叫法什么的也都是百度学的,不对的大神指正。
谢谢

最后求大视分析 下这个方法

public static string smethod_3(string encryptedValue, string key, string IV)    //encryptedvalue 这个是输入的注册码 key 2008-10-10ivxfsoft2008
      {
            string text = encryptedValue;    //text 等于encyptedvalue
            if (text.Length < 16)               //如果text长度小于16位返回空
            {
                return "";
            }
            for (int i = 0; i < 8; i++)   //循环8次
            {
                text = text.Substring(0, i + 1) + text.Substring(i + 2);    // text=text从第一位取到第i+1+text从第一位取到第i+2位(这个对吧?)
            }
            encryptedValue = text;                                             //encryptedValue = text;
            key += "12345678";                                                    //key=2008-10-1012345678
            IV += "12345678";                                                   //iv=xysoft200812345678
            key = key.Substring(0, 8);                                       //key=2008-10-
            IV = IV.Substring(0, 8);                                                //iv=xysoft20
            string result;
            try                                                                                     //下面这些看不懂了,大神帮忙分析下 谢谢
            {
                ICryptoTransform transform = new DESCryptoServiceProvider
                {
                  Key = Encoding.UTF8.GetBytes(key),
                  IV = Encoding.UTF8.GetBytes(IV)
                }.CreateDecryptor();
                byte[] array = Convert.FromBase64String(encryptedValue);
                MemoryStream memoryStream = new MemoryStream();
                CryptoStream cryptoStream = new CryptoStream(memoryStream, transform, CryptoStreamMode.Write);
                cryptoStream.Write(array, 0, array.Length);
                cryptoStream.FlushFinalBlock();
                cryptoStream.Close();
                result = Encoding.UTF8.GetString(memoryStream.ToArray());
            }
            catch (Exception)
            {
                result = "";
            }
            return result;
      }

leiphone4s 发表于 2018-6-4 10:47

天若幽心 发表于 2018-6-4 10:30
dnspy我一直用它代替VS编程来着

??dnspy可以编程序?这也可以?大神帮我分下下面的代码 ,小白看不懂了
public static string smethod_3(string encryptedValue, string key, string IV)    //encryptedvalue 这个是输入的注册码 key 2008-10-10ivxfsoft2008
      {
            string text = encryptedValue;    //text 等于encyptedvalue
            if (text.Length < 16)               //如果text长度小于16位返回空
            {
                return "";
            }
            for (int i = 0; i < 8; i++)   //循环8次
            {
                text = text.Substring(0, i + 1) + text.Substring(i + 2);    // text=text从第一位取到第i+1+text从第一位取到第i+2位(这个对吧?)
            }
            encryptedValue = text;                                             //encryptedValue = text;
            key += "12345678";                                                    //key=2008-10-1012345678
            IV += "12345678";                                                   //iv=xysoft200812345678
            key = key.Substring(0, 8);                                       //key=2008-10-
            IV = IV.Substring(0, 8);                                                //iv=xysoft20
            string result;
            try                                                                                     //下面这些看不懂了,大神帮忙分析下 谢谢
            {
                ICryptoTransform transform = new DESCryptoServiceProvider
                {
                  Key = Encoding.UTF8.GetBytes(key),
                  IV = Encoding.UTF8.GetBytes(IV)
                }.CreateDecryptor();
                byte[] array = Convert.FromBase64String(encryptedValue);
                MemoryStream memoryStream = new MemoryStream();
                CryptoStream cryptoStream = new CryptoStream(memoryStream, transform, CryptoStreamMode.Write);
                cryptoStream.Write(array, 0, array.Length);
                cryptoStream.FlushFinalBlock();
                cryptoStream.Close();
                result = Encoding.UTF8.GetString(memoryStream.ToArray());
            }
            catch (Exception)
            {
                result = "";
            }
            return result;
      }

疯狂输出的柱哥 发表于 2019-11-7 09:12

leiphone4s 发表于 2018-6-4 10:47
??dnspy可以编程序?这也可以?大神帮我分下下面的代码 ,小白看不懂了
public static string smethod ...

后面这段一个异常处理,然后准备加密所需的UTF-8格式的key和iv,然后new了一个加密对象,给加密流写入数据,然后更新,然后应该是关闭加密流,返回memoryStream里面的数据转换为字符串,估计就是加密后的数据返回回去了吧。。。。。。破解我也不懂,来论坛学习学习==

动物凶猛 发表于 2018-6-4 10:10

太厉害了,注册机都能做出来

leiphone4s 发表于 2018-6-4 10:13

动物凶猛 发表于 2018-6-4 10:10
太厉害了,注册机都能做出来

万能的百度啊,是比较吃力

caleb110 发表于 2018-6-4 10:20

向楼主学习!

天若幽心 发表于 2018-6-4 10:30

{:1_926:}
dnspy我一直用它代替VS编程来着

动物凶猛 发表于 2018-6-4 10:42

本帖最后由 动物凶猛 于 2018-6-4 10:43 编辑

leiphone4s 发表于 2018-6-4 10:13
万能的百度啊,是比较吃力
还是很佩服你啊,我都没敢去学

likelooo 发表于 2018-6-4 11:03

学习得精神值得我们去学习   好像挺绕口的!

332595 发表于 2018-6-4 11:13

话说这个软件:dnspy我还是第一次听过。。

leiphone4s 发表于 2018-6-4 11:17

332595 发表于 2018-6-4 11:13
话说这个软件:dnspy我还是第一次听过。。

.net 反编译神器啊,好像是de4dot那个作者开发的,跟od一样,可以下断点,动态调试,软件名字我没输错吧好像
页: [1] 2 3 4 5 6 7
查看完整版本: 跟大神学“[.NET逆向] 星宇财务记账软件正式版追码/注册机”