吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4415|回复: 124
收起左侧

[原创] 某专业起名程序,注册码java实现

[复制链接]
鴻渊 发表于 2024-8-26 13:24
本帖最后由 鴻渊 于 2024-8-26 13:27 编辑

这个月16号,喜得小龙女,最近在看取啥名,结果发现软件需要注册码,所以就找到了帖子:https://www.52pojie.cn/forum.php ... %C6%F0%C3%FB&page=1

奈何本人C#不过关,反射一直读取不到文件,最终自己又通过dnSpy,去翻看了下程序代码。磕磕碰碰之下,用java写了个注册机的代码,
用的是7.3.0版本的,其他版本没试过,官网最新的也没看到下载路径

代码没怎么去优化,就是随便写的,有些是复制反编译源码过来改的,所以命名挺乱的,代码如下:
[Java] 纯文本查看 复制代码
@Test
    void regCode() {
        // 机器码
        String pcCode = "09602-11802-62920-20730";
        // 有效时长 2029-12-28 超过这个的 不一定能注册成哈
        String regDate = "20291228";

        String text = pcCode.replace("-", "");
        if (text.length() > 10) {
            text = text.substring(0, 10) + text.substring(text.length() - 5);
        }
        String regCode = m4(SecureUtil.md5(m12(text)).toUpperCase());
        // 年份yyyy 后2位对应注册码 5-6位
        // 6,7,B=>1 对应1几年 8,9,C=>2 对应2几年
        String[] year3 = { "8", "9", "C" };
        // 年份第四位对照关系
        String[] year41 = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
        String[] year42 = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K" };

        // 月份MM 对应注册码7-8位
        // 月份第一位, 6,7,B=>1 对应1 4,5,A=>0 对应0 月份第二位对照关系同年份第四位对照关系
        String[] month10 = { "4", "5", "A" };
        String[] month11 = { "6", "7", "B" };

        // 日dd对应注册码13,14位
        // 日dd第一位A,B,C=> 0,1,2 第二位0-8不用对应直接用
        Random rd = new Random();
        int i = rd.nextInt(3); // Random value between 0 and 2 (inclusive)

        // 注册码
        String y3 = regDate.substring(2, 3); // 年第三位
        String y4 = regDate.substring(3, 4); // 年第四位
        String m1 = regDate.substring(4, 5); // 月第一位
        String m2 = regDate.substring(5, 6); // 月第二位
        String d1 = regDate.substring(6, 7); // 日第一位
        String d2 = regDate.substring(7, 8); // 日第二位
        String[] month = month10;
        if ("1".equals(m1)) month = month11;

        // 注册码拼接
        String zccode = regCode.substring(0, 4) + year3[i] + year42[findIndex(year41, y4)]
                + month[i] + year42[findIndex(year41, m2)] + regCode.substring(4, 8)
                + year42[findIndex(year41, d1)] + d2 + "2"; // 固定1或2均可
        log.info("res req code --> {}", zccode);
    }

    int findIndex(String[] array, String value) {
        for (int index = 0; index < array.length; index++) {
            if (array[index].equals(value)) {
                return index;
            }
        }
        throw new IllegalArgumentException("Value not found in array: " + value);
    }

    String m12(String string_7) {
        int length = string_7.length();
        long num = 0L;
        if (length > 0) {
            for (int i = 0; i < length; i++) {
                int num3 = (int) string_7.charAt(i);
                int num4 = num3 + 7;
                int num5 = num3 * 5;
                num += smethod_8(num3, num4, num5);
                num += smethod_9(num3, num4, num5);
                num += smethod_10(num3, num4, num5);
                num *= smethod_11(num3, num4, num5) + 12L;
                if (num > 100000000L) {
                    num = Long.parseLong(Long.toString(num).substring(Math.max(0, Long.toString(num).length() - 7)));
                }
            }
            String text = Long.toString(num);
            if (text.length() >= 6) {
                return text.substring(text.length() - 6);
            } else {
                return Long.toString(num + 523109L).substring(Math.max(0, Long.toString(num + 523109L).length() - 6));
            }
        }
        return "";
    }
    String m4(String string_7) {
        String text2 = "";
        String text3 = "";

        // 构建 text2
        text2 = string_7.substring(10, 12) +
                string_7.substring(0, 2) +
                string_7.substring(14, 16) +
                string_7.substring(21, 23) +
                string_7.substring(6, 8) +
                string_7.substring(4, 6);

        // 处理 text2
        for (int num = 1; num <= 12; num++) {
            String charAtIndex = text2.substring(num - 1, num);
            if (isNumeric(charAtIndex)) {
                int numValue = Integer.parseInt(charAtIndex);
                text3 += Integer.toString(numValue ^ 5);
            } else {
                char charValue = (char) (charAtIndex.charAt(0) + 20 - num);
                String text4 = Character.toString(charValue);
                if (text4.equals("O")) {
                    text3 += "0";
                } else {
                    text3 += text4;
                }
            }
        }

        // 替换 "0" 为 "7"
        text3 = text3.replace("0", "7");

        // 重新排列 text3
        String result = text3.substring(8, 10) +
                text3.substring(4, 6) +
                text3.substring(10, 12) +
                text3.substring(6, 8);
        return result;
    }

    boolean isNumeric(String str) {
        return str.matches("\\d");
    }

    int smethod_8(int int_0, int int_1, int int_2) {
        return (int_0 << 2) | (int_1 & int_2);
    }

    int smethod_9(int int_0, int int_1, int int_2) {
        return int_0 & int_2 & ((int_1 << 3) | int_2);
    }

    int smethod_10(int int_0, int int_1, int int_2) {
        return (int_0 & (int_2 << 2)) | ((int_1 << 3) & int_2);
    }

    int smethod_11(int int_0, int int_1, int int_2) {
        return (int_0 << 4) & (int_2 << 2) & ((int_1 << 2) | int_2);
    }

