吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2058|回复: 19
收起左侧

[Android 原创] 一个简单的注册机算法分析

  [复制链接]
Moezero 发表于 2024-8-8 12:27
本帖最后由 Moezero 于 2024-8-9 16:45 编辑

一、前言

有的软件加入了注册机需要注册码才可以使用,修改的话有的软件有加固针对强度高的又让部分人无法重打包,HOOK有检测,没root等问题。那么如果针对本地注册机我们可以分析他的算法来编写一个注册机进行注册使用。

二、工具

1.jadx
2.idea

三、流程

首先我们打开软件随便输入一个就能看到他提示注册失败
1723089590501.png

软件有加固,我这边就不多说了直接扔到脱壳网站上传脱壳就行,脱壳完的的dex全部拖到jadx,然后直接搜索注册失败

1723089600526.png

1723089834849.png

在这个代码中可以看到判断前就是他的注册码计算流程,第一个判断

BigInteger(MD5.md5String(String.valueOf(Util.this.machine) + intValue), 16).toString().substring(0, 5);

是验证了注册码是否过期,说明这个是带时间限制的判断,第二个

BigInteger(MD5.md5String(String.valueOf(Util.this.machine) + Util.this.ps), 16).toString().substring(0, 8);

则是注册成并没有到期限制,说明这个是无限制,我这边直接拿他的无限制注册算法就行。

根据他的代码得出注册是machine(机器码)和ps 拼接后,进行MD5生成取 MD5 中间 16 位,将这 16 位十六进制字符串转换为 BigInteger 对象。从 BigInteger 对象的十进制字符串表示中截取前 8 位就是他的注册码了。

搜索一下 String ps

1723090068223.png

然后搜索得到ps值是xcheck225。我这边搞了一个代码

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Main {

public static void main(String[] args) {
// 机器码
String machineCode = "38dec90d";
String registrationCode = generateRegistrationCode(machineCode);
System.out.println("注册码: " + registrationCode);
}

public static String generateRegistrationCode(String machineCode) {
// 1. 将机器码和密码(ps)拼接
String input = machineCode + "xcheck225";
// 2. 计算 MD5 哈希值
String md5Hash = getMD5(input);

// 3. 取 MD5 哈希值的中间 16 位
String middlePart = md5Hash.substring(8, 24);

// 4. 将中间 16 位转换成 BigInteger 对象
BigInteger middlePartBI = new BigInteger(middlePart, 16);

// 5. 从 BigInteger 对象的十进制字符串表示中截取前 8 位
String registrationCode = middlePartBI.toString().substring(0, 8);

return registrationCode;
}

private static String getMD5(String input) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] messageDigest = md.digest(input.getBytes());
BigInteger no = new BigInteger(1, messageDigest);
String hashtext = String.format("%032x", no);
return hashtext;
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("not found", e);
}
}
}

1723090176493.png

我这边idea运行一下生成注册码。结果是注册码: 14005263。结果也是注册成功的

1723090136167.png

然后也是简单写了一个注册机app。
1723089831242.png

四、小结

本文比较简单小白向,为初学者提供一个逆向分析注册码生成的流程,有助于理解软件破解的基本原理和方法。
声明这个软件也是别人求助的,然后我这边也把注册机提取出来了可供参考学习,原调用被加固抽调了,根据samli代码分析,写一个调用也能完成这个注册机调用

new-instance v0, Lxh/L/Util;

 invoke-direct {v0, p0}, Lxh/L/Util;-><init>(Landroid/app/Activity;)V

invoke-virtual {v0}, Lxh/L/Util;->check()V

即可调用

下面附上原注册机dex和app源码

注册机.zip (77.81 KB, 下载次数: 52)

免费评分

参与人数 5威望 +1 吾爱币 +22 热心值 +5 收起 理由
Miragewind + 1 热心回复!
wipjmomo + 1 我很赞同!
junjia215 + 1 + 1 谢谢@Thanks!
正己 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
西枫游戏 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

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

h6891543 发表于 2024-12-4 20:21
哪位大佬帮助我破 下     梦幻私服   服务端     机器码   原来客服个的注册码  不知道怎么变了,原来的注册码和机器码 在sn.txt  里面      
https://pan.baidu.com/share/init?surl=xaJLFZNkH4bX3RSEFpe9bQ&pwd=8888   
明天过后 发表于 2024-8-24 16:40
遇到个软件也是这个注册,就是ps不一样。成功注册。可惜不会写apk只能运行大佬的代码文件获取注册码
nhhhh666 发表于 2024-8-9 16:32
610100 发表于 2024-8-9 17:04
感觉最关键的是脱壳吧?
lionshine 发表于 2024-8-9 19:56
脱壳网站是哪个网站
CLW1236 发表于 2024-8-9 20:19
貌似学会了
正己 发表于 2024-8-9 22:46
师傅带带
fandazong 发表于 2024-8-10 20:54
求脱壳网站,小白自学
fandazong 发表于 2024-8-11 15:56
感谢大佬的回复!
小百花幼儿园 发表于 2024-8-12 09:30
致敬大佬~
nuaaeagel 发表于 2024-8-20 11:42
今年的ctf我又考的很烂,早知道多泡泡论坛,多学习学习了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-14 04:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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