android调用C语言实现内存的读取与修改

您所在的位置:网站首页 安卓内存读写写不进去 android调用C语言实现内存的读取与修改

android调用C语言实现内存的读取与修改

2024-03-18 12:50| 来源: 网络整理| 查看: 265

写之前需要准备以下内容

android studio 已ROOT安卓设备 GG修改器

打开android studio,创建Native C++ Project 在这里插入图片描述 activity_main.xml

MainActivity.java

package com.gs.jc; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView textView; private JNI jni; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); jni = new JNI(); textView = (TextView) findViewById(R.id.tv); } public void btn(View view) { textView.setText(String.valueOf(jni.searchMem())); } }

新建一个java类,以实现java调用对应C代码

package com.gs.jc; public class JNI { static { System.loadLibrary("native-lib"); } /* *定义native方法 *调用C代码对应的方法 */ public native int searchMem(); }

O_RDONLY 只读打开 O_WRONLY 只写打开 O_RDWR 可读可写打开 O_SYNC 以同步的方式打开文件

C++核心代码

#include #include #include #include #include #include #include static int fd = 0; //查找游戏进程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; } //打开文件句柄 int open_proc_mem(int pid) { if (pid if (fd char *game = "com.tencent.tmgp.sgame"; //包名 int pid = getPID(game); //获取进程PID fd = open_proc_mem(pid); //打开进程内存 //long base = 0; long buf[1] = {666}; //需要修改内存的值 long *addr = (long *) 0x12C0085C; //内存地址:0x12C0085C pwrite64_mem(fd, &buf[0], 4, addr); //写入内存数据 //pread64_mem(fd, &base, 4, addr); return pid; }

C代码中需要自行修改的地方 char *game = “com.tencent.tmgp.sgame”; //包名 long *addr = (long *) 0x12C0085C;//内存地址

效果图链接: https://www.lanzous.com/b0dppncji

以上是简单的内存地址修改方法,右上角关注后续讲解模糊搜索、联合搜索、特征码定位等



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3