吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 963|回复: 11
收起左侧

[其他求助] 想知道这个密码计算器的算法,因为安卓逆向实属不懂

[复制链接]
maomaoyuzaizj 发表于 2024-3-27 10:25
25吾爱币
想知道这个算法,或者是否有在线生成的网址,https://wwt.lanzoul.com/iSV0B1srlyhe

最佳答案

查看完整内容

ID除2,加上key的值,结果转十六进制字符串,如果勾选要时间,就在十六进制字符串后追加一个z和time控件中的时间值,最后通过密钥Format2044153997加密,加密结果转16进制字符串 用java还原如下: [mw_shl_code=java,true]package org.example; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; public class jiemi { private static String b ...

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

seerism 发表于 2024-3-27 10:25
ID除2,加上key的值,结果转十六进制字符串,如果勾选要时间,就在十六进制字符串后追加一个z和time控件中的时间值,最后通过密钥Format2044153997加密,加密结果转16进制字符串

用java还原如下:
[Java] 纯文本查看 复制代码
package org.example;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;

public class jiemi {

    private static String byte2hex(byte[] data) {
        StringBuilder hexString = new StringBuilder();
        for (byte b : data) {
            String hex = Integer.toHexString(0xFF & b);
            if (hex.length() == 1) {
                hexString.append('0');
            }
            hexString.append(hex);
        }
        return hexString.toString().toLowerCase();
    }

    public static String encrypt(String input, String key) throws Exception {
        if (key.length() > 16) {
            key = key.substring(0, 16);
        }
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.US_ASCII), "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
        byte[] encrypted = cipher.doFinal(input.getBytes());
        return byte2hex(encrypted);
    }

    public static String calculatePassword(int userId, int addValue, boolean needTime, long days, long hours, long minutes, long seconds) {
        long totalMilliseconds = (days * 24 * 60 * 60 + hours * 60 * 60 + minutes * 60 + seconds) * 1000;
        String hexString = Integer.toHexString((userId / 2) + addValue);
        if (needTime) {
            hexString += "z" + totalMilliseconds;
        }
        try {
            return encrypt(hexString, "Format2044153997");
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static void main(String[] args) {
        int userId = 2; // 用户ID
        int addValue = 8; // KEY
        boolean needTime = false; // 是否要时间
        long days = 1, hours = 2, minutes = 30, seconds = 45; // 示例时间

        String calculatedPassword = calculatePassword(userId, addValue, needTime, days, hours, minutes, seconds);
        System.out.println("Calculated Password: " + calculatedPassword);
    }
}
 楼主| maomaoyuzaizj 发表于 2024-4-2 10:52
seerism 发表于 2024-3-28 18:23
ID除2,加上key的值,结果转十六进制字符串,如果勾选要时间,就在十六进制字符串后追加一个z和time控件中 ...

牛逼 是对的 太厉害了  如果要转成html 输入用户id 点击生成 这个应该怎么做 可以付费 感谢大佬
 楼主| maomaoyuzaizj 发表于 2024-4-2 13:12
seerism 发表于 2024-3-28 18:23
ID除2,加上key的值,结果转十六进制字符串,如果勾选要时间,就在十六进制字符串后追加一个z和time控件中 ...

不需要时间那种,ID除2,加上key的值,结果转十六进制字符串的一个简单代码
seerism 发表于 2024-4-2 22:52
maomaoyuzaizj 发表于 2024-4-2 13:12
不需要时间那种,ID除2,加上key的值,结果转十六进制字符串的一个简单代码

写了个纯前端实现的,你看行不行
链接:https://pan.baidu.com/s/1dgabk3SBaMoWVx5qpwp1kw?pwd=8l9i
提取码:8l9i
 楼主| maomaoyuzaizj 发表于 2024-4-3 10:39
seerism 发表于 2024-4-2 22:52
写了个纯前端实现的,你看行不行
链接:https://pan.baidu.com/s/1dgabk3SBaMoWVx5qpwp1kw?pwd=8l9i
...

可以的 但是好像在勾选时间的时候的 计算出来的结果不对 我尝试输出了 一下 totalMilliseconds 这个值应该是数字 不知道为什么是字母 ,在不勾选时间的情况下是正确的 ,可能是这句代码出问题了totalMilliseconds


const totalMilliseconds = (parseInt(days) * 24 * 60 * 60 + parseInt(hours) * 60 * 60 + parseInt(minutes) * 60 + parseInt(seconds)) * 1000;
    let hexString = ((parseInt(userId) / 2) + parseInt(addValue)).toString(16);
    if (needTime) {
        hexString += "z" + totalMilliseconds;
seerism 发表于 2024-4-3 13:48
maomaoyuzaizj 发表于 2024-4-3 10:39
可以的 但是好像在勾选时间的时候的 计算出来的结果不对 我尝试输出了 一下 totalMilliseconds 这个值应 ...

输入的时间参数只要有一个为空的话,parseInt就会返回NaN,可以加一个默认值0上去:
const totalMilliseconds = ((parseInt(days || "0") * 24 * 60 * 60) +  (parseInt(hours || "0") * 60 * 60) +   (parseInt(minutes || "0") * 60) + parseInt(seconds || "0")) * 1000;
可以解决问题。
bjjette 发表于 2024-4-3 14:14
感觉不出来破解它的意义是什么, 加密无法DES, 3DES, RSA等等,即使你知道算法了,但是秘钥不知道,你也一样无法反向破解。国家有专门的破解实验室,破解率也是很低的。
 楼主| maomaoyuzaizj 发表于 2024-4-3 16:22
bjjette 发表于 2024-4-3 14:14
感觉不出来破解它的意义是什么, 加密无法DES, 3DES, RSA等等,即使你知道算法了,但是秘钥不知道,你也 ...

谢谢大佬耐心解答,易语言我把他写出来了,但是网页不会,这个不是为了破解,是为了方便一些,这是一个注册机的软件,每次给人家发消息都要安卓手机去操作比较麻烦,这样有网页的话 全平台就可以操作了,这个密钥是可以自己设置的。再次非常感谢!
 楼主| maomaoyuzaizj 发表于 2024-4-4 13:23
bjjette 发表于 2024-4-3 14:14
感觉不出来破解它的意义是什么, 加密无法DES, 3DES, RSA等等,即使你知道算法了,但是秘钥不知道,你也 ...

老哥 又出现一个问题 突然发现 如果这个设备id是奇数  不能被2整除 就会出现错误
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-12-15 06:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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