| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1241 人关注过本帖
标题:有关进程的问题
只看楼主 加入收藏
svjh
Rank: 1
等 级:等待验证会员
帖 子:47
专家分:0
注 册:2007-11-27
收藏
 问题点数:0 回复次数:12 
有关进程的问题
我想知道除了修改文件名以外,
有没有办法可以让进程的名称显示为我自己特定的映象名称?

哪位来帮忙一下,谢谢~
搜索更多相关主题的帖子: 进程 
2008-06-21 22:51
svjh
Rank: 1
等 级:等待验证会员
帖 子:47
专家分:0
注 册:2007-11-27
收藏
得分:0 
怎么没人来一下呢....郁闷ing--
2008-06-21 23:15
svjh
Rank: 1
等 级:等待验证会员
帖 子:47
专家分:0
注 册:2007-11-27
收藏
得分:0 
郁闷啊,第二天喇,连个路人甲都没有呢......
要急死人呐~呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜
2008-06-22 17:11
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
修改进程名称?我没有听说过这种玩法。
但是你用一个Hook来钩住Process32Next函数倒,然后修改指定的进程名称
倒是可以办到。不过工程量超大,作为新手我还是建议你放弃吧,这个没什么好玩的。多学学基础才是正道!!

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-06-22 17:35
missiyou
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:531
专家分:218
注 册:2007-10-9
收藏
得分:0 
也可以,通过。列表控件,获得句柄,改下名字,还可hook,一些显示函数。在深就是,pe不知道能不能改,但是通过pe能改程序内容。说起容易,做起难呀
2008-06-22 21:49
missiyou
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:531
专家分:218
注 册:2007-10-9
收藏
得分:0 
什么意思呀,你少在这里做广告。做广告也注意,不要对人进行人生攻击。做不做出来。你说了算吗。不是我说句狂话,你也只是一个什么都不懂的家伙。到处乱发一些垃圾信息。真是替那些上你当的人悲哀一分钟
2008-07-04 08:57
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
= =开始吵架了……

当然做得出来,hook是正道,不过人家告诉你工程量大了……应该至少需要写一个独立dll的……

PS to飞燕:这个是需要基础,可惜不是算法基础……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-07-04 09:33
ss2000564
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-6-26
收藏
得分:0 
123
不知道木马制作者怎么修改进程得
2008-07-04 09:57
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
收藏
得分:0 
这个应该在黑客论坛里面讨论的。额

Murphy's Law :
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
2008-07-04 11:10
missiyou
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:531
专家分:218
注 册:2007-10-9
收藏
得分:0 
标 题: 【原创】扫盲之Api Hook 细析(一)
作 者: YockW
时 间: 2008-06-06,16:16
链 接: http://bbs.

//Author:Alex(Yock.W)
//转载请署名出处

//针对一些初学者扫盲,牛人就不用看了。希望别笑话……

前言 基础知识

本系列文章会对常用的几种API HOOK方法进行全面的分析。

Hook是什么?

钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。

钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

Hook原理

每个Hook都有一个关联的链表,由系统维护,链表指针指向被Hook子程调用的回调函数:

LRESULT WINAPI HookCallBack(
int nCode,
WPARAM wParam,
LPARAM lParam);
nCode 事件代码
wParam 消息的类型
lParam 包含的消息

当被Hook的类型关联的消息发生时,系统会把这个消息传递到链表指针指向的Hook子程,由子程内部对消息进行处理,。

钩子安装与卸载

使用Windows提供的API SetWindowsHookEx来将Hook子程指针安装到Hook链表,安装的Hook子程始终在Hook链表头部。

HHOOK SetWindowsHookEx(
int idHook,
HOOKPROC lpfn,
HINSTANCE hMod,
DWORD dwThreadId);
idHook 安装的钩子类型
lpfn 子程函数指针
hMod 应用程序实例的句柄
dwThreadId Hook关联的线程标识符

当被Hook的消息类型发生时,系统会调用与这个Hook关联的链表头的Hook子程。由子程序决定是否要把这个事件传递给下个子程。Hook子程传递事件给下一个Hook子程需要调用使用Windows提供的API CallNextHookEx。

LRESULT CallNextHookEx(
HHOOK hhk,
int nCode,
WPARAM wParam,
LPARAM lParam);
hhk 当前钩子的句柄,由SetWindowsHookEx返回
nCode 事件代码
wParam 消息的类型
lParam 包含的消息

