python之app逆向破解data参数中的PassWord DES加密无填充

1.还是先抓包

首先下载app,登录入口

2.用jadx-gui打开

先脱壳,然后用jadx-gui打开
并搜索关键字PassWord

点击右键 跳到声明

从代码中可以看出key,iv 都是str

3.开始Hook

hook a方法

通过在线加密方法得出 是des 加密的结果

4.用python实现

整个js 代码

Java.perform(function () {
    console.log('HOOK Start!!!');
    var Des3Encrypt = Java.use("bef");
    console.log(Des3Encrypt);
    // 加密
    Des3Encrypt.a.overload('java.lang.String', 'java.lang.String').implementation = function (args1,args2) {
        console.log("Encrypt args1:",args1);
        console.log("Encrypt args2:",args2);
        //console.log("Encrypt args3:",args3);
        //console.log("Encrypt args4:",args4);
        var result = this.a(args1,args2);
        console.log("Des3Encrypt.encode result:",args1,args2);
        return result;
    };

})

python DES加密无填充用0补全

import pyDes
import base64
Key = "8D54E5D0"  #加密的key
Iv = '8D54E5D0'   #偏移量
def bytesToHexString(bs):
    '''
    bytes转16进制
    '''
    return ''.join(['%02X ' % b for b in bs])
def hexStringTobytes(str):
    '''16进制转bytes'''
    str = str.replace(" ", "")
    return bytes.fromhex(str)

# 加密
def encrypt_str(data):
    # 加密方法
    #padmode填充方式
    #pyDes.ECB模式
    method = pyDes.des(Key, pyDes.CBC, Iv, pad=None, padmode=pyDes.PAD_PKCS5)
    # 执行加密码 hex输出
    k = method.encrypt(data)
    data = bytesToHexString(k).replace(' ','')
    #bs64手粗
    #data =base64.b64encode(k)
    return data

# 解密
def decrypt_str(data):
    method = pyDes.des(Key, pyDes.CBC, Iv, pad=None, padmode=pyDes.PAD_PKCS5)
    k =hexStringTobytes(data)
    #bs64
    #k = base64.b64decode(data)
    return method.decrypt(k)


Encrypt = encrypt_str("qwerrrtttt12233")
print(Encrypt)
Decrypt = decrypt_str(Encrypt)
print(Decrypt)

posted @ 2020-12-08 15:42  莫贞俊晗  阅读(443)  评论(0编辑  收藏  举报