| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2363 人关注过本帖
标题:如果使用一个程序去执行另外一个程序的函数
取消只看楼主 加入收藏
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
结帖率:78.95%
收藏
已结贴  问题点数:100 回复次数:24 
如果使用一个程序去执行另外一个程序的函数
比如有一个程序A,程序A有一个函数void testFunc(int i, int j),这个函数是当点击一个按钮就会执行的。
这个程序A是处于运行之中的,然后又开启另外一个程序B,用程序B使得程序A的testFunc函数执行,但不能用
任何的模拟方式对程序A的按钮进行模拟点击进行执行这个函数。
搜索更多相关主题的帖子: 函数 
2010-07-31 14:07
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
以下是引用Knocker在2010-7-31 14:25:56的发言:

嘿嘿,你想做什么?好奇怪的需求,用DLL不能解决问题?
呵呵。。。学习写后台外挂。

[ 本帖最后由 ioriliao 于 2010-7-31 14:59 编辑 ]

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

上次的问题解决了?
解决了一半,然后遇到这个问题了。

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

方法1:如果该函数为静态或者全局,或者其所属类名,域名,所在库,那么可以另外一个进程里直接调用就是了。
方法2:已知该函数的结构的话,可以自定义一个功能相同的函数替换,
方法3:用OD或者ADI找出该函数的入口地址,进行跳转。
方法4:调用该函数无非就是对数据的值进行读取,计算操作,如该数据为全局的,静态的那么找出地址,写进去,如为动态,局部的CE搜索变量改变位置,OD定位指令位置,修改或添加一段汇编指令都可以。
函数替换,动态库挂钩搜索apihijack.h或者app 可以下载到源码,直接调用,类似的有DInputHook等源码。

以上纯属YY,无代码无真相,纯为分而来。
这个大概知道点,就是不知道具体的方法与原理。

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

没看明白
程序代码:
程序A.exe
void testFunc(int x, int j);
int main(){
    return 0;
}
void testFunc(int x, int j){
     printf("%d%d",x,j);
}
  程序B.exe
   int main(){
       //在这里执行程序A的testFunc,执行后的结果是反映在程序A.exe上。
   }


/images/2011/147787/2011051411021524.jpg" border="0" />
2010-07-31 15:02
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
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
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
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.100344 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved