转自:http://hi.baidu.com/1000in1/item/7c27992427b494949c63d153

这两个工具都是通过修改进程内存的方式来实现的。

简单点说就是调试进程。java 写的界面调用native c 写调试程序。

这里简单抛块转。程序运行需要获取ROOT权限的方法网上很多,可以搜索一下。

通过

activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        procList = activityManager.getRunningAppProcesses();

得到当前运行的应用PID。

通过分析/proc/[pid]/maps文件,得到下面的地址(一般内存分配都在这里进行)

开始        - 结束         可读写

4267f000-42864000 rw-p 00001000 00:04 760        /dev/ashmem/dalvik-LinearAlloc(deleted)

Runtime.getRuntime().exec(“tt”);

运行TT程序(tt需要参数)。

通过tt程序获取内存内容(snapshot),保存成文件。分析文件就比较简单了。找到所有符合你搜索的数据,将地址保存建表。

然后回到游戏,等待数据变化后重复上面的过程,通过保存的上次的地址,进行进一步搜索,直到确认正确地址后,修改这个地址内容即可。

tt程序需要ROOT权限运行

tt程序用ndk编译

Android.mk 编译脚本

==================================================

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
main.c

LOCAL_LDLIBS :=

LOCAL_MODULE:= tt

include $(BUILD_EXECUTABLE)

include $(call all-makefiles-under,$(LOCAL_PATH))

======================================================================

附tt的源代码:

mian.c

===================================================================================

#include <asm/page.h>
#include <sys/mman.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/ptrace.h>
#include <errno.h>
#include <stdlib.h>

#define TRACE(o,p) printf(o,p)

void change_process_mem(int pid ,long offset,long value)
{

ptrace(PTRACE_ATTACH, pid, NULL, NULL);
    waitpid(pid, NULL, 0);
   
    ptrace(PTRACE_POKEDATA, pid,(void *)offset, (void *)value);

ptrace(PTRACE_DETACH, pid, NULL, NULL);
    waitpid(pid, NULL, 0);

}

void process_mem_snapshot(int pid,long offset,long size,char* memfilename)
{
    long i=0;
    FILE* out;
    ptrace(PTRACE_ATTACH, pid, NULL, NULL);
    waitpid(pid, NULL, 0);
    out = fopen(memfilename,"wb+");

for(i=offset;i<offset+size;i+=4)
    {
        long r = ptrace(PTRACE_PEEKDATA, pid,(void *)i, NULL);
        fwrite((char*)&r,4,1,out);
    }

fclose(out);
   
    ptrace(PTRACE_DETACH, pid, NULL, NULL);
    waitpid(pid, NULL, 0);
}

int printf_help(int argc, char *argv[])
{

if ((argc<5)||(argv[1][0]=='s'&&argv[1][1]==0&&argc<6))
    {
        printf("\r\n\r\n"
            "Usage:\ttt <sm> pid offset size <FILE>\r\n\r\n"
            "\ttt s 1000 10000 1222 \"/sdcard/temp\"\r\n"
            "\ttt m 1000 20000 1234\r\n");

return 0;
    }
    return 1;
}

int main_s(int argc, char *argv[])
{
    int pid;
    long offset;
    long size;
    char* memfilename;

pid = atoi(argv[2]);
    offset = atol(argv[3]);
    size = atol(argv[4]);
    memfilename = argv[5];
    process_mem_snapshot(pid,offset, size,memfilename);
   
    return 0;
}

int main_m(int argc, char *argv[])
{
    int pid;
    long offset;
    long value;
   
    pid = atoi(argv[2]);
    offset = atol(argv[3]);
    value = atol(argv[4]);
    change_process_mem(pid , offset, value);
    return 0;
}

void main(int argc, char *argv[])

    int pid = 0;
 
    if (!printf_help(argc,argv))
    {
        return;
    }

if (argv[1][0]=='s'&&argv[1][1]==0)
    {
         main_s(argc,argv);
         return;
    }

if (argv[1][0]=='m'&&argv[1][1]==0)
    {
         main_m(argc,argv);
        return;
    }
   
    return ;
}

为尊重作者,转帖请注明出处,谢谢

