打印Map的ArrayList
举例说明:
对于此处的:
(1)源码中是:
ArrayList<Map.Entry<String, String>> requestHeaders,
(2)(jadx、JEB反编译后的)混淆后代码是:
ArrayList mRequestHeaders
(3)后续用
FridaAndroidUtil.getJavaClassName(mRequestHeaders)
打印出java的类型是:
j$.util.m
其中用jadx搜到的是:
xxx_v250861_jadx/sources/j$/util/C0052m.java
package j$.util;
import java.util.SortedMap;
/* renamed from: j$.util.m, reason: case insensitive filesystem */
/* loaded from: classes12.dex */
final class C0052m extends C0049j implements SortedMap {
...
其中的:
implements SortedMap- 看起来,以为是,很像是:Map相关的类
extends C0049j- 找到具体类是
xxx_v250861_jadx/sources/j$/util/C0049j.javaclass C0049j implements java.util.Map, Serializable, Map {
- 看起来像是:
java.util.Map=Map相关的类- -》但是经过实际测试,其实是:
Array类型的类:ArrayList
- -》但是经过实际测试,其实是:
- 找到具体类是
总结起来就是:
此处想要打印此处的:
- java类型
- 源码中是:
ArrayListArrayList<Map.Entry<String, String>>
- 混淆代码中是:
ArrayList mRequestHeadersArrayList
- frida中打印出的是
j$.util.m- 从相关源码中看起来,很像是:
Map的类 - 但实际上确是:
Array的类
- 从相关源码中看起来,很像是:
- 源码中是:
的最新代码是:
// java ArrayList (byte array / List<Integer> / ArrayList<Map.Entry<String, String>> ) to string
static javaArrayListToStr(javaArraryList){
// var jsArrayList = FridaAndroidUtil.javaByteArrToJsByteArr(javaArraryList)
// console.log("jsArrayList=" + jsArrayList)
// var jsArrayListStr = jsArrayList.toString()
// console.log("jsArrayListStr=" + jsArrayListStr)
// return jsArrayListStr
var javaObjList = javaArraryList.toArray()
console.log("javaObjList=" + javaObjList)
var javaObjListStr = javaObjList.toString()
console.log("javaObjListStr=" + javaObjListStr)
return javaObjListStr
}
...
var mRequestHeaders = curObj.s.value
console.log(`mRequestHeaders=${mRequestHeaders}, type=${typeof mRequestHeaders}`)
console.log(`mRequestHeaders class=${FridaAndroidUtil.getJavaClassName(mRequestHeaders)}`)
var mRequestHeadersStr = FridaAndroidUtil.javaArrayListToStr(mRequestHeaders)
// // FridaAndroidUtil.updateClassLoader("java.util.Map")
// var headersStr = mRequestHeaders.toString()
// console.log("headersStr=" + headersStr)
// var headersValues = mRequestHeaders.values()
// console.log("headersValues=" + headersValues)
// var headersEntries = mRequestHeaders.entrySet()
// console.log("headersEntries=" + headersEntries)
// var headersKeys = mRequestHeaders.keySet()
// console.log("headersKeys=" + headersKeys)
// var mRequestHeadersStr = FridaAndroidUtil.mapToStr(mRequestHeaders)
console.log("mRequestHeadersStr=" + mRequestHeadersStr)
console.log("CronetUrlRequest:" + clsNameStr
+ " mInitialUrl=" + curObj.o.value
+ " mInitialMethod=" + curObj.r.value
// + " mRequestHeaders=" + mRequestHeaders
+ " mRequestHeaders=" + mRequestHeadersStr
相关日志:
mRequestHeaders=[object Object], type=object
mRequestHeaders class=j$.util.m
javaObjList=Content-Type=application/x-www-form-urlencoded,Authorization=AidLogin xxx:yyy,app=org.telegram.messenger.web,gcm_ver=250861022,app_ver=56969
javaObjListStr=Content-Type=application/x-www-form-urlencoded,Authorization=AidLogin xxx:yyy,app=org.telegram.messenger.web,gcm_ver=250861022,app_ver=56969
mRequestHeadersStr=Content-Type=application/x-www-form-urlencoded,Authorization=AidLogin xxx:yyy,app=org.telegram.messenger.web,gcm_ver=250861022,app_ver=56969
就对了。