吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2406|回复: 9
收起左侧

[Android 原创] 找出某U3D游戏http接口中的关键sign算法,Java复写该算法

[复制链接]
jt689 发表于 2023-4-24 20:14
本帖最后由 jt689 于 2023-4-25 17:16 编辑

该游戏所有登录接口都会有一个code字段(类似sign),只要突破这个字段的算法,所有接口均可自动化脚本运行,实现脱机。
我们以登录接口为入口进行分析
1,抓包比对,发现在用户登录不同的账号时,除了账号密码,只有code字段会变化,其它不变。说明code字段就是类似sign的字段。


2,寻找计算code的接口,因为是u3d游戏,关键数据在libil2cpp.so和 global-metadata.dat文件中。解压apk,找到这两个文件。用il2cppdumper进行dump。在out目录中找到dump.cs.


执行上面的exe,输出目录在output中:


3, 浏览接口列表,搜索code,发现疑似接口。so中地址:0xD55700.

QQ图片20230424105648.jpg

上面这个接口,可能就是code的计算方法,输入为一个hashmap,可能是url中各个参数,我们进去看看。

4,进入IDA,加载so,定位到地址。为了更好的关联函数名字,需要运行脚本:
QQ图片20230424105703.jpg

为了方便查看函数名,需要把output中的两个json后缀文件:
script.json
stringliteral.json
通过上述py脚本加载运行,这样就可以看到函数名。

之后在ida中打开libil2cpp.so,定位到地址:0xD55700,按F5,看伪代码:

QQ图片20230424105629.jpg

先遍历url中各个参数,在拼接,用0补齐位数,满足长度为8的整数倍,为下面的des算法做准备。看到,现实用des,再MD5进行编码。
进去看看Des是怎么操作的。

QQ图片20230424105626.jpg


用的是DesEcb算法。在des前,将ulr个字段拼写的字符串a1的基础上加上首位拼接字符串,这两个首位字符串可以在汇编窗口看到:

QQ图片20230424105622.jpg

DesEcb算法当中看看des的加密:



那么,ulrparam中各参数是如何拼接的呢?需要动态调试一下,再打开一个ida用于动态调试,通过静态代码分析定位到将拼接结果存入寄存器x0的指令地址,
据此计算动态地址地址(so基地址+指令偏移):

111.png

运行程序,断到该指令出,查看结果x0的值:

222.png

看到字符串是通过对url个字段拼接: 头部字符串 + key1=vlaue & key2=vlaue2 &key3=vlaue3 & key4=vlaue4 + 尾字符串,这种形式。

于是整个算法明确 : 头部字符串 + key1=vlaue&key2=vlaue2&key3=vlaue3&key4=vlaue4+尾字符串,先进行desecb,然后 base64,最后md5.

据此复写算法的Java版本:


[Java] 纯文本查看 复制代码
/**
secretKey:密码
encData:要加密的数据
**/
public static String Encrypt(String secretKey, String encData) throws Exception {
        if (secretKey == null) {
            return null;
        }
  

        Cipher cipher = Cipher.getInstance( "DES/ECB/NoPadding");
        SecretKeySpec skeySpec = new SecretKeySpec(getKey(secretKey), "DES");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
        byte[] encrypted = cipher.doFinal(encData.getBytes());
        MessageDigest md = MessageDigest.getInstance("MD5");
        String base64Str= Base64.encodeToString(encrypted,0);
        base64Str = base64Str.replaceAll("[\\s*\t\n\r]", "");
        String result = MD5Utils.encrypt(base64Str);
        return result;
    }

    public static byte[] getKey(String keyRule) {
        Key key = null;
        byte[] keyByte = keyRule.getBytes();
        byte[] byteTemp = new byte[8];
        for (int i = 0; i < byteTemp.length && i < keyByte.length; i++) {
            byteTemp[i] = keyByte[i];
        }
        key = new SecretKeySpec(byteTemp, "DES");
        return key.getEncoded();
    }

    private static String toHexString(byte[] digest) {
        StringBuilder sb = new StringBuilder();
        String hexStr;
        for (byte b : digest) {
            hexStr = Integer.toHexString(b & 0xFF);
            if (hexStr.length() == 1) {
                hexStr = "0" + hexStr;
            }
            sb.append(hexStr);
        }
        return sb.toString();
    }

    private static SecretKey keyGenerator(String keyStr) throws Exception {
        DESKeySpec desKey = new DESKeySpec(keyStr.getBytes());
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey securekey = keyFactory.generateSecret(desKey);
        return securekey;
    }
}



注:本分析研究过程,仅用于学习交流,请勿用于非法目的!


下面的几幅图是中间的解析过程,部分重复的大家可以忽略。















urlcode.jpg
QQ图片20230424105707.jpg
QQ图片20230424105659.jpg
QQ图片20230424105655.jpg
QQ图片20230424105632.jpg

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
junjia215 + 1 + 1 用心讨论,共获提升!

查看全部评分

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

Hmily 发表于 2023-4-25 15:16
底部多了几幅图是不是插入丢了?
good7801 发表于 2023-4-25 17:12
dyc66666 发表于 2023-4-26 20:41
zhang7069 发表于 2023-4-29 21:08
优秀!!!!!
foaju 发表于 2023-5-11 14:15
搜索code,如何找到GetUrlParamsCode ?
我见你截图是搜索urlParam
 楼主| jt689 发表于 2023-5-15 16:55
foaju 发表于 2023-5-11 14:15
搜索code,如何找到GetUrlParamsCode ?
我见你截图是搜索urlParam

urlParam 不是包含在GetUrlParamsCode 中吗?模糊搜索
jsonzhou 发表于 2023-8-8 16:44
求联系方式
 楼主| jt689 发表于 2023-8-14 10:13
jsonzhou 发表于 2023-8-8 16:44
求联系方式

wx:   ldxs2020
52shaper 发表于 2023-8-14 10:44
太强了,dai佬,学习以下破解的思路
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 13:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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