进程通信联系
概要
最终效果
-
创建进程通信

-
通信测试

-
IATHOOK 剪切板内容

-
inlineHook 创建进程

文章分如下几部分
- 步骤
- 进程通信
- dll注入
- 问题总结
本篇文章不是一个实现过程, 而是一个关于这个项目的一个总结, 包含了比较多外链, 帮助更好的理解.
步骤
- 实现进程通信
- 无模块注入dll
- hook
进程通信
为什么要进程通信
比较明显的一个作用是, 能够分工工作, 那多线程不是也可以做吗? 但是多线程都在同一个空间, 容易造成异常, 进程隔离后使不同的工作能够不影响, 最典型的例子就是浏览器: Chrome为什么使用多进程, 再给出一个多线程, 多进程的例子, 第二个例子很纠结放不放, 随便看看吧, 依然困惑也没关系(我就是…), 没关系下面的具体应用让你恍然大悟.
如果是这些, 课程为什么这样设置, 海哥为啥让做呢…
如果你对外挂有一点了解, 就知道现在的网络游戏都有驱动防护也就是R0, 内核级. 这就导致了我们没法在R3进行常规的读写申请释放内存(WriteProcessMemory, ReadProcessMemory, Allocate…), 这个时候就需要编写相应的过保护程序(当然是R0层的).
现在假设我们过掉了保护, 可以在R0对游戏进行读写了. 画方框为例(方块透视), 在R0读到人物坐标, R3实现绘制. 换为自瞄就是R0读坐标, R3控制鼠标.(你要非说全在R0实现这些操作, 那无话可说了…)
R0 R3分别对应驱动程序和普通应用程序, 这里就是内核和用户层的进程通信了.
以方块透视来说, 我们希望人物实时的显示在屏幕, 而不是读出了人物坐标, 一两秒才更新, 总是滞后于实际人物位置. 也就引出进程通信最最重要的功能, 速度…
所以才会有这么多通信方式, 当然能搜到的常用方式就不用想着能用在现在的辅助上了.
这里就不过多引申, 毕竟我们只是了解, 实际应用还是靠自己去发掘了.
本文就用练习要求的命名管道.
命名管道
这个基本就是面向api编程, 其中比较难理解的是PIPE_TYPE, 有字节和消息两个类型.
就不拾人牙慧了, 给出两个网址 以及一个demo
代码有点多且没啥意思, 但不加又有违标题哈哈, 希望csdn能支持代码折叠…
点此跳过代码
https://www.cnblogs.com/lizhanzhe/p/10966253.html 命名管道的基本使用
http://blog.sina.com.cn/s/blog_71b3a9690100usem.html 命名管道的延伸, 以及传递方式
demo
Server
class HandleGatewayServer {
public:
int Init();
int Gateway();
BOOL AnswerMsg();
protected:
BOOL m_clientConnected = FALSE;
DWORD m_threadId = 0;
HANDLE m_pipeHandle = INVALID_HANDLE_VALUE;
LPTSTR m_lpszPipename = (LPTSTR)TEXT("\\\\.\\pipe\\mynamedpipe");
};
int HandleGatewayServer::Init()
{
while (1) {
m_pipeHandle = CreateNamedPipe(m_lpszPipename, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, MAXPIPEFILESIZE, MAXPIPEFILESIZE, 0, NULL);
printf(">>>管道建立成功, 等待客户端.\n");
if (m_pipeHandle == INVALID_HANDLE_VALUE) {
printf(">>>>>管道建立失败, LastError: %d\n", (DWORD)GetLastError());
return -1;
}
//等待客户端连接, 如果成功, 返回非零值, 否则GetLastError返回ERROR_PIP_CONNECTED
m_clientConnected = ConnectNamedPipe(m_pipeHandle, NULL);
if (m_clientConnected) {
printf(">>>客户端已连接, 建立网关\n");
if (HandleGatewayServer::Gateway() == ERROR_BROKEN_PIPE)
return -1;
}

本文是关于项目的总结,涉及进程通信和dll无模块注入。阐述了进程通信的原因、使用命名管道的方式,介绍了dll无模块注入中采用shellcode启动的方法,包括shellcode生成、模块注入的细节,最后总结学习成果并提及hook部分因安全问题需实践体会。
最低0.47元/天 解锁文章
206

被折叠的 条评论
为什么被折叠?