钩子在使用完,需调用UnHookWindowsHookEx来卸载。

UnHookWindowsHookEx(
HHOOK hhk);
Api Hook 的几种方法

一.修改函数过程映射的地址空间

Api Hook:

我们都知道,在调用函数的时候,会先Call 0xFFFFFF,来到函数映射在内存的地址空间里,这时候,传入的参数已入栈,那么,我们只需要修改函数头部,跳转到我们自定义的过程,这样,我们就达到了对API函数监视的目的。那么,我们需要多大的空间来写入代码让其跳转到我们自定义的过程里呢?

聪明的你肯定已经想到了。没错,只需5字节即可。Why? 看一下代码:

jmp 0xFFFFFFFF
jmp 指令占1字节,地址是4字节,所以,只需5字节即可。

有的看官可能会问了,为什么不用Call呢?

因为Call指令在实现跳转以后会通过ret返回到Call下面的指令继续执行,而Jmp指令实现跳转以后则全有子程来控制了。

我们知道了通过以上方法来修改函数头部数据来达到我们的目的,那么,我们先要得到指向函数头部的地址,通过LoadLibrary和GetProcAddress即可获取到我们要监视的函数在内存中映射的地址指针。我们以MessageBoxA为例:

typedef int (__stdcall *TMessageBoxA)(HWND hWnd,LPSTR lpText,LPSTR lpCaption,int uType);

extern "C" TMessageBoxA __fastcall GetPFuncAddr(LPSTR DllName,const char* FullName);

TMessageBoxA __fastcall GetPFuncAddr(LPSTR DllName,const char* FullName)
{
void *DllModule;
DllModule = LoadLibrary(DllName);
TMessageBoxA PAddr = (TMessageBoxA)GetProcAddress(DllModule,FullName);
return PAddr;
}
在得到了指向内存映射里函数头部的指针以后,我们下一步,来读出函数头部的5字节。为什么要读出函数头部的5字节呢?呵呵,当然是留作恢复时写会数据了。ReadProcessMemory:

BOOL ReadProcessMemory(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
DWORD nSize,
LPDWORD lpNumberOfBytesRead);
hProcess 进程句柄
lpBaseAddress 读内存开始地址
lpBuffer 保存数据的指针
nSize 数据大小
lpNumberOfBytesRead //address of number of bytes read

BYTE *pFuncData = new BYTE[4];
LPDWORD iRead;

ReadProcessMemory((void *)GetCurrentProcess(),PMessageBoxA,pFuncData,5,iRead);

保存原函数入口点的数据以后,嘿嘿,当然是写入指向我们自己的函数地址了。

BYTE AsmCode[4];

AsmCode[0] = 0xE9;
__asm
{
lea eax, MyMessageBoxA
mov ebx,PMessageBoxA
sub eax,ebx
sub eax,5
mov dword ptr[AsmCode+1],eax
}
WriteProcessMemory((void *)GetCurrentProcess(),PMessageBoxA,AsmCode,5,iWrite);

MyMessageBoxA是我们自己构造的函数:

int WINAPI MyMessageBoxA(HWND hWnd,LPSTR lpText,LPSTR lpCaption,int uType)
{
//我们来弹出一个消息框,改变一下传入的标题参数值
//那么首要做的,就是先恢复MessageBoxA
WriteProcessMemory((void *)GetCurrentProcess(),PMessageBoxA,pFuncData,5,iWrite);
int Result = MessageBoxA(hWnd,lpText,"ApiHook Test",uType);
WriteProcessMemory((void *)GetCurrentProcess(),PMessageBoxA,AsmCode,5,iWrite);
return Result;
}
恢复API的原入口处数据:

WriteProcessMemory((void *)GetCurrentProcess(),PMessageBoxA,pFuncData,5,iWrite);
防止修改函数入口数据来进行API HOOK的方法:

在程序启动的时候保存关键API入口的5字节,定期检查一次,发现被修改了,改回即可。

----------------------------------------------------------------

下一篇中,会针对SEH技术实现API HOOK和如何防止SEH APIHOOK进行详解。

扫盲到此结束。
2008-07-05 22:20
快速回复:有关进程的问题
数据加载中...
 
   



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

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