返回列表 发新帖
楼主: 紫浩 - 

逆向去注册(马年运程app)

  [复制链接]

5

主题

819

回帖

2788

积分

大学生

Rank: 5Rank: 5

金币
1929
好评
0
信誉
100
发表于 2025-12-21 17:29:42 来自手机  | 显示全部楼层  来自 河南
看看
回复

使用道具 举报

2

主题

458

回帖

2750

积分

大学生

Rank: 5Rank: 5

金币
964
好评
0
信誉
100
发表于 2025-12-21 22:29:07 来自手机  | 显示全部楼层  来自 广东
看看
回复

使用道具 举报

0

主题

176

回帖

931

积分

高中生

Rank: 4

金币
421
好评
0
信誉
100
发表于 2025-12-22 08:39:26 来自手机  | 显示全部楼层  来自 江苏
看看。。
回复

使用道具 举报

13

主题

864

回帖

3068

积分

大学生

Rank: 5Rank: 5

金币
181
好评
0
信誉
100

MT论坛新人MT论坛最佳新人考神

发表于 2025-12-22 08:47:41 来自手机  | 显示全部楼层  来自 广东
看看隐藏
回复

使用道具 举报

5

主题

2733

回帖

5471

积分

硕士生

Rank: 6Rank: 6

金币
1410
好评
0
信誉
89
发表于 2025-12-22 10:31:39 来自手机  | 显示全部楼层  来自 广西
谢谢
回复

使用道具 举报

5

主题

2733

回帖

5471

积分

硕士生

Rank: 6Rank: 6

金币
1410
好评
0
信誉
89
发表于 2025-12-22 10:42:31 来自手机  | 显示全部楼层  来自 广西
谢谢
回复

使用道具 举报

1

主题

1万

回帖

3万

积分

博士后

Rank: 8Rank: 8

金币
9013
好评
4
信誉
1303

考神MT论坛帅哥MT论坛新人

发表于 2025-12-22 13:15:40 来自手机  | 显示全部楼层  来自 广西
看看
回复

使用道具 举报

5

主题

3536

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
1105
好评
1
信誉
98
发表于 2025-12-22 14:17:23 来自手机  | 显示全部楼层  来自 湖南
看看
回复

使用道具 举报

26

主题

1059

回帖

5239

积分

硕士生

Rank: 6Rank: 6

金币
434
好评
5
信誉
102
发表于 2025-12-22 14:22:23 来自手机  | 显示全部楼层  来自 广东
看看
回复

使用道具 举报

1

主题

849

回帖

4211

积分

大学生

Rank: 5Rank: 5

金币
2095
好评
1
信誉
100
发表于 2025-12-22 14:42:09 | 显示全部楼层  来自 江苏
也看了一下算法的地方

public static boolean g(String str, String str2) {
        b bVar = f1727a;          这个函数是标准的MD5
        a.y = a(bVar.m(a.f(str.substring(0, 5) + "-41231".substring(1, 5))));
        f(str2);
        String e2 = e(str2);
        if (str2.length() != 15) {
            return false;
        }
        if (!a.y.equals(e2)) {
            a.z = false;
            return false;
        }
        a.z = true;
        return true;
    }
}
1.  str 为机器码  str2为注册码  通过函数g来比较     
2.   a.y = a(bVar.m(a.f(str.substring(0, 5) + "-41231".substring(1, 5))));   这样实际是取机器码前5位与4123链接成9位 进行f 函数运算,bVar.m这个函数是标准的MD5
下面查看f函数
  public static String f(String str) {
        int length = str.length();
        if (length <= 0) {
            return "";
        }
        long j2 = 0;
        for (int i2 = 0; i2 < length; i2++) {
            byte charAt = (byte) str.charAt(i2);
            int i3 = charAt + 7;
            int i4 = charAt * 5;
            j2 = (j2 + ((long) j(charAt, i3, i4)) + ((long) k(charAt, i3, i4)) + ((long) l(charAt, i3, i4))) * ((long) (m(charAt, i3, i4) + 12));
            if (j2 > 100000000) {
                j2 = (long) Integer.parseInt(String.valueOf(j2).substring(String.valueOf(j2).length() - 7));
            }
        }
        String valueOf = String.valueOf(j2);
        return valueOf.length() >= 6 ? valueOf.substring(valueOf.length() - 6) : String.valueOf(j2 + 523109);
    }
