首页
社区
课程
招聘
frida如何打印类的成员变量? 求助一下大神
发表于: 2021-1-15 03:55 8166

frida如何打印类的成员变量? 求助一下大神

2021-1-15 03:55
8166
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package oicq.wlogin_sdk.tools;
 
import android.content.Context;
import android.os.Build.VERSION;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.ECGenParameterSpec;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.KeyAgreement;
import oicq.wlogin_sdk.report.Reporter;
import oicq.wlogin_sdk.request.t;
 
public class EcdhCrypt
{
  public static final String DEFAULT_PUB_KEY = "020b03cf3d99541f29ffec281bebbd4ea211292ac1f53d7128";
  public static final String DEFAULT_SHARE_KEY = "4da0f614fc9f29c2054c77048a6566d7";
  public static final String S_PUB_KEY = "04928D8850673088B343264E0C6BACB8496D697799F37211DEB25BB73906CB089FEA9639B4E0260498B51A992D50813DA8";
  public static final String X509_S_PUB_KEY = "3046301006072A8648CE3D020106052B8104001F03320004928D8850673088B343264E0C6BACB8496D697799F37211DEB25BB73906CB089FEA9639B4E0260498B51A992D50813DA8";
  public static byte[] _c_pri_key = new byte[0];
  public static byte[] _c_pub_key = new byte[0];
  private static byte[] _g_share_key = new byte[0];
  private static boolean initFlg = false;
  public static PrivateKey pkcs8PrivateKey;
  private static boolean userOpenSSLLib = true;
  public static PublicKey x509PublicKey;
 
  public EcdhCrypt(Context paramContext)
  {
    util.loadLibrary("wtecdh", paramContext);
  }
 
  private byte[] calShareKeyByBouncycastle(byte[] paramArrayOfByte)
  {
    Object localObject1 = "3046301006072A8648CE3D020106052B8104001F03320004";
    try
    {
      if (paramArrayOfByte.length < 30) {
        localObject1 = "302E301006072A8648CE3D020106052B8104001F031A00";
      }
      Object localObject2 = util.buf_to_string(paramArrayOfByte);
      StringBuilder localStringBuilder = new java/lang/StringBuilder;
      localStringBuilder.<init>();
      localStringBuilder.append((String)localObject1);
      localStringBuilder.append((String)localObject2);
      localObject1 = constructX509PublicKey(localStringBuilder.toString());
      localObject2 = new java/lang/StringBuilder;
      ((StringBuilder)localObject2).<init>();
      ((StringBuilder)localObject2).append("raw public key ");
      ((StringBuilder)localObject2).append(util.buf_to_string(_c_pub_key));
      util.LOGI(((StringBuilder)localObject2).toString(), "");
      localObject2 = new java/lang/StringBuilder;
      ((StringBuilder)localObject2).<init>();
      ((StringBuilder)localObject2).append("pkcs8PrivateKey ");
      ((StringBuilder)localObject2).append(pkcs8PrivateKey.toString());
      util.LOGI(((StringBuilder)localObject2).toString(), "");
      localObject2 = KeyAgreement.getInstance("ECDH", "BC");
      ((KeyAgreement)localObject2).init(pkcs8PrivateKey);
      ((KeyAgreement)localObject2).doPhase((Key)localObject1, true);
      localObject2 = ((KeyAgreement)localObject2).generateSecret();
      localObject1 = MD5.toMD5Byte((byte[])localObject2);
      localStringBuilder = new java/lang/StringBuilder;
      localStringBuilder.<init>();
      localStringBuilder.append("share key ");
      localStringBuilder.append(util.buf_to_string((byte[])localObject2));
      util.LOGI(localStringBuilder.toString(), "");
      localObject2 = new java/lang/StringBuilder;
      ((StringBuilder)localObject2).<init>();
      ((StringBuilder)localObject2).append("share key md5 ");
      ((StringBuilder)localObject2).append(util.buf_to_string((byte[])localObject1));
      util.LOGI(((StringBuilder)localObject2).toString(), "");
      return (byte[])localObject1;
    }
    catch (Exception localException)
    {
      localObject1 = new StringBuilder();
      ((StringBuilder)localObject1).append("calShareKeyByBouncycastle failed ");
      ((StringBuilder)localObject1).append(pkcs8PrivateKey.toString());
      ((StringBuilder)localObject1).append(" peer public key ");
      ((StringBuilder)localObject1).append(util.buf_to_string(paramArrayOfByte));
      util.LOGI(((StringBuilder)localObject1).toString(), "");
      util.printException(localException);
      t.ap.attr_api(2459818);
      return null;
    }
    catch (ExceptionInInitializerError paramArrayOfByte)
    {
      localObject1 = new StringBuilder();
      ((StringBuilder)localObject1).append("create key failed ExceptionInInitializerError, ");
      ((StringBuilder)localObject1).append(paramArrayOfByte.getMessage());
      util.LOGW(((StringBuilder)localObject1).toString(), "");
      t.ap.attr_api(2459818);
    }
    return null;
  }

例如这个类 如何打印这个类的 _c_pri_key 这个成员变量呢
求大神解答一下啊 非常感谢


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 201
活跃值: (234)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
反射,可以直接.出来
2021-1-15 10:44
0
雪    币: 233
活跃值: (1346)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
拍手笑沙鸥 反射,可以直接.出来
怎么写啊  大神
2021-1-15 17:29
0
雪    币: 174
活跃值: (3706)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
刚才试了下wallbreaker:
com.xiaojianbang.app on (Android: 8.1.0) [usb] # plugin wallbreaker classdump --fullname com.xiaojianbang.app.Money               

package com.xiaojianbang.app

class Money {

        /* static fields */
        static java.lang.String flag; => zygx8

        /* instance fields */
        java.lang.String _name;
        int num;

        /* constructor methods */
        void Money();
        void Money(java.lang.String, int);

        /* static methods */

        /* instance methods */
        java.lang.String getInfo();
        java.lang.String name();

}
com.xiaojianbang.app on (Android: 8.1.0) [usb] #  

你可以找下这快代码实现
2021-1-15 18:28
0
雪    币: 174
活跃值: (3706)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
另外你可以看下这个文章:
https://eternalsakura13.com/2020/07/04/frida/
里面有调用成员变量的方法,我时间有限,回答的很仓促
2021-1-15 18:33
1
雪    币: 81
活跃值: (462)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
var HookedClass=Java.cast(obj, Java.use("oicq.wlogin_sdk.tools.EcdhCrypt"))
console.log(HookedClass._c_pri_key.value)

这是一个静态方法,还可以使用console.log(Java.use("oicq.wlogin_sdk.tools.EcdhCrypt")._c_pri_key.value)
2021-1-15 21:31
0
雪    币: 400
活跃值: (720)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Da_
7
楼主你是想动态的打印hook时,该属性的值是吗
2021-1-15 22:43
0
雪    币: 400
活跃值: (720)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Da_
8
5楼说的基本没差了。这样写
var cc=Java.use('oicq.wlogin_sdk.tools.EcdhCrypt')
var testClazz3 = cc.class;
// 获得类中属性相关的方法
publicStaticField = testClazz3.getDeclaredField("_c_pri_key");
console.log(publicStaticField);
2021-1-15 22:50
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
邮箱?
2021-2-17 03:09
0
雪    币: 1838
活跃值: (786)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
10
const Class = Java.use("java.lang.Class");
function inspectObject(obj) {
    const obj_class = Java.cast(obj.getClass(), Class);
    const fields = obj_class.getDeclaredFields();
    const methods = obj_class.getMethods();
    console.log("Inspecting " + obj.getClass().toString());
    console.log("\tFields:");
    for (var i in fields)
        console.log("\t\t" + fields[i].toString());
    console.log("\tMethods:");
    for (var i in methods)
        console.log("\t\t" + methods[i].toString());
}
2021-2-17 18:47
1
雪    币: 21
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
惊现大神    
2021-2-19 22:30
0
游客
登录 | 注册 方可回帖
返回
//