赠柟 发表于 2023-1-29 23:29

某抽奖软件注册码分析

1、先简单看了下没有加壳,所有直接丢dnSpy。

2、搜索提示的字符串。

3、找到关键跳转

4、追进去找到算法和关键点

5、加密函数(md5)

6、论坛上有提供的验证码,我们抄格式BA-E7-CE-28-84-D4-1673597157, 经过调试,发现a0 就是我们输入的1673597157,str 就是机器码,进行一个g 加密, 然后就可以拼接出a_,对a_进行C# MD5.ComputeHash format加密,从第7位开始取17位,与“-” a0 拼接后就形成注册码   大致就这样了,a0 没有发现有什么检测,直接写死就可以了,我用的1673597157 (a0为一个时间戳,或许以后有时间检测,各位朋友可以自己写下)。


7、成功注册,重启验证也没问题

imrenliang 发表于 2023-12-14 15:29

using System;
using System.Text;
using System.Security.Cryptography;
namespace HelloWorldApplication
{
   class HelloWorld
   {
        public static string I(string A_0)
    {
      string text = "";
      try
      {
            byte[] bytes = Encoding.UTF8.GetBytes(A_0);
            for (int i = 0; i < bytes.Length; i++)
            {
                text = text + bytes.ToString() + "_";
            }
            text = text.TrimEnd('_');
      }
      catch (Exception) when (double.TryParse(text, out double result) && result <= 0.0)
      {
      }
      return text;
    }

    public static string G(string A_0)
    {
      return I(A_0.Substring(2, 7)) + I(A_0.Substring(6, 11)) + I(A_0.Substring(8, 7));
    }

    public static string J(string A_0)
    {
      using (MD5 md5 = MD5.Create())
      {
            byte[] inputBytes = Encoding.Unicode.GetBytes(A_0.Trim());
            byte[] hashBytes = md5.ComputeHash(inputBytes);
            return BitConverter.ToString(hashBytes);
      }
    }
      static void Main(string[] args)
      {
         /* Write C# code in this online editor and run it. */
      string input = "你的机器码";
      string A_0 = G(input);
      Console.WriteLine(A_0);
                string time = "1701829232";
                string a = "23010010100101001011" + A_0 + time;
      string text = J(a);
      Console.WriteLine(text);
      string cdk = text.Substring(6, 17);
      Console.WriteLine(cdk+"-"+time);
      Console.ReadKey();
      }
   }
}

楼主写的太含糊了,研究了好久~,咋的也对不上,都要放弃了,发现落了一步,机器码g加密后前后都需拼接,也就是楼主第四步里面string a_ 那里,还有我的定义和楼主的不一样,我的是"23010010100101001011",可能是版本不同。j加密好复杂应该没有现成的工具,上边的代码是我根据源代码用gpt转换的等效C#代码,经测试可以在在线编译器上运行,得出的结果正确(跟论坛发码的大哥结果一致),时间戳time那里的数可以网上生成也可以用我的。最后希望对大家有帮助,研究的好累,大家给个赞~。:rggrg:rggrg:rggrg

wei22380185 发表于 2023-1-31 13:34

直接发PJ版出来不好吗,

赠柟 发表于 2023-2-1 00:08

本帖最后由 赠柟 于 2023-2-2 23:14 编辑

ofo 发表于 2023-1-31 13:21
Strings.Mid(global::c.j(a_), 7, 17) + "-" + A_0
7-17只有10位,注册码不算A_0有12位吧.....
是的,我说错了,应该是第7位开始 ,取17位,加上“-”和 10位的 时间戳 正好是28位。

askmoon510 发表于 2023-1-30 08:49

ofo 发表于 2023-1-31 13:21

Strings.Mid(global::c.j(a_), 7, 17) + "-" + A_0
7-17只有10位,注册码不算A_0有12位吧.....

wtujoxk 发表于 2023-1-30 10:39

本帖最后由 wtujoxk 于 2023-1-30 10:40 编辑

写死的1673597157表示的是当前时间,可以自己计算一下,1673597157等于 2023-01-13 16:05:57

mengqiu 发表于 2023-1-29 23:46

赠柟 发表于 2023-1-29 23:55

mengqiu 发表于 2023-1-29 23:46
总觉得,加密函数得稍微解释下,方便我们小白学习观摩。

第6步已经说的很清楚了,:lol 第一次发帖,有点不到位的 ,请见谅。

skyadmin 发表于 2023-1-30 06:55

牛逼了这教程

ruikai 发表于 2023-1-30 08:28

进来学习了

qiujunkang 发表于 2023-1-30 08:31

哎哟,小白过来学习咯

liurujing657 发表于 2023-1-30 08:43

看不懂,但我大受震撼

hxp.china.sh 发表于 2023-1-30 09:03

向大神学习

lhtzty 发表于 2023-1-30 09:12

谢谢分享!!!
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 某抽奖软件注册码分析