| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2363 人关注过本帖
标题:如果使用一个程序去执行另外一个程序的函数
只看楼主 加入收藏
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
至于动态库挂钩 函数替换 源码我有! 当时函数替换仅仅当进程执行该函数时才会被替换,并不主动调用函数,你需要调用该函数,不是为了实现某一功能或者数据的操作么,为什么不尝试着将该函数的功能实现,或者用一段汇编码跳转呢,不就是多个线程么。
2010-07-31 15:05
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
以下是引用hahayezhe在2010-7-31 15:03:04的发言:

void testFunc(int i, int j);是你自己写的?有源码没,还是你已经知道函数名了,
用ollyDBG或者IDA你可以知道该函数的PE结构地址,也可以查看到该函数数据段的操作属性
比如只读,只写等
不是自己写的,是用OllyICE工具查得其结构的,我在这里是假设已经知道这样的结构了。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-07-31 15:06
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
以下是引用hahayezhe在2010-7-31 15:05:57的发言:

至于动态库挂钩 函数替换 源码我有! 当时函数替换仅仅当进程执行该函数时才会被替换,并不主动调用函数,你需要调用该函数,不是为了实现某一功能或者数据的操作么,为什么不尝试着将该函数的功能实现,或者用一段汇编码跳转呢,不就是多个线程么。
比如游戏里的喝血功能,应该会有那么一个函数
void 喝血(int 补血药物);
如果可以主动调用这个函数那么就实现了自动喝血功能。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-07-31 15:11
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:14 
有源码当然好,关键是经常没有源码给你看的。 只能自己去调试分析。找出来的大部分都是功能CALL。
楼主啥时候完成了,共享一下好不

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2010-07-31 16:22
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
以下是引用你们都要疼我哦在2010-7-31 16:22:13的发言:

有源码当然好,关键是经常没有源码给你看的。 只能自己去调试分析。找出来的大部分都是功能CALL。
楼主啥时候完成了,共享一下好不
呵呵。。。我完成了就肯定有笔记了,到时肯定会放出与大家共享,不过也请大家多多指点。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-07-31 16:41
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
如果单单是喝血功能 完全没有必要调用什么函数

函数的调用无非就是对变量存储的值的改变

用OD跟踪 或者用CE直接找出变量

在自己的进程里不断的判断血量,直接去改变 血量存储的内存数据不就行了吗?

或者将血量设为定值,将受到伤害减少血量的代码直接删掉,跳转,屏蔽,修改不也都行么

调用喝血函数你还不是得照样自己传参数给增加血量的值的函数(药瓶变量)

为何不直接加血呢 游戏修改推荐Cheat Engine 或者用WinHex直接改页文件的数据
2010-07-31 17:03
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
再说的更啰嗦点
如果该人物结构是动态创建,那么我们不需要去找出变量,不管那个人物对象都会有以下判断
血量减少 必然是, 血量 = 当前血量-当前受到的伤害, 用OD或者CE找出这条指令,修改血量 = 当前血量 - 0;
将伤害变量用0代替,血都不动了 还需要加血么?
查看修改的机器码(OD), 直接用WinHex修改文件数据,都不需要什么动态库,
如果不想改变程序的结构用代码实现,那么该程序运行,肯定会读取文件,随便在ReadFile CreateFile(注意A码和U码)里调用修改那段内存指令就可以了。
BOOL MyCharClass::CharMemoryChage(char *p,BYTE *p1,int i){
    if(*p == NULL || p1 == NULL || i == 0){
        TRACE("*p *p1 i is error");
        return 0;
    }
    DWORD lpfoldprotect;
    BOOL err = VirtualProtect((PVOID)p1,i,PAGE_EXECUTE_READWRITE,&lpfoldprotect);
    if(err == 0){
        TRACE("change Memory is error");
        return 0;
    }
    memcpy(p1,p,i);
    DWORD lpfoldprotect1;
    VirtualProtect((PVOID)p1,i,lpfoldprotect,&lpfoldprotect1);
    return 1;
}
看上面代码,在程序运行期间修改一段内存数据 达到修改一条指令的目的
2010-07-31 17:19
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
以下是引用hahayezhe在2010-7-31 17:19:14的发言:

再说的更啰嗦点
如果该人物结构是动态创建,那么我们不需要去找出变量,不管那个人物对象都会有以下判断
血量减少 必然是, 血量 = 当前血量-当前受到的伤害, 用OD或者CE找出这条指令,修改血量 = 当前血量 - 0;
将伤害变量用0代替,血都不动了 还需要加血么?
查看修改的机器码(OD), 直接用WinHex修改文件数据,都不需要什么动态库,
如果不想改变程序的结构用代码实现,那么该程序运行,肯定会读取文件,随便在ReadFile CreateFile(注意A码和U码)里调用修改那段内存指令就可以了。
BOOL MyCharClass::CharMemoryChage(char *p,BYTE *p1,int i){
    if(*p == NULL || p1 == NULL || i == 0){
        TRACE("*p *p1 i is error");
        return 0;
    }
    DWORD lpfoldprotect;
    BOOL err = VirtualProtect((PVOID)p1,i,PAGE_EXECUTE_READWRITE,&lpfoldprotect);
    if(err == 0){
        TRACE("change Memory is error");
        return 0;
    }
    memcpy(p1,p,i);
    DWORD lpfoldprotect1;
    VirtualProtect((PVOID)p1,i,lpfoldprotect,&lpfoldprotect1);
    return 1;
}
看上面代码,在程序运行期间修改一段内存数据 达到修改一条指令的目的
呵呵。。。不是喝血这个问题,我是打个比喻的,如果我是要移动人物到某个地方呢,显然改变量就不得了。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-07-31 18:20
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:0 
要是都这么简单,那还了得,又不是玩单机游戏。
有源码要找函数,没源码要找调用的CALL,直接找地址改变量是N世纪以前的
超简单的单机游戏的方法

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2010-07-31 20:01
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
谁有这方面比较系统的一些资料呢?

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-07-31 20:53
快速回复:如果使用一个程序去执行另外一个程序的函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.098482 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved