Frida Hook Android App
在Hooking之前,快速测试方法是否可以hook
android hooking watch class_method com.aimi.android.common.service.c.f -
-dump-args --dump-return
当然,你需要先执行objection -g 挂载进程

不能实现直接hook 很多时候是因为该方法并非静态方法,那就需要实例化它的class

public interface c {
List<PackageInfo> A(Context context, boolean z);

boolean a();

byte[] b(byte[] bArr, byte[] bArr2);

byte[] c(byte[] bArr, byte[] bArr2);

byte[] d(byte[] bArr, byte[] bArr2);

String e(Context context, Long l);

String f(Context context, Long l);

String g(Context context, String str);

String h(Context context, String str, String str2);

String i(byte[] bArr);

String j(String str);

String k(byte[] bArr);

byte[] l(byte[] bArr);

int m();

我们可以看到c方法其实是一个接口
反混淆之后你能够看到一个大概的方法名和类目,直接用来搜索
以下是反混淆之后的类名

public interface InterfaceC2023c {
/* renamed from: A */
List<PackageInfo> mo23558A(Context context, boolean z);

/* renamed from: a */
boolean mo23555a();

/* renamed from: b */
byte[] mo23554b(byte[] bArr, byte[] bArr2);

/* renamed from: c */
byte[] mo23553c(byte[] bArr, byte[] bArr2);

/* renamed from: d */
byte[] mo23552d(byte[] bArr, byte[] bArr2);

/* renamed from: e */
String mo23551e(Context context, Long l);

/* renamed from: f */
String mo23550f(Context context, Long l);

/* renamed from: g */
String mo23549g(Context context, String str);

/* renamed from: h */
String mo23548h(Context context, String str, String str2);

frida帮助我们标注了之前的类名和方法名
我们直接用类名进行搜索
2023-03-03T05:22:43.png
跟进去之后你能发现frida帮你标注好了它的原始类名 com.xunmeng.pinduoduo.secure.u

/* compiled from: Pdd */
/* renamed from: com.xunmeng.pinduoduo.secure.u */
/* loaded from: classes.dex */
public class C34708u implements InterfaceC2023c {

/* renamed from: B */
Integer f94116B;

/* renamed from: C */
Integer f94117C;

/* renamed from: D */
Long f94118D;

@Override // com.aimi.android.common.service.InterfaceC2023c
/* renamed from: p */

然后去jadx中搜索这个类 com.xunmeng.pinduoduo.secure.u ,在不反混淆的情况下直接在文件上点击右键即可复制名称
2023-03-03T05:42:16.png
跟进去,你会发现很熟悉
然后我们回顾之前刚开始的时候,我们需要hook的是f方法,那直接在这里面搜索 f(
因为我们反混淆了,所以f方法我们找不到,不过没关系,frida帮我们标注了,所以我们直接搜索frida的注释:/ renamed from: f /

/* renamed from: f */
public String mo23550f(Context context, Long l) {
    long m54538c;
    if (C5611o.m93746p(134075, this, context, l)) {
        return C5611o.m93739w();
    }
    if (AbTest.instance().isFlowControl("ab_timestamp_v2_5590", true)) {
        m54538c = TimeStamp.getRealLocalTimeV2();
    } else {
        m54538c = C23083p.m54538c(TimeStamp.getRealLocalTime());
    }
    try {
        return SecureNative.deviceInfo2(context, Long.valueOf(m54538c));
    } catch (Throwable th) {
        Logger.m95419e("PDD.SecureServiceImpl", "deviceInfo2 error, %s", th);
        return null;

或者你可以反混淆回去搜索 public String f

此处内容需要评论回复后(审核通过)方可阅读。

安卓 Python+Frida Hook入门教程【简单Hook+RPC主动调用】

#frida.py
import frida  # 导入frida模块
import sys  # 导入sys模块

def on_message(message, data):  # js中执行send函数后要回调的函数
    print(message)

'''
spawn模式,Frida会自行启动并注入进目标App,Hook的时机非常早
'''
# device=frida.get_remote_device()
# pid=device.spawn(['com.jx885.reward'])  #包名
# device.resume(pid)
# time.sleep(1)
# session = device.attach(pid)

'''
attach模式,Frida会附加到当前的目标进程中,即需要App处于启动状态,这也意味着只能从当前时机往后Hook,
'''
session = frida.get_remote_device().attach('驾培创业教练')  #APPNAME

with open("./frida.js") as f:
    script = session.create_script(f.read())

script.on('message', on_message)  # 加载回调函数,也就是js中执行send函数规定要执行的python函数
script.load()  # 加载脚本
currTime='20220619043925'
phone='13966552233'
type='1'
sign=script.exports.getsign(f'{currTime}{type}wocaonima{phone}')
print(sign)
#sys.stdin.read()


#frida.js
// Java.perform(function (){
//     Java.use('com.jx885.library.http.CommAction').getSmscode.implementation=function (mi,mstr,mstr2){
//         console.log(mi,mstr,mstr2);
//         return this.getSmscode(mi,mstr,mstr2);
//     }
// });

function sign(s){
    var result='';
    Java.perform(function (){
        result=Java.use('com.jx885.library.http.network.HttpUtils').getStringMD5toUpperCase(s);
    })
    return result
}
rpc.exports={
    getsign:sign
}
最后修改:2023 年 03 月 08 日
如果觉得我的文章对你有用,请随意赞赏