Android反编译看看手Q口令红包的实现原理

2019-12-10 19:07:55王振洲

6、类/函数名大法

我们再祭出第二大杀器,类/函数/变量名大法搜索大法。

通常类名符合的范围更小,所以先只使用Class。
试试看红包的英语:RedPacket(类名命名所以R和P大写)

Android反编译看看手Q口令红包的实现原理

OK,我们找到了十几条,开始逐一排查,第一条RedPacketInfo点进去一看就是个包含了各种field的ui用的vo类,跳过,再看下一个,从包名com.tencent.mobileqq.data看上去,似乎有戏,QQWalletRedPacketMsg:

package com.tencent.mobileqq.data;

import android.text.TextUtils;
import com.tencent.mobileqq.hotpatch.NotVerifyClass;
import cooperation.qzone.util.WiFiDash;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import tencent.im.msg.im_msg_body.QQWalletAioBody;

/* compiled from: ProGuard */
public class QQWalletRedPacketMsg {
  public String authkey;
  private int channelId;
  public int conftype;
  public QQWalletTransferMsgElem elem;
  public String envelopeName;
  public int envelopeid;
  public boolean isOpened;
  public int msgFrom;
  public String redPacketId;
  public int redtype;
  private int resend;
  public int templateId;

 ...串行化、读写、构建方法等,可以无视。
从field名来看,这里还是比较可疑的,猜测redtype是不是描述红包类型的。

我们再次使用关键词redtype进行搜索,这次选择Code,只进行代码内搜索,结果却发现貌似不对,找到相关的字符串是”查看详情”,貌似是描述红包领取状态的。

不放弃,继续抓住QQWalletRedPacketMsg这个类进行搜索,看看是不是有外面包着这个类的Class,搜索QQWalletRedPacketMsg,范围使用Field,排除掉类本身外,只有唯一的结果:MessageForQQWalletMsg:

public class MessageForQQWalletMsg extends ChatMessage {
  // 哦哦?COMMAND_REDPACKET?口令红包
  public static final int MSG_TYPE_COMMAND_REDPACKET = 6;
  public static final int MSG_TYPE_COMMON_REDPACKET = 2;
  public static final int MSG_TYPE_COMMON_THEME_REDPACKET = 4;
  public static final int MSG_TYPE_INDIVIDUAL_REDPACKET = 2001;
  public static final int MSG_TYPE_LUCY_REDPACKET = 3;
  public static final int MSG_TYPE_LUCY_THEME_REDPACKET = 5;
  public static final int MSG_TYPE_PUBLIC_ACCOUNT_REDPACKET = 2002;
  public static final int MSG_TYPE_TRANSFER = 1;
  ...