某抽奖软件注册码分析
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、成功注册,重启验证也没问题
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 直接发PJ版出来不好吗, 本帖最后由 赠柟 于 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位。 Strings.Mid(global::c.j(a_), 7, 17) + "-" + A_0
7-17只有10位,注册码不算A_0有12位吧..... 本帖最后由 wtujoxk 于 2023-1-30 10:40 编辑
写死的1673597157表示的是当前时间,可以自己计算一下,1673597157等于 2023-01-13 16:05:57
mengqiu 发表于 2023-1-29 23:46
总觉得,加密函数得稍微解释下,方便我们小白学习观摩。
第6步已经说的很清楚了,:lol 第一次发帖,有点不到位的 ,请见谅。 牛逼了这教程 进来学习了
哎哟,小白过来学习咯 看不懂,但我大受震撼 向大神学习 谢谢分享!!!