public static int j(int i2, int i3, int i4) {
        return (i2 << 2) | (i3 & i4);
    }

    public static int k(int i2, int i3, int i4) {
        return i2 & i4 & ((i3 << 3) | i4);
    }

    public static int l(int i2, int i3, int i4) {
        return (i2 & (i4 << 2)) | ((i3 << 3) & i4);
    }

    public static int m(int i2, int i3, int i4) {
        return (i2 << 4) & (i4 << 2) & ((i3 << 2) | i4);
    }
里面调用到是j\k\l\m4个函数
3.经过变换后取MD5值
4.将MD5值进入a函数
public static String a(String str) {
        String str2;
        String str3 = "";
        if (str.length() > 0) {
            str2 = str3;
            for (int i2 = 0; i2 < str.length(); i2++) {
                char charAt = str.charAt(i2);
                if (Character.isDigit(charAt)) {
                    str2 = str2 + charAt;
                }
            }
        } else {
            str2 = str3;
        }                                            到这一步实际是取MD5值的数字,字母去除
        if (str2.length() >= 12) {
            str2 = str2.substring(2, 6) + str2.substring(5, 9) + str2.substring(8, 12);
        }
        int i3 = 0;
        while (i3 < str2.length()) {
            int i4 = i3 + 1;
            str3 = str3 + String.valueOf(Integer.parseInt(str2.substring(i3, i4)) ^ 4);
            i3 = i4;
        }
        if (str3.length() > 12) {
            str3 = str3.substring(0, 12);
        }
        String valueOf = String.valueOf(Long.parseLong(str3) + 10832712602L);
        return valueOf.substring(3, 5) + valueOf.substring(8, 10) + valueOf.substring(6, 8);
得到6位值
5. 再来看看下面的比较
String e2 = e(str2);                         取注册码进入函数e
if (str2.length() != 15) {                 注册码为15位
return false;
}
if (!a.y.equals(e2)) {                    不等,注册不成功
a.z = false;
return false;
}
a.z = true;                                否则注册成功
return true;
public static String e(String str) {
        return str.substring(2, 5) + str.substring(11, 14);      注册码3-5及12-14这6位的值   
    }
6.最后注册码实际是比较6个位的值,通过机器码算出6位值,分别与注册码3-5及12-14这6位的值比较
7.1-2位好象暂时没用到,随机取88吧;6-11位对应的是到期时间对应年月日,最后一位也没发现,随机取8吧
如机器码:F586817E-41231  注册码:884453812127828

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

229

主题

2232

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
3996
好评
29
信誉
106
发表于 2025-12-22 14:42:41 来自手机  | 显示全部楼层  来自 四川
学习学习
回复

使用道具 举报

2

主题

972

回帖

2736

积分

大学生

Rank: 5Rank: 5

金币
2296
好评
0
信誉
100
发表于 2025-12-22 15:45:37 来自手机  | 显示全部楼层  来自 广东
谢谢分享
回复

使用道具 举报

0

主题

2

回帖

15

积分

幼儿园

Rank: 1

金币
11
好评
0
信誉
100
发表于 2025-12-22 16:05:02 来自手机  | 显示全部楼层  来自 河北
看看隐藏
回复

使用道具 举报

7

主题

542

回帖

2516

积分

大学生

Rank: 5Rank: 5

金币
1285
好评
3
信誉
100

考神MT论坛新人

发表于 2025-12-22 16:08:50 来自手机  | 显示全部楼层  来自 江西
谢谢分享
回复

使用道具 举报

7

主题

542

回帖

2516

积分

大学生

Rank: 5Rank: 5

金币
1285
好评
3
信誉
100

考神MT论坛新人

发表于 2025-12-22 16:10:16 来自手机  | 显示全部楼层  来自 江西
谢谢分享
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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