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

在这里插入图片描述
MemoryTools.h

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <dirent.h>
#include <pthread.h>
#include <cstdio>
#include <cstring>
#include <fstream>

struct MAPS {
    unsigned long addr;
    unsigned long taddr;
    struct MAPS *next;
};

struct RESULT {
    unsigned long addr;
    struct RESULT *next;
};

struct FREEZE {
    unsigned long addr;  //地址
    char *value;         //值
    int type;            //类型
    struct FREEZE *next; //指向下一节点的指针
};

#define LEN sizeof(struct MAPS)
#define FRE sizeof(struct FREEZE)
typedef struct MAPS *PMAPS;    //存储maps的链表
typedef struct RESULT *PRES;   //存储结果的链表
typedef struct FREEZE *PFREEZE;//存储冻结的数据的链表

typedef int TYPE;
typedef int RANGE;
typedef int COUNT;
typedef long int OFFSET;
typedef unsigned long ADDRESS;
typedef char PACKAGENAME;

enum type {
    DWORD,
    FLOAT
};

enum Range {
    ALL,        //所有内存
    B_BAD,      //B内存
    C_ALLOC,    //Ca内存
    C_BSS,      //Cb内存
    C_DATA,     //Cd内存
    C_HEAP,     //Ch内存
    JAVA_HEAP,  //Jh内存
    A_ANONMYOUS,//A内存
    CODE_SYSTEM,//Xs内存
    STACK,      //S内存
    ASHMEM      //As内存
};

PMAPS Res = NULL;//全局buff(保存数据的地方)
PFREEZE Pfreeze = NULL;//用于存储冻结的数据
PFREEZE pEnd = NULL;
PFREEZE pNew = NULL;
int FreezeCount = 0;//冻结数据个数
int Freeze = 0;//开关
int typeNum = -1;
pthread_t pth;
char Fbm[64];//包名
long int delay = 1000;//冻结延迟,默认1000us

int ResCount = 0;//结果数量
int MemorySearchRange = 0;

int getRoot(char *argv[]);//获取root权限
int gs;
pid_t pid = 0;

int initMemoryTools(const char *bm);//获取pid

int SetSearchRange(int type);//设置搜索范围
PMAPS readmaps(int type);

PMAPS readmaps_all();//读取maps文件
PMAPS readmaps_bad();//读取maps文件
PMAPS readmaps_c_alloc();//读取maps文件
PMAPS readmaps_c_bss();//读取maps文件
PMAPS readmaps_c_data();//读取maps文件
PMAPS readmaps_c_heap();//读取maps文件
PMAPS readmaps_java_heap();//读取maps文件
PMAPS readmaps_a_anonmyous();//读取maps文件
PMAPS readmaps_code_system();//读取maps文件
PMAPS readmaps_stack();//读取maps文件
PMAPS readmaps_ashmem();//读取maps文件

void BaseAddressSearch(char *value, int type, unsigned long BaseAddr);//基址搜索
PMAPS BaseAddressSearch_DWORD(int value, unsigned long BaseAddr, PMAPS pMap);//DWORD
PMAPS BaseAddressSearch_FLOAT(float value, unsigned long BaseAddr, PMAPS pMap);//FLOAT

void RangeMemorySearch(char *from_value, char *to_value, int type);//范围搜索
PMAPS RangeMemorySearch_DWORD(int from_value, int to_value, PMAPS pMap);//DWORD
PMAPS RangeMemorySearch_FLOAT(float from_value, float to_value, PMAPS pMap);//FLOAT

void MemorySearch(const char *value, int TYPE);//类型搜索,这里value需要传入一个地址
PMAPS MemorySearch_DWORD(int value, PMAPS pMap);  //内存搜索DWORD
PMAPS MemorySearch_FLOAT(float value, PMAPS pMap);  //内存搜索FLOAT

void MemoryOffset(const char *value, long int offset, int type);//搜索偏移
PMAPS MemoryOffset_DWORD(int value, long int offset, PMAPS pBuff);//搜索偏移DWORD
PMAPS MemoryOffset_FLOAT(float value, long int offset, PMAPS pBuff);//搜索偏移FLOAT

void RangeMemoryOffset(char *from_value, char *to_value, long int offset, int type);//范围偏移
PMAPS
RangeMemoryOffset_DWORD(int from_value, int to_value, long int offset, PMAPS pBuff);//搜索偏移DWORD
PMAPS
RangeMemoryOffset_FLOAT(float from_value, float to_value, long int offset, PMAPS pBuff);//搜索偏移FLOAT

void MemoryWrite(const char *value, long int offset, int type);    //内存写入
int MemoryWrite_DWORD(int value, PMAPS pBuff, long int offset);    //内存写入DWORD
int MemoryWrite_FLOAT(float value, PMAPS pBuff, long int offset);    //内存写入FLOAT

void *SearchAddress(unsigned long addr);//搜索地址中的值,返回一个指针
int WriteAddress(unsigned long addr, void *value, int type);//修改地址中的值
int GetResultCount();//获取Res个数

void BypassGameSafe();//绕过游戏保护
//void RecBypassGameSafe(char *bm);//解除(停止使用)
void PrintResults();//打印Res里面的内容(地址)
void ClearResults();//清除链表,释放空间
void ClearMaps(PMAPS pMap);//清空maps

int isapkinstalled(char *bm);//检测应用是否安装
int isapkrunning(char *bm);//检测应用是否运行
int killprocess(char *bm);//杀掉进程
char GetProcessState(char *bm);//获取进程状态
int killGG();//杀掉gg修改器
int killXs();//杀xs
int uninstallapk(char *bm);//静默删除软件
int installapk(char *lj);//静默卸载软件
int rebootsystem();//重启系统(手机)
int PutDate();//输出系统日期
int GetDate(char *date);//获取系统时间

PMAPS GetResults();//获取结果,返回头指针
int AddFreezeItem_All(char *Value, int type, long int offset);//冻结所有结果
int AddFreezeItem(unsigned long addr, char *value, int type, long int offset);//增加冻结数据
int AddFreezeItem_DWORD(unsigned long addr, char *value);//DWORD
int AddFreezeItem_FLOAT(unsigned long addr, char *value);//FLOAT
int RemoveFreezeItem(long int addr);//清除固定冻结数据
int RemoveFreezeItem_All();//清空所有冻结数据
int StartFreeze(char *bm);//开始冻结
int StopFreeze();//停止冻结
int SetFreezeDelay(long int De);//设置冻结延迟
int PrintFreezeItems();//打印冻结表

和平精英科技
加入群聊获取更多科技
Q群号码:549158392

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值