吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 269|回复: 3
收起左侧

[Android 求助] frida 如何第一时间hook shell启动的app_process呢

[复制链接]
w1512320695 发表于 2024-9-13 20:03
本帖最后由 w1512320695 于 2024-9-13 20:07 编辑

[Java] 纯文本查看 复制代码
package com.example.studycreateprocess1;

import static androidx.constraintlayout.helper.widget.MotionEffect.TAG;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

//com.example.studycreateprocess1
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG,"我是主线程");
        new Thread(() -> {
            try {
                // 启动 sh 进程
                //Process process = Runtime.getRuntime().exec("sh");
                //通过简单的脚本也能hook到
                Process process = Runtime.getRuntime().exec("sh");
                Log.d(TAG,"Parent PID: " + process);
                // 获取进程的输出流
                OutputStreamWriter writer = new OutputStreamWriter(process.getOutputStream());
                // 向进程中写入命令
                writer.write("app_process32 -Djava.class.path=/data/local/tmp/HelloWorld.dex /data/local/tmp HelloWorld &\n");
                writer.flush();
                //执行之后 app_process变成野进程
                writer.close();
                
                // 等待进程完成
                process.waitFor();
            } catch (IOException e) {
                Log.e(TAG, "IOException: " + e.getMessage());
            } catch (InterruptedException e) {
                Log.e(TAG, "InterruptedException: " + e.getMessage());
            }
        }).start();

    }
}



HelloWorld.dex 源代码如下
[Java] 纯文本查看 复制代码
public class HelloWorld {
    public static void main(String[] strArr) {
        while (true) {
            System.out.println("Hello, I am started by app_process!");
            try {
                Thread.sleep(1000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}



一共会产生三个进程 1_app主进程  2_sh进程  3_app_process32进程
我想用frIDA 第一时间hook到这个app_process32的pid该怎么办呢
试过hook   fork 和 execve没有生效 只能hook到sh进程,代码如下
[JavaScript] 纯文本查看 复制代码

'use strict';

// 尝试 hook execve 和 fork
const libc = Module.findBaseAddress('libc.so');

if (!libc) {
    console.log('libc.so not found');
}

const execveAddr = Module.findExportByName('libc.so', 'execve');
const forkAddr = Module.findExportByName('libc.so', 'fork');

Interceptor.attach(forkAddr, {
    onEnter: function(args) {
        console.log('fork called');
    },
    onLeave: function(retval) {
        // retval 是新创建的子进程的 PID
        const pid = retval.toInt32();
        console.log('Created child process with PID: ' + pid);
    }
});

Interceptor.attach(execveAddr, {
    onEnter: function(args) {
        const pathname = Memory.readUtf8String(args[0]);
        console.log('execve called with pathname: ' + pathname);
        
        // 这里可以添加更多代码去读取 argv 和 envp
    },
    onLeave: function(retval) {
        // 处理 execve 返回值
        if (retval.isNull()) {
            console.log('execve failed');
        } else {
            console.log('execve executed successfully');
        }
    }
});

在sh进程启动app_process32之前断点,frida -p sh进程id    也hook不到这个app_process32进程启动的过程

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| w1512320695 发表于 2024-9-22 10:52
经过好多天的努力,已经换其他方法解决了问题
 楼主| w1512320695 发表于 2024-9-15 06:53
感觉能监控安卓所有app_process启动的进程也可以    有大佬能教一下吗
kouyuu 发表于 2024-10-19 17:54
w1512320695 发表于 2024-9-22 10:52
经过好多天的努力,已经换其他方法解决了问题

楼主怎么解决的?能分享一下吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-10-23 02:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表