mirror of
https://github.com/Light-Speech/C-Android-Memory-Tool.git
synced 2024-10-23 09:33:45 +08:00
232 lines
8.4 KiB
C++
232 lines
8.4 KiB
C++
#pragma
|
|
#include<cstddef>
|
|
#include<cstdint>
|
|
#include<pthread.h>
|
|
|
|
struct MAPS {
|
|
long int addr;
|
|
long int taddr;
|
|
int type;
|
|
struct MAPS *next;
|
|
};
|
|
|
|
struct RESULT {
|
|
long int addr;
|
|
struct RESULT *next;
|
|
};
|
|
|
|
struct FREEZE {
|
|
long int addr; // address
|
|
char *value; // value
|
|
int type; // type
|
|
struct FREEZE *next; // pointer to the next node
|
|
};
|
|
|
|
typedef int BOOLEAN;
|
|
typedef struct MAPS *PMAPS; //A linked list that stores maps
|
|
typedef struct RESULT *PRES; // linked list to store results
|
|
typedef struct FREEZE *PFREEZE; // Linked list to store frozen data
|
|
|
|
typedef int TYPE;
|
|
typedef int RANGE;
|
|
typedef int COUNT;
|
|
typedef int COLOR;
|
|
typedef long int OFFSET;
|
|
typedef long int ADDRESS;
|
|
typedef char PACKAGENAME;
|
|
|
|
typedef int64_t QWORD;
|
|
typedef int32_t DWORD;
|
|
typedef int16_t WORD;
|
|
typedef int8_t BYTE;
|
|
typedef float FLOAT;
|
|
typedef double DOUBLE;
|
|
|
|
enum type {
|
|
TYPE_DWORD,
|
|
TYPE_FLOAT,
|
|
TYPE_DOUBLE,
|
|
TYPE_WORD,
|
|
TYPE_BYTE,
|
|
TYPE_QWORD,
|
|
};
|
|
|
|
enum Range {
|
|
ALL, // all memory
|
|
B_BAD, // B memory
|
|
C_ALLOC, // Ca memory
|
|
C_BSS, // Cb memory
|
|
C_DATA, // Cd memory
|
|
C_HEAP, // Ch memory
|
|
JAVA_HEAP, // Jh memory
|
|
A_ANONMYOUS, // A memory
|
|
CODE_SYSTEM, // Xs memory
|
|
STACK, // S memory
|
|
ASHMEM // As memory
|
|
};
|
|
|
|
enum Color {
|
|
COLOR_SILVERY, // silver
|
|
COLOR_RED, // Red
|
|
COLOR_GREEN, // Green
|
|
COLOR_YELLOW, // Yellow
|
|
COLOR_DARK_BLUE, // Blue
|
|
COLOR_PINK, // Pink
|
|
COLOR_SKY_BLUE, // Sky Blue
|
|
COLOR_WHITE // White
|
|
};
|
|
|
|
#define MODE_ROOT "MODE_ROOT"
|
|
#define MODE_NO_ROOT "MODE_NO_ROOT"
|
|
#define TRUE 1
|
|
#define FALSE 0
|
|
#define LEN sizeof(struct MAPS)
|
|
#define FRE sizeof(struct FREEZE)
|
|
|
|
|
|
class MemoryTool
|
|
{
|
|
public:
|
|
PMAPS Res = NULL; // Global buff (where data is saved)
|
|
PFREEZE value_freeze = NULL; // For storing frozen data
|
|
PFREEZE pEnd = NULL;
|
|
PFREEZE pNew = NULL;
|
|
int FreezeCount = 0; // Number of frozen data
|
|
int Freeze = 0; // switch
|
|
pthread_t pth;
|
|
char bm[64]; // Package names
|
|
long int delay = 30000; // Freeze delay, default 30000us
|
|
int process_handle; //mem process_handle
|
|
int ResCount = 0; // number of results
|
|
int gs = 0;
|
|
int MemorySearchRange = 0; // 0 for all
|
|
int ms = 0;
|
|
|
|
int SetTextColor(int);
|
|
int getPID(char [64]); // get pid
|
|
void initXMemoryTools(char *, char *);
|
|
int SetSearchRange(int); // Set search scope
|
|
PMAPS readmaps(int);
|
|
PMAPS readmaps_all(); // read maps file
|
|
PMAPS readmaps_bad(); // read maps file
|
|
PMAPS readmaps_c_alloc(); // read maps file
|
|
PMAPS readmaps_c_bss(); // read maps file
|
|
PMAPS readmaps_c_data(); // read maps file
|
|
PMAPS readmaps_c_heap(); // read maps file
|
|
PMAPS readmaps_java_heap(); // read maps file
|
|
PMAPS readmaps_a_anonmyous(); // read maps file
|
|
PMAPS readmaps_code_system(); // read maps file
|
|
PMAPS readmaps_stack(); // read maps file
|
|
PMAPS readmaps_ashmem(); // read maps file
|
|
|
|
void BaseAddressSearch(char*, int , long int); // base search
|
|
PMAPS BaseAddressSearch_DWORD(DWORD, long int, PMAPS); // DWORD
|
|
PMAPS BaseAddressSearch_FLOAT(FLOAT , long int, PMAPS ); // FLOAT
|
|
PMAPS BaseAddressSearch_DOUBLE(DOUBLE , long int , PMAPS); // DOUBLE
|
|
PMAPS BaseAddressSearch_WORD(WORD, long int, PMAPS); // WORD
|
|
PMAPS BaseAddressSearch_BYTE(BYTE, long int, PMAPS); // BYTE
|
|
PMAPS BaseAddressSearch_QWORD(QWORD, long int, PMAPS); // QWORD
|
|
|
|
|
|
void RangeMemorySearch(char*, char *, int); // range search
|
|
PMAPS RangeMemorySearch_DWORD(DWORD, DWORD, PMAPS); // DWORD
|
|
PMAPS RangeMemorySearch_FLOAT(FLOAT, FLOAT, PMAPS); // FLOAT
|
|
PMAPS RangeMemorySearch_DOUBLE(DOUBLE, DOUBLE, PMAPS); // WORD
|
|
PMAPS RangeMemorySearch_WORD(WORD, WORD, PMAPS); // WORD
|
|
PMAPS RangeMemorySearch_BYTE(BYTE, BYTE, PMAPS); // BYTE
|
|
PMAPS RangeMemorySearch_QWORD(QWORD, QWORD, PMAPS); // QWORD
|
|
|
|
void MemorySearch(char*, int); // Type search, where value needs to pass in an address
|
|
PMAPS MemorySearch_DWORD(DWORD, PMAPS); // Memory Search DWORD
|
|
PMAPS MemorySearch_FLOAT(FLOAT, PMAPS); // Memory search FLOAT
|
|
PMAPS MemorySearch_DOUBLE(DOUBLE, PMAPS); // Memory Search DOUBLE
|
|
PMAPS MemorySearch_WORD(WORD, PMAPS); // Memory Search WORD
|
|
PMAPS MemorySearch_BYTE(BYTE, PMAPS); // Memory Search BYTE
|
|
PMAPS MemorySearch_QWORD(QWORD, PMAPS); // Memory Search QWORD
|
|
|
|
void MemoryOffset(char *, long int, int ); // search offset
|
|
PMAPS MemoryOffset_DWORD(DWORD , long int, PMAPS); // search offset DWORD
|
|
PMAPS MemoryOffset_FLOAT(FLOAT , long int, PMAPS); // search offset FLOAT
|
|
PMAPS MemoryOffset_DOUBLE(DOUBLE , long int , PMAPS); // search offset DOUBLE
|
|
PMAPS MemoryOffset_WORD(WORD , long int , PMAPS); // search offset WORD
|
|
PMAPS MemoryOffset_BYTE(BYTE , long int , PMAPS); // search offset BYTE
|
|
PMAPS MemoryOffset_QWORD(QWORD , long int, PMAPS); // search offset QWORD
|
|
|
|
void RangeMemoryOffset(char *, char *, long int, int); // range offset
|
|
PMAPS RangeMemoryOffset_DWORD(DWORD, DWORD , long int, PMAPS); // range offset DWORD
|
|
PMAPS RangeMemoryOffset_FLOAT(FLOAT , FLOAT, long int , PMAPS); // range offset FLOAT
|
|
PMAPS RangeMemoryOffset_DOUBLE(DOUBLE, DOUBLE, long int, PMAPS); // range offset DOUBLE
|
|
PMAPS RangeMemoryOffset_WORD(WORD, WORD, long int, PMAPS); // range offset WORD
|
|
PMAPS RangeMemoryOffset_BYTE(BYTE, BYTE, long int, PMAPS); // range offset BYTE
|
|
PMAPS RangeMemoryOffset_QWORD(QWORD, QWORD, long int, PMAPS); // range offset QWORD
|
|
|
|
void MemoryWrite(char *, long int, int); // memory write
|
|
int MemoryWrite_DWORD(DWORD, PMAPS, long int); // memory write DWORD
|
|
int MemoryWrite_FLOAT(FLOAT, PMAPS, long int); // memory write FLOAT
|
|
int MemoryWrite_DOUBLE(DOUBLE, PMAPS, long int); // memory write DOUBLE
|
|
int MemoryWrite_WORD(WORD, PMAPS, long int); // memory write WORD
|
|
int MemoryWrite_BYTE(BYTE, PMAPS, long int); // memory write BYTE
|
|
int MemoryWrite_QWORD(QWORD, PMAPS, long int); // memory write QWORD
|
|
|
|
|
|
int WriteAddress(long int, char *, int); // Modify the value in the address
|
|
int WriteAddress_DWORD(ADDRESS, DWORD);
|
|
int WriteAddress_FLOAT(ADDRESS, FLOAT);
|
|
int WriteAddress_DOUBLE(ADDRESS, DOUBLE);
|
|
int WriteAddress_WORD(ADDRESS, WORD);
|
|
int WriteAddress_BYTE(ADDRESS, BYTE);
|
|
int WriteAddress_QWORD(ADDRESS, QWORD);
|
|
|
|
void PrintResults(); // Print the contents of Res
|
|
void ClearResults(); // Clear the linked list and free up space
|
|
void ClearMaps(PMAPS); // Clear maps
|
|
int GetResultCount(); //Get the number of search results
|
|
|
|
int isapkinstalled(char *); // Check if the app is installed
|
|
int isapkrunning(char *); // Check if the app is running
|
|
int killprocess(char *); // kill the process
|
|
char GetProcessState(char *); // Get process state
|
|
int killGG(); // kill the gg modifier
|
|
int killXs(); // kill xs
|
|
int uninstallapk(char *); // silently remove software
|
|
int installapk(char *); // silently uninstall the software
|
|
int rebootsystem(); // reboot the system (phone)
|
|
int PutDate(); // output system date
|
|
int GetDate(char *); // Get system time
|
|
|
|
PMAPS GetResults(); // Get the result, return the head pointer
|
|
int AddFreezeItem_All(char *, int , long int); // Freeze all results
|
|
int AddFreezeItem(long int , char *, int , long int); // add frozen data
|
|
int AddFreezeItem_DWORD(long int , char *); // DWORD
|
|
int AddFreezeItem_FLOAT(long int, char *); // FLOAT
|
|
int AddFreezeItem_DOUBLE(long int, char *); // DOUBLE
|
|
int AddFreezeItem_WORD(long int, char *); // WORD
|
|
int AddFreezeItem_BYTE(long int, char *); // BYTE
|
|
int AddFreezeItem_QWORD(long int, char *); // QWORD
|
|
|
|
int RemoveFreezeItem(long int); // clear fixed freeze data
|
|
int RemoveFreezeItem_All(); // clear all frozen data
|
|
int StartFreeze(); // start freezing
|
|
int StopFreeze(); // stop freezing
|
|
int SetFreezeDelay(long int); // set the freeze delay
|
|
int PrintFreezeItems(); // print the freeze list
|
|
|
|
char *GetAddressValue(ADDRESS,int);
|
|
DWORD GetAddressValue_DWORD(ADDRESS);
|
|
FLOAT GetAddressValue_FLOAT(ADDRESS);
|
|
DOUBLE GetAddressValue_DOUBLE(ADDRESS);
|
|
WORD GetAddressValue_WORD(ADDRESS);
|
|
BYTE GetAddressValue_BYTE(ADDRESS);
|
|
QWORD GetAddressValue_QWORD(ADDRESS);
|
|
|
|
char *getRightText(char *,char *,int);//Get the right text
|
|
bool getMask(long int ,char *);//Judgment mask
|
|
void MaskSearch(char *, int );//Mask search
|
|
|
|
bool snowpd(long int);
|
|
long int GetModuleBase(char *,char * ,int);
|
|
void FreezeThread();
|
|
};
|
|
|
|
|
|
|