JsonRequest.addRequestMap.overload('java.util.Map','int').implementation = function(a, b) {
// addRequestMap方法传入了两个参数,打印出来看看 console.log("addRequestMap传入的参数1:" + a) console.log(a.get("username")) console.log(a.get("userPwd")) console.log("addRequestMap传入的参数2:" + b)
// 调用原来的addRequestMap方法 returnthis.addRequestMap(a, b)
// 如果有返回值就return,void就不用return }
打印出结果
如果要使用toString()来输出的话也不是不可以,这就涉及到多态了,需要做一个向下转型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
JsonRequest.addRequestMap.overload('java.util.Map','int').implementation = function(a, b) {
// addRequestMap方法传入了两个参数,打印出来看看 console.log("addRequestMap传入的参数1:" + a)
// 向下转型 var map = Java.cast(a, Java.use("java.util.HashMap")); console.log(map.toString())
console.log("addRequestMap传入的参数2:" + b)
// 调用原来的addRequestMap方法 returnthis.addRequestMap(a, b)
var Reques = Java.use("com.dodonew.online.http.RequestUtil") Reques.encodeDesMap.overload('java.lang.String', 'java.lang.String', 'java.lang.String').implementation = function(a,b,c) { console.log("encodeDesMap传入的参数:"+a+","+b+","+c) var result = this.encodeDesMap(a,b,c) console.log("encodeDesMap返回值:"+result) return result }
var dDESKeySpec = Java.use("javax.crypto.spec.DESKeySpec")
// 值得注意的是,使用的是其构造方法,所以表示方法的时候就要使用 $init 来表示构造方法 dDESKeySpec.$init.overload('[B').implementation = function(a) { console.log("DESKeySpec传入的参数:"+a) var result = this.$init(a) console.log("DESKeySpec返回值:"+result) return result }
这里成功输出了byte数组的内容,如果不成功的话,还可以进行fridahook函数构造
1 2 3 4 5 6 7 8 9 10 11
var base64 = Java.use("android.util.Base64") var dDESKeySpec = Java.use("javax.crypto.spec.DESKeySpec")
dDESKeySpec.$init.overload('[B').implementation = function(a) { console.log("DESKeySpec传入的参数:"+a) console.log("params", base64.encodeToString(a,0)) var result = this.$init(a) console.log("DESKeySpec返回值:"+result) return result }
// 加工明文 // var time = new Date().getTime(); var time = "1728480847190"; var sign = getSign(user, pwd, time).toUpperCase();
var data = '{"equtype":"ANDROID","loginImei":"Android358523029800728","sign":"' +sign+'","timeStamp":"'+ time +'","userPwd":"' + pwd+'","username":"' +user+ '"}' // 密钥和向量,原算法中key和iv也是经过处理的 // 解析key值 var keyMD5 = CryptoJS.MD5("65102933").toString(); var _key = CryptoJS.enc.Hex.parse(keyMD5); // 解析iv值 var _iv = CryptoJS.enc.Utf8.parse("32028092")
// sign值是一个MD5值,所以先进行MD5加密 functiongetSign(user, pwd, time) { var data = "equtype=ANDROID&loginImei=Android358523029800728&timeStamp=" +time+ "&userPwd=" +pwd+ "&username="+user+"&key=sdlkjsdljf0j2fsjk"
returnCryptoJS.MD5(data).toString(); }
functionencodeDesMap(user, pwd) {
// 加工明文 // var time = new Date().getTime(); var time = "1728480847190"; var sign = getSign(user, pwd, time).toUpperCase();
var data = '{"equtype":"ANDROID","loginImei":"Android358523029800728","sign":"' +sign+'","timeStamp":"'+ time +'","userPwd":"' + pwd+'","username":"' +user+ '"}' // 密钥和向量,原算法中key和iv也是经过处理的 // 解析key值 var keyMD5 = CryptoJS.MD5("65102933").toString(); var _key = CryptoJS.enc.Hex.parse(keyMD5); // 解析iv值 var _iv = CryptoJS.enc.Utf8.parse("32028092")