1. Metas
Boss Li: Fenfei, se dice que se actualizó una aplicación de comercio electrónico y se creó un letrero de 64 bits. ¡Lo que es aún mejor es que todas las entradas están encriptadas!
Fenfei: Es genial, sácalo y juguemos.
v10.3.2
Dos pasos
32 bits y 64 bits
Hemos dominado tantos métodos, ¿qué tal buscar cadenas primero? ¿O Hook primero?
Zi dijo una vez: cuando ve una firma de 32 bits, piensa en MD5 y HmacSHA1, y cuando ve una firma de 64 bits, piensa en HmacSHA256.
Luego, primero participe en las funciones relacionadas con la criptografía de Java:
var secretKeySpec = Java.use('javax.crypto.spec.SecretKeySpec');
secretKeySpec.$init.overload('[B','java.lang.String').implementation = function (a,b) {
var result = this.$init(a, b);
console.log(">>> 算法名" + b);
return result;
}
// /*
var mac = Java.use('javax.crypto.Mac');
mac.getInstance.overload('java.lang.String').implementation = function (a) {
// showStacks();
var result = this.getInstance(a);
console.log("mac ======================================");
console.log("算法名:" + a);
return result;
}
mac.doFinal.overload('[B').implementation = function (a) {
// showStacks();
var result = this.doFinal(a);
console.log("mac ======================================");
console.log("doFinal参数:" + bytesToString(a));
console.log("doFinal结果(hex):" + bytesToHex(result));
console.log("doFinal结果(base):" + bytesToBase64(result));
// var stack = threadinstance.currentThread().getStackTrace();
// console.log("Full call stack:" + Where(stack));
return result;
}
// */
correr.
CONSEJO: Recuerde consultar el artículo anterior http://91fans.com.cn/post/ldqsignone/ para cambiar el número de puerto de frida
Afortunadamente, realmente lo es.
¿Cuál es la clave?
La diferencia entre HmacSHA256 y md5 es que pasa una clave. Intentamos encontrar esta clave.
primero imprime la pila
Full call stack:dalvik.system.VMStack.getThreadStackTrace(Native Method)
java.lang.Thread.getStackTrace(Thread.java:1720)
javax.crypto.Mac.doFinal(Native Method)
com.jxxxxong.sdk.xxcrashreport.a.z.a(XXCrashReportFile:63)
com.jxxxxong.sdk.xxcrashreport.a.z.a(XXCrashReportFile:136)
com.jxxxxong.sdk.xxcrashreport.a.o.Ve(XXCrashReportFile:154)
com.jxxxxong.sdk.xxcrashreport.a.o.<init>(XXCrashReportFile:135)
com.jxxxxong.sdk.xxcrashreport.a.o.<init>(XXCrashReportFile:37)
com.jxxxxong.sdk.xxcrashreport.a.o$a.Vf(XXCrashReportFile:245)
com.jxxxxong.sdk.xxcrashreport.a.ai$a.run(XXCrashReportFile:133)
Originalmente, quería encontrar la clave directamente del código estático, pero estaba mareado después de dar vueltas.
Olvídalo, agrega un Hook.
var getKeyCls = Java.use("com.jxxxxong.sdk.xxcrashreport.a.z");
getKeyCls.a.overload('[B', '[B').implementation = function(a,b){
var result = this.a(a,b);
var StrCls = Java.use('java.lang.String');
var keyStr = StrCls.$new(b);
var dataStr = StrCls.$new(a);
console.log(">>> dataStr=" + dataStr);
console.log(">>> key=" + keyStr);
console.log(">>> rc=" + result);
return result;
}
sigue corriendo hacia abajo
controlar
El texto sin formato está ahí, la clave está ahí y el resultado también está ahí. Podemos comprobarlo.
def main():
data = "yingyan&R4iSKKKKKKKKKK3Ckm6NCKyP4XpntPMcsmTiVIdoeOlPYBLNS1PK0O4e747X79c5P3zFQbh3LbJlFUCRaaIQTPKmipOYkJUu6OAqZT1xx6MMacwy/v5yxRvbdYAwdhXVCF7zmi+DHbQ16PPDpn/R9PPnPifGbirJeG9yKKKK&R4iSKKKKKKKKKBC0CtGnLKMgYWz/LGKKKK==&android&10.3.2&R4iSKKKKKKKKKOlFz0/FIGUKUpUcZGYKKKK=&R4iSKKKKKKKKKKlShOtDUJLIsFKLKA589d0AKKKK&uvReport&R4iSKKKKKKKKKNC0KKNrTV2rKqKKKK==&huawei&R4iSKKKKKKKKKNC0CJRGCtS3DKSK/BvloKuKKKK=&E1.1&1641614274084&R4iSKKKKKKKKKNDBjBK0JNG1DurECbE0iBGOKNhLaV4GKKKK".encode('utf-8')
# 890394FD47EB218CADB73B3FFF976CFE571AC255E1BD5F7AFE427CED13B52DBC
signature = hmac.new(appsecret, data, digestmod=sha256).hexdigest().upper()
print(signature)
La vida es corta, usa Python rápidamente
Llámalo un día ~ Tomemos un descanso, hagamos el cifrado mañana.
3. Resumen
Tomé el paquete nuevamente y lo comparé. La firma en el modo &sign=xxx&sv=xxx todavía existe, y el algoritmo con una alta probabilidad no ha cambiado.
También existe la versión anterior del signo de 64 bits y la probabilidad no ha cambiado.
Entonces, el jefe siempre tiene la razón .
Excava desde donde estás parado y seguramente encontrarás un manantial claro.