打印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.java
        • class C0049j implements java.util.Map, Serializable, Map {
    • 看起来像是:java.util.Map=Map相关的类
      • -》但是经过实际测试,其实是: Array类型的类:ArrayList

总结起来就是:

此处想要打印此处的:

  • java类型
    • 源码中是:ArrayList
      • ArrayList<Map.Entry<String, String>>
    • 混淆代码中是:ArrayList mRequestHeaders
      • ArrayList
    • 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

就对了。

results matching ""

    No results matching ""