资源共享吧-专业共享VIP视频

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 82|回复: 4

[安卓逆向] 哪位大佬帮我看一下代码,运行后获得的进程id是错误的?(安卓上运行的程序)

[复制链接]
  • TA的每日心情

    7 小时前
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    4

    主题

    111

    帖子

    0

    精华

    终身高级VIP会员

    Rank: 7Rank: 7Rank: 7

    资源币
    24
    积分
    113
    贡献
    0
    在线时间
    20 小时
    注册时间
    2020-3-20
    最后登录
    2020-4-8

    终身VIP会员

    发表于 2020-3-24 19:40:15 | 显示全部楼层 |阅读模式
    5资源币
    本帖最后由 wangda38 于 2020-3-24 19:46 编辑

    ///根据包名查找游戏进程pid
    int getPID(const char *pack_name) {
        int id = -1, pid = -1;
        DIR *dir = 0;
        FILE *file = 0;
        char filename[32] = {0};
        char cmdline[256] = {0};
        struct dirent *entry = 0;

        if (pack_name == NULL) {
            return -1;
            }

        dir = opendir("/proc");
        if (dir == NULL) {
            return -1;
            }

        while ((entry = readdir(dir)) != NULL) {
            id = atoi(entry->d_name);
            if (id > 0) {
                sprintf(filename, "/proc/%d/cmdline", id);
                file = fopen(filename, "r");

                if (file) {
                    fgets(cmdline, sizeof(cmdline), file);
                    fclose(file);

                    if (strcmp(pack_name, cmdline) == 0) {
                        pid = id;
                        break;
                        }
                    }
                }
            }
        closedir(dir);
        return pid;
    }


    extern "C"
    jint Java_com_example_appc_aaa_searchMem(JNIEnv *env, jobject thiz) {
        char *game = "com.bb.bb"; //包名
    int pid = getPID(game);
        return pid;
    }







    最佳答案

    查看完整内容

    我这边正常啊,没毛病啊
    回复

    使用道具 举报

  • TA的每日心情
    开心
    17 小时前
  • 签到天数: 31 天

    [LV.5]常住居民I

    1098

    主题

    6127

    帖子

    309

    精华

    管理员

    Rank: 9Rank: 9Rank: 9

    资源币
    1447
    积分
    8724
    贡献
    97
    在线时间
    3461 小时
    注册时间
    2015-4-14
    最后登录
    2020-4-8

    论坛管理员超级版主终身VIP会员资源共享吧男神终身成就

    发表于 2020-3-24 19:40:16 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    17 小时前
  • 签到天数: 31 天

    [LV.5]常住居民I

    1098

    主题

    6127

    帖子

    309

    精华

    管理员

    Rank: 9Rank: 9Rank: 9

    资源币
    1447
    积分
    8724
    贡献
    97
    在线时间
    3461 小时
    注册时间
    2015-4-14
    最后登录
    2020-4-8

    论坛管理员超级版主终身VIP会员资源共享吧男神终身成就

    发表于 2020-3-24 23:02:21 | 显示全部楼层
    int find_pid_of(const char *process_name)
    {
            int id;
            pid_t pid = -1;
            DIR* dir;
            FILE *fp;
            char filename[32];
            char cmdline[256];

            struct dirent * entry;

            if (process_name == NULL)
                    return -1;

            dir = opendir("/proc");
            if (dir == NULL)
                    return -1;

            while ((entry = readdir(dir)) != NULL) {
                    id = atoi(entry->d_name);
                    if (id != 0) {
                            sprintf(filename, "/proc/%d/cmdline", id);
                            fp = fopen(filename, "r");
                            if (fp) {
                                    fgets(cmdline, sizeof(cmdline), fp);
                                    fclose(fp);

                                    if (strcmp(process_name, cmdline) == 0) {
                                            /* process found */
                                            pid = id;
                                            break;
                                    }
                            }
                    }
            }

            closedir(dir);
            return pid;
    }

    extern "C"
    jint Java_com_example_appc_aaa_searchMem(JNIEnv *env, jobject thiz) {
        pid_t target_pid;
        target_pid = find_pid_of("com.bb.bb");
        return pid;
    }
    回复

    使用道具 举报

  • TA的每日心情

    7 小时前
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    4

    主题

    111

    帖子

    0

    精华

    终身高级VIP会员

    Rank: 7Rank: 7Rank: 7

    资源币
    24
    积分
    113
    贡献
    0
    在线时间
    20 小时
    注册时间
    2020-3-20
    最后登录
    2020-4-8

    终身VIP会员

     楼主| 发表于 2020-3-25 12:19:23 | 显示全部楼层
    admin 发表于 2020-3-24 23:02
    int find_pid_of(const char *process_name)
    {
            int id;

    你好,代码运行到
    if (strcmp(process_name, cmdline) == 0) {
                                            /* process found */
                                            pid = id;
                                            break;
                                    }
    这里的包名匹配不对返回得不到id,
    我调试后看到的cmdline得到的包名是当前本程序在进程中的包名,
    无法得到其他的包名。
    大佬请问这个怎么解决
    回复

    使用道具 举报

  • TA的每日心情

    7 小时前
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    4

    主题

    111

    帖子

    0

    精华

    终身高级VIP会员

    Rank: 7Rank: 7Rank: 7

    资源币
    24
    积分
    113
    贡献
    0
    在线时间
    20 小时
    注册时间
    2020-3-20
    最后登录
    2020-4-8

    终身VIP会员

     楼主| 发表于 2020-3-26 17:33:59 | 显示全部楼层
    admin 发表于 2020-3-25 17:53
    我这边正常啊,没毛病啊

    请问你的root权限用c是怎么实现的?我这好像是权限不对
    回复

    使用道具 举报

     点击右侧快捷回复  
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    ()

    GMT+8, 2020-4-8 17:29 , Processed in 0.041190 second(s), 8 queries , MemCached On.

    © 2001-2020 www.zygx8.com.

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