免费评分

参与人数 4吾爱币 +9 热心值 +4 收起 理由
scpcdsp + 1 + 1 谢谢@Thanks!
zerozaki1024 + 1 我很赞同!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
博爵 + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

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

 楼主| 鴻渊 发表于 2024-8-27 17:13
gxg163 发表于 2024-8-27 00:05
大神能不能给跑一下  98761-48153-62920-20730

12679J7C5K3SC82
试试

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
gxg163 + 1 + 1 Thanks&amp;amp;#9834;(&amp;amp;#65381;ω&amp;amp;#65381;)&amp;amp;#65417;

查看全部评分

博爵 发表于 2024-8-26 21:18
jun269 发表于 2024-8-26 13:32
楼主,既然是注册机,是不是给我们这些小白来个成品,代码我们看不懂也没发处理
gxg163 发表于 2024-8-26 20:21

机器码98761-48153-62920-20730
姓名Admin
大神帮弄个注册码
wwb66668 发表于 2024-8-28 21:00
menjingdi 发表于 2024-8-28 20:26
56354-77338-62920-20730
大神帮忙跑一下 实在不会整了

试一下注册码:4725CKBCM577C81
fub8 发表于 2024-8-27 11:02
rjyq168 发表于 2024-8-27 09:35
可以帮跑一下吗13301-54918-61760-20730谢谢哥

P1R19G4F3727A51   容易吧
fub8 发表于 2024-8-28 10:43
蓝颜丶 发表于 2024-8-27 14:12
55094-48153-62920-20730

262R9G4FL211A51   去试试

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
蓝颜丶 + 1 + 1 我很赞同!

查看全部评分

hongm 发表于 2024-8-28 12:38
## Python代码
import hashlib
import random

def m4(string_7):
    text2 = ""
    text3 = ""
    text2 += string_7[10:12] + string_7[0:2] + string_7[14:16]
    text2 += string_7[21:23] + string_7[6:8] + string_7[4:6]
    print(text2)
    for num in range(1,13):
        charAtIndex = text2[num-1]
        if charAtIndex.isdigit():
            numValue = int(charAtIndex)
            text3 += str(numValue ^ 5)
        else:
            text4 = chr(ord(charAtIndex) + 20 - num)
            if text4 == "O":
                text3 += "0"
            else:
                text3 += text4
    text3 = text3.replace("0", "7")
    # 重新排列 text3
    result = text3[8:10] + text3[4:6] + text3[10:12] + text3[6:8]
    return result

def m12(string_7):
    length = len(string_7)
    num = 0
    if length > 0:
        for i in range(length):
            num3 = ord(string_7[i])
            num4 = num3 + 7
            num5 = num3 * 5
            num += smethod_8(num3, num4, num5)
            num += smethod_9(num3, num4, num5)
            num += smethod_10(num3, num4, num5)
            num *= smethod_11(num3, num4, num5) + 12
            if num > 100000000:
                num = int(str(num)[max(0,len(str(num))-7):])
        text = str(num)
        if len(text) >= 6:
            return text[len(text)-6:]
        else:
            return str(num + 523109)[max(0, len(str(num+523109))-6):]
    else:
        return ""

def smethod_8(int_0, int_1, int_2):
    return (int_0 << 2) | (int_1 & int_2)

def smethod_9(int_0, int_1, int_2):
    return int_0 & int_2 & ((int_1 << 3) | int_2)
   
def smethod_10(int_0, int_1, int_2):
    return (int_0 & (int_2 << 2)) | ((int_1 << 3) & int_2)

def smethod_11(int_0, int_1, int_2):
    return (int_0 << 4) & (int_2 << 2) & ((int_1 << 2) | int_2)

def string_to_md5(string):
    return hashlib.md5(string.encode('utf8')).hexdigest().upper()


def main(pcCode, regDate="20291228"):
    text = pcCode.replace("-", "")
    if len(text) > 10:
        text = text[0:10] + text[len(text)-5:]
    regCode = m4(string_to_md5(m12(text)))
   
    # 年份yyyy 后2位对应注册码 5-6位
    # 6,7,B=>1 对应1几年 8,9,C=>2 对应2几年
    year3 = ["8", "9", "C"]
    # 年份第四位对照关系
    year41 = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
    year42 = ["A", "B", "C", "D", "E", "F", "G", "H", "J", "K"]
    # 月份MM 对应注册码7-8位
    # 月份第一位, 6,7,B=>1 对应1 4,5,A=>0 对应0 月份第二位对照关系同年份第四位对照关系
    month10 = ["4", "5", "A"]
    month11 = ["6", "7", "B"]
    # 日dd对应注册码13,14位
    # 第一位A,B,C=> 0,1,2 第二位0-8不用对应直接用
    i = random.randint(0,2)
    # 注册码
    y3 = regDate[2]
    y4 = regDate[3]
    m1 = regDate[4]
    m2 = regDate[5]
    d1 = regDate[6]
    d2 = regDate[7]
    month = month10[:] if m1=="0" else month11[:]
    # 注册码拼接
    zccode = regCode[0:4]
    zccode += year3[i]
    zccode += year42[year41.index(y4)]
    zccode += month[i]
    zccode += year42[year41.index(m2)]
    zccode += regCode[4:8]
    zccode += year42[year41.index(d1)]
    zccode += d2 + "2"
    return zccode

if __name__ == "__main__":
    regDate = "20291228"
    while True:
        pcCode = input("输入机器码:")
        if not pcCode or pcCode.lower() in ["q","e","quit","exit"]:
            break
        print(f"   注册码:{main(pcCode)}")

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
zaqw0001 + 1 + 1 人生苦短,我只用PY

查看全部评分

yys5161 发表于 2024-8-26 15:03
楼主厉害了,能发下成品就好了。
yjn866y 发表于 2024-8-26 13:56
厉害厉害。谢谢分享
kennygui 发表于 2024-8-26 14:02
厉害,不过我也是想求注册机,哈哈
jianping520 发表于 2024-8-26 14:04
搞个成品,发网盘。
博爵 发表于 2024-8-26 14:25
感谢分享,注册成功了
donkey12 发表于 2024-8-26 14:49
感谢分享
gys19830912 发表于 2024-8-26 14:50
感谢分享啊
开创者 发表于 2024-8-26 15:45
很不错哈,虽然看不懂也用不来,但根据你这个我成功注册了一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 11:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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