找回密码
 立即注册

QQ登录

只需一步,快速开始

1401软件论坛总版规【新人必看】如何正确发布收费帖子加入vip系统学习仅需498元免费获得1401软件安全论坛vip开通本站VIP会员请联系QQ 564853771
论坛纪念优盘Beyond EXE超强加密器V1.61401论坛破解工具包 2017-9-12[破解班vip]入门篇[破解班vip]基础篇
[破解班vip]脱壳篇[破解班vip]实战篇[破解班vip]网络验证篇[破解班vip]零基础HOOK教程[破解班vip]零基础易语言入门
[破解班vip]零基础c语言入门[破解班vip]零基础Delphi编程入门[破解班vip]寒假培训课程共7课[破解班vip]破解提高篇[破解班vip]易语言培训课程
[破解班vip]核心技术培训篇[破解班vip]pe格式与pe操作[破解班vip]2022全新封包-山寨-爆破全系列[原创课程]c++单文档框架课程[逆向班vip]汇编语句与反汇编基础
[逆向班vip]全自动扫雷辅助[逆向班vip]手机模拟按键[逆向班vip]植物大战僵尸辅助广告位招租...付费破解软件 +Q 564853771
查看: 13381|回复: 1

[转载] SDF Viewer KEY算法分析

[复制链接]
  • TA的每日心情

    2024-4-7 08:47
  • 签到天数: 280 天

    [LV.8]以坛为家I

    148

    主题

    323

    回帖

    1806

    积分

    超级版主

    UID
    5
    元宝
    3120
    威望
    506
    贡献
    123
    信誉值
    0
    精华
    0
    在线时间
    134 小时
    注册时间
    2014-1-11
    最后登录
    2024-4-7
    违规
    1
    积分
    1806

    原创精英

    发表于 2022-3-24 10:23:09 | 显示全部楼层 |阅读模式
    Ȧ
    使用工具:
    1.Detect It Easy(查壳工具)
    2.dnspy(反编译工具)
    3.De4Dot ToolKit V 2.0(脱壳工具)
    4.C#代码在线执行网站(加密解密代码执行 KeyGen)
    分析过程
    首先我们先用查壳工具看一下

    显示VB.NET,嗯有的搞
    dnspy载入看一下

    这明显就是加了壳的
    试着用De4Dot脱一下


    代码基本上算是能看了

    打开软件的注册,试着随便输入注册,看提示信息

    Name or Key error
    记住这个消息,然后用dnspy打开脱壳后的程序.
    CTRL+F打开查找信息框输入这个错误信息
    漫长的查找时间...

    最后在资源文件的SDFviewer.SDF.resources找到了这个字符串
    记住前面这个str120,这个是程序里引用的资源名
    顺便记录一下其他的关键信息
    复制代码 隐藏代码
    // str116‎ = "Licence has been Withdrawn."//注册码被撤销// str117‎ = "Please contact sales@flyhoward.com for further details."// str118‎ = "Licence Error"// str119‎ = "Registered to "//注册到    这里很关键,提示注册成功了// str12‎ = "Enter Password for: "// str120‎ = "Name or Key error"  //注册码错误信息
    然后我们在所有代码数据里面查找str120和str119
    又是漫长的查找过程...

    复制代码 隐藏代码
    if (Operators.CompareString(Class1.smethod_3(Class1.string_17), Class1.string_16, false) == 0){        Class1.string_11 = Class1.resourceManager_0.GetString("str119") + Class1.string_16;//Registered to          Class1.int_0 = 2;}else{        Class7.smethod_0().Name = string.Empty;        Class7.smethod_0().KeyString = string.Empty;//Name or Key error        Interaction.MsgBox(Class1.resourceManager_0.GetString("str120"), MsgBoxStyle.OkOnly, Class1.resourceManager_0.GetString("str121"));        Class1.smethod_2();}
    仔细看代码if (Operators.CompareString(Class1.smethod_3(Class1.string_17), Class1.string_16, false) == 0)
    其中调用了Class1.smethod_3,我们找一下这个方法的作用
    复制代码 隐藏代码
    private static string smethod_3(string string_29){        byte[] rgbKey = new byte[0];        byte[] rgbIV = new byte[] { 18, 52, 86, 115, 144, 171, 205, 239 };        byte[] array = new byte[checked(string_29.Length + 1)];        string result;        try        {                rgbKey = Encoding.UTF8.GetBytes("f1owChk1");                DESCryptoServiceProvider descryptoServiceProvider = new DESCryptoServiceProvider();                array = Convert.FromBase64String(string_29);//1.Key先从BASE64转换成二进制                MemoryStream memoryStream = new MemoryStream();                CryptoStream cryptoStream = new CryptoStream(memoryStream, descryptoServiceProvider.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);//2.然后执行Decryptor解密方法                cryptoStream.Write(array, 0, array.Length);//3.然后把二进制Key写进解密方法                cryptoStream.FlushFinalBlock();                result = Encoding.UTF8.GetString(memoryStream.ToArray());//4.最后ToArry的数据转换成字符串        }        catch (Exception ex)        {                result = string.Empty;        }        return result;
    解密算法就摆在眼前
    仔细看这行代码array = Convert.FromBase64String(string_29);
    还有CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write)
    梳理一下这个算法
    1.Key先从BASE64转换成二进制
    2.然后执行Decryptor解密方法
    3.然后把二进制Key写进解密方法
    4.最后ToArry的数据转换成字符串
    5.把结果返回到上一个方法进行比较
    加密算法就是反过来
    1.把Name(字符串)转换成二进制
    2.然后执行Encryptor加密方法
    3.然后把二进制Name写进加密算法
    4.最后ToArry的数据转换成BASE64字符串
    5.最后BASE64字符串就是Key
    复制代码 隐藏代码
    private static string smethod_3(string Nametext){        byte[] rgbKey = new byte[0];        byte[] rgbIV = new byte[] { 18, 52, 86, 115, 144, 171, 205, 239 };        byte[] array = new byte[checked(Nametext.Length)];        string result;        try        {                rgbKey = Encoding.UTF8.GetBytes("f1owChk1");                DESCryptoServiceProvider descryptoServiceProvider = new DESCryptoServiceProvider();                array = new ASCIIEncoding().GetBytes(NameText);//1.把Name(字符串)转换成二进制                MemoryStream memoryStream = new MemoryStream();                CryptoStream cryptoStream = new CryptoStream(memoryStream, descryptoServiceProvider.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);//2.然后执行Encryptor加密方法                cryptoStream.Write(array, 0, array.Length);//3.然后把二进制Name写进加密算法                cryptoStream.FlushFinalBlock();                result = Convert.ToBase64String(memoryStream.ToArray());//4.最后ToArry的数据转换成BASE64字符串        }        catch (Exception ex)        {                result = string.Empty;        }        return result;
    把这些代码转化一下,找个在线C#代码执行网站试一下看看能不能算出来注册码
    完整代码如下:
    复制代码 隐藏代码
    using System;using System.Text;//文本处理命名空间using System.IO;//MemoryStream读写数据流用的命名空间using System.Security.Cryptography;//加密解密用的命名空间namespace KeyGen{    class Program    {        static void Main(string[] args)        {            string Name = "52pojie";//双引号内是Name内容,不支持特殊符号和中文            //            byte[] rgbKey = Encoding.UTF8.GetBytes("f1owChk1");            byte[] rgbIV = new byte[] { 18, 52, 86, 115, 144, 171, 205, 239 };            byte[] array = new ASCIIEncoding().GetBytes(Name);            DESCryptoServiceProvider descryptoServiceProvider = new DESCryptoServiceProvider();;            MemoryStream memoryStream = new MemoryStream();            CryptoStream cryptoStream = new CryptoStream(memoryStream, descryptoServiceProvider.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);            cryptoStream.Write(array, 0, array.Length);            cryptoStream.FlushFinalBlock();            string result = Convert.ToBase64String(memoryStream.ToArray());            Console.WriteLine(result);        }    }}

    把执行的代码结果在软件内进行注册,完美!


    插曲
    其实分析期间在解密的代码那里我是下过断点调试过的,因为不确定是不是解密的Key秘钥.
    在对比秘钥之前的代码里有一段代码非常有意思
    复制代码 隐藏代码
    if (Operators.CompareString(Class1.string_17, "SIWphRddOncC+9dfqM39Cw==", false) == 0 || Operators.CompareString(Class1.string_17, "yoU2LTox9ji1ME2xsQ21UA==", false) == 0 || Operators.CompareString(Class1.string_17, "9hzsfFcMHlaq7e9ItbsEHsutKigmkZgM", false) == 0 || Operators.CompareString(Class1.string_17, "5Prfc4iGPGwH3w84uOx84w==", false) == 0 || Operators.CompareString(Class1.string_17, "oIGoCNG9iBn0GaHaD1KuAA==", false) == 0 || Operators.CompareString(Class1.string_17, "bi1F2hrFoxWbDy9/9XW38A==", false) == 0 || Operators.CompareString(Class1.string_17, "o4rHyS9417d+TiSf6vpCxA==", false) == 0 || Operators.CompareString(Class1.string_17, "8vUnN+97Lmo=", false) == 0)                {                        Class7.smethod_0().Name = string.Empty;                        Class7.smethod_0().KeyString = string.Empty;                        Class7.smethod_0().Save();                        Interaction.MsgBox(Class1.resourceManager_0.GetString("str116") + "\r\n" + Class1.resourceManager_0.GetString("str117"), MsgBoxStyle.OkOnly, Class1.resourceManager_0.GetString("str118"));                        Class1.int_0 = 0;                        Class3.smethod_3().method_28().Close();                        ProjectData.EndApp();                }
    仔细看代码里有GetString("str116")
    前面有提到:
    复制代码 隐藏代码
    // str116‎ = "Licence has been Withdrawn."//注册码被撤销
    软件开发者比较狠,因为不知道是注册码泄露还是其他人破解的秘钥,作者发现了直接把这些秘钥列到黑名单里面啦,哈哈哈~
    不过因为上面判断代码里面Class1.string_17的判断字符串都是BASE64编码,所以我很确定解密算法里面肯定是解密的Key,而且是BASE64编码
    通过我用C#做的界面程序进行解密,把这些黑名单的用户名发一下:
    [td]
    Key
    Name
    SIWphRddOncC+9dfqM39Cw==dan quinn
    yoU2LTox9ji1ME2xsQ21UA==Carlos Cardona
    9hzsfFcMHlaq7e9ItbsEHsutKigmkZgMGail Fitzmaurice
    5Prfc4iGPGwH3w84uOx84w=Ng Choon Bok
    oIGoCNG9iBn0GaHaD1KuAA==Yam Poudel
    bi1F2hrFoxWbDy9/9XW38A==Cameron Kelly
    o4rHyS9417d+TiSf6vpCxA==omegaredgroup
    8vUnN+97Lmo=Kyu Kim
    以上黑名单人员看用户名就没有中国的,看来作者是没到国内的网站搜索过啊,呵呵呵~
  • TA的每日心情

    2023-10-4 22:54
  • 签到天数: 33 天

    [LV.5]常住居民I

    0

    主题

    73

    回帖

    128

    积分

    终身vip会员

    UID
    12089
    元宝
    255
    威望
    38
    贡献
    0
    信誉值
    0
    精华
    0
    在线时间
    14 小时
    注册时间
    2022-4-12
    最后登录
    2023-10-5
    违规
    0
    积分
    128

    破解班vip外挂班vip

    发表于 2023-4-21 22:35:22 | 显示全部楼层
    大神能带带我码
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|1401软件安全 ( ICP备16034480号 )

    GMT+8, 2024-4-24 16:32 , Processed in 0.159345 second(s), 25 queries , Gzip On.

    Powered by Discuz! X3.5

    Copyright © 2001-2020, Tencent Cloud.

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