八门神器gameKiller和游戏金手指gamecih简单原理分析相关推荐

  1. 安卓游戏修改器-八门神器 GameKiller 2.31

    八门神器是一个Android平台的游戏修改器,该软件通过修改正在运行的游戏的内存数据,可以非常方便地修改游戏的HP.MP.生命数等等参数.比较类似于PC平台的整人专家(FPE)及金山游侠等游戏修改器, ...

  2. 八门大神可以修改服务器游戏吗,八门神器怎么修改游戏 修改游戏完美教程

    八门神器是一款非常专业的手游修改器,那么今天我们来讲讲这个八门助手怎么修改游戏数据,下面通过这篇文章给大家介绍一下. 1. 网游不能修改!网游不能修改!像什么王者荣耀.吃鸡都是不支持修改功能的! 2. ...

  3. 游戏排行榜-跳表实现原理分析

    前言 做游戏的一般都有游戏排行榜的需求,要查一下某个uid的积分排名第几,这里我给大家推荐之前我们使用的一种排序算法,跳表skiplist. 跳表是一个随机化的数据结构.它允许快速查询一个有序连续元素 ...

  4. Android逆向之八门神器原理解析(主要分析其修改内存原理)

    实现dump出指定进程的内存文件 进阶 进程注入 参考教程:Android注入完全剖析 问题解决 1.执行memdump时报错:error: only position independent exe ...

  5. FC金手指代码大全·持续更新-亲测可用-FC 经典游戏完整可用的金手指大全---持续更新,偶尔玩玩经典回味无穷,小时候不能通关的现在通通通关一遍

    FC 经典游戏完整可用的金手指大全-持续更新,偶尔玩玩经典回味无穷,小时候不能通关的现在通通通关一遍 2021年5月11日更新: 每次翻金手指一些垃圾小网站标题党吸引进去吓一大堆木马什么也没有,什么x ...

  6. COCOS2D-X 单机游戏防八门神器修改数据

    游戏辛辛苦苦的做完了,但是使用八门神器可以轻松的修改你的重要数据(金币,道具数量),哈哈哈,那么恭喜您,您挣不到一分钱!说的有点危言耸听了,毕竟知道八门神器这个工具的不是非常多,而且使用条件比较苛刻, ...

  7. Cocos2d-x 单机游戏防八门神器修改数据

    这篇文章的前提是单机游戏,网络游戏有自己的加密方法,与单机游戏不尽相同! 游戏辛辛苦苦的做完了,但是使用八门神器可以轻松的修改你的重要数据(金币,道具数量),哈哈哈,那么恭喜您,您挣不到一分钱!说的有 ...

  8. Cocos2d-x单机游戏防八门神器修改数据

    来源:http://cocos2d.9tech.cn/news/2014/0212/39812.html 网上的cocos2d-x教程多为知识点的讲解,但我们学习cocos2d-x的目的是为了什么?为 ...

  9. c语言精灵宝可梦对战游戏,精灵宝可梦究极日月模拟器金手指代码大全

    <精灵宝可梦究极日月>终于迎来了它的发售,相信许多玩家对于这款游戏的素质还是不用怀疑的吧.不过由于游戏的内容实在是太过丰富,许多玩家表示在游戏中许多要素都没法体验尽兴,以下就给大家分享具体 ...

最新文章

  1. Web登录很简单?开玩笑!
  2. Transformers2.0让你三行代码调用语言模型,兼容TF2.0和PyTorch
  3. mysql mof_mof提权
  4. IT兄弟连 JavaWeb教程 MVC设计模式
  5. android扩散波动动画,使用WebGL制作图片的像素脉冲波(粒子化扩散波动)动画特效...
  6. datatable.js 服务端分页+fixColumns列固定
  7. 数据结构c语言版第四章题库,数据结构(C语言版)(第4版)习题
  8. 2007标注没有文字_Hi,siri,你的商标注册了吗
  9. Android基础 --- Widget
  10. Linux 邮件服务器 之跟我一步一步来实现一个邮件系统
  11. 【HDU 5251】矩形面积【凸包 最小矩形覆盖】
  12. 数据结构与算法 php pdf,数据结构与算法之美(完结)云盘分享_IT教程网
  13. paraview远程模式
  14. 中国移动和路由AP218刷机后桥接网络和配置无线打印教程
  15. 1336:【例3-1】找树根和child
  16. 当我们放弃时,我们想些什么
  17. 双人联机五子棋html代码,双人联机聊天或五子棋游戏设计【高手请进】
  18. Eclipse 提示内存不足
  19. 上传图片就能建模?!一个人人可用的在线三维大场景重建云平台
  20. 管程法解决生产者消费者问题

热门文章

  1. 不同数量的玫瑰花代表的意思
  2. 重装Ubuntu 20.04第一次重启,开机页面卡住
  3. 小白入门Web测试方法总结
  4. python 读docx文件 报错 docx.opc.exceptions.PackageNotFoundError: Package not found at
  5. C语言学习笔记08-2素数判断专题篇
  6. 一篇值得收藏的ML数据预处理原理与实践文章
  7. 解密Kotlin 1.6.20 新功能 Context Receivers
  8. 新手提问 为什么我使用pycharm无法打开设置选项
  9. 使用ganymed工具调用ssh2
  10. 用python画名字组成的爱心_520用Python画一颗特别的爱心送给她