郁金香外挂技术-郁金香灬老师

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

郁金香终身VIP管理员QQ150330575项目合作(有实力的+)视频教程+每月更新+QQ群
飞郁视频分享(每周更新)
查看: 3358|回复: 8

VC++外挂界面的最详细的制作过程

  [复制链接]
发表于 2015-7-30 17:34:05 | 显示全部楼层 |阅读模式
外挂界面的过程(重点哈,虽然这个再加上找CALL,写CALL,基本上就可以用了,但最好还是自己写几遍,把知识学到手才行):
第一步:写一个名为GameDll.dll的动态连接库,并把它注入到指定窗口标题的进程当中去;
(1) 建MFC DLL工程  
打开VC6.0,建立新工程 ->创建MFC(dll),文件名为
GameDll,选择 Regular DLL using shared mfc DLL ,点OK;
(2) 在左侧列表框里找到GameDll.cpp,双击进入,在最后面空白处编辑:输入一下代码
//GameDll.cpp最尾部创建回调函数KeyboardProc
LRESULT CALLBACK KeyboardProc(
  int code,       // hook code
  WPARAM wParam,  // 实际的按键代码=VK_12 VK_HOME
  LPARAM lParam   // 31位为0的,则表示被按下,用(lParam&(1<<31)==0)来表达
)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());//函数首部添加AFX的宏,防止一些不可预料错误的发生
    //(下面这行一定要一整行,不知道为什么,我分行后编译能通过,但是不能呼出外挂,你们有兴趣可以分行试下)
     if (gameform==NULL) { gameform=new CWGForm;gameform->Create(IDD_DIALOG_MAIN);}//分配一块内存,创建主对话框
     else {gameform->ShowWindow(gameform->IsWindowVisible() ? SW_HIDE : SW_SHOW); } //根据当前呼出窗口的状态来显示或隐藏呼出窗口(参看论坛淡水小C的代码加的这行)
   return CallNextHookEx(0,code,wParam,lParam);
}
#define GameCaption "GameTest"  //预编译窗口标题,GameTest就是您要注入DLL的窗口标题,到时候修改这里就可以了
/////安装勾子的函数
void SetHook()    //SetHook在GameDll.def里面套出后在能使用
{AFX_MANAGE_STATE(AfxGetStaticModuleState());//函数首部添加AFX的宏,防止一些不可预料错误的发生
    //获取游戏主线程ID
//FindWindow
HWND gameh=FindWindow(NULL,GameCaption);
if (gameh==0){AfxMessageBox("未找到游戏");}//加入是否找到游戏窗口的判断,可以不要
//GetWindowThreadProcessId
DWORD tid=::GetWindowThreadProcessId(gameh,NULL);
::SetWindowsHookEx(WH_KEYBOARD,&KeyboardProc,::GetModuleHandle("GameDll.dll"),tid);
}
///编译好之后建一个MFC的基本对话框调用GameDll.dll
(3)新建一个MFC(exe)的基本对话框,名为Gamewg,点OK->在基本对话框里添加一个按钮->按钮上右键更改ID为IDC_BUTTON_SetHook,更改Caption为安装函数,双击刚才添加的按钮进入编辑:
__declspec( dllimport ) void SetHook(); //声明SetHook()函数
#pragma   comment(lib,"GameDll.lib")    //加入lib库的链接,并把“GameDll.dll,GameDll.lib”2个文件拷入Gamewg文件的根目录
void CGamewgDlg::OnBUTTONSetHook()  
{
// TODO: Add your control notification handler code here
//调用GameDll.dll里的SetHook()
SetHook();
}
//发布,并把Release目录下的Gamewg.exe复制到GameDll\Release和GameDll\Debug文件夹下面,接着打开GameDll.dsw
//打开GameDll.dsw后先编译一次,一般会弹出对话框,要求输入Gamewg.exe的路径,如果有错误的话,在点击Project->Setting->Debug里面的第一个编辑框里重新设置一下Gamewg.exe的路径就好了
(4).插入资源-->选DiaLog(更改窗口ID为IDD_DIALOG_MAIN)-->双击新建的DiaLog窗口,给DiaLog创建新类,名为CWGForm-->在GameDll.cpp的头部包含头文件"WGForm.h",创建指针类型的类变量CWGForm *gameform;
if ((wParam==VK_HOME)&&(lParam&(1<<31)==0))  
{
AfxMessageBox("按下HOME键");//测试用,可删除
if (gameform==NULL){gameform=new CWGForm;            //分配内存大小
                 gameform->Create(IDD_DIALOG_MAIN);//创建类窗口}
gameform->ShowWindow(true);//显示类的窗口
}

(5)///退出时清空内存
     在头文件GameDll.h中定义清空内存函数:int ExitInstance();//表示动态链接库退出的时候的动作
     在GameDll.cpp中构建ExitInstance函数
      int CGameDllApp::ExitInstance()
      {
         delete gameform;//释放相应的内存空间
         gameform=NULL;
         return CWinApp::ExitInstance();//WinApp基类函数
      }

//编译一下,随便找个程序,把在源码中把那个程序的窗口标题找出来,把文中的GameTest替换掉,是不是按HOME键可以呼出一个界面了


第二步:给上步中简单的界面添加TAB控件;
//打开GameDll.dsw,给基本对话框添加TAB控件按钮
//右键TAB控件按钮,选择Properties,修改ID为IDC_TABMAIN
//右键TAB控件按钮->ClassWizard---->Member  variables---->Add variables-->第一行m_tabmain,第二行control,第三行ctabctrl, 点OK(给TAB控件一个变量m_tabmain)
//右键主窗口(除右键TAB控件按钮的其他地方)-->Events--->选择WM_InitDialog(初始化窗口)--双击WM_InitDialog进入编辑--输入:  
m_tabmain.InsertItem(0,"CALL测试");//创建名为“CALL测试”的TAB控件标签
m_tabmain.InsertItem(1,"保护");/创建名为“保护”的TAB控件标签
m_tabmain.InsertItem(2,"技能");/创建名为“技能”的TAB控件标签
m_tabmain.InsertItem(3,"捡物");/创建名为“捡物”的TAB控件标签
m_tabmain.InsertItem(4,"组队");/创建名为“组队”的TAB控件标签
m_tabmain.InsertItem(5,"回城");/创建名为“回城”的TAB控件标签


回到基本对话框--插入资源--Dialog 6个---修改6个Dialog的ID分别为:
//设置每个页面属性:右键对应页面,选择Styles-->Border-->None
IDD_PAGE0
IDD_PAGE1
IDD_PAGE2
IDD_PAGE3
IDD_PAGE4
IDD_PAGE5


新创建头文件myVar--进入编译
CDialog page0;
CDialog page1;
CDialog page2;
CDialog page3;
CDialog page4;
CDialog page5;


//右键主窗口(除右键TAB控件按钮的其他地方)-->Events--->选择WM_InitDialog(初始化窗口)--双击WM_InitDialog进入编辑--输入:  
//最顶上输入#include "myVar.h",包含头文件myVar.h
//右键控件窗口--事件---选择WM_InitDialog(初始化窗口)--双击进入编辑--输入:
//创建页面窗口
page0.Create(IDD_PAGE0,GetDlgItem(IDC_TABMAIN));
page1.Create(IDD_PAGE1,GetDlgItem(IDC_TABMAIN));
page2.Create(IDD_PAGE2,GetDlgItem(IDC_TABMAIN));
page3.Create(IDD_PAGE3,GetDlgItem(IDC_TABMAIN));
page4.Create(IDD_PAGE4,GetDlgItem(IDC_TABMAIN));
page5.Create(IDD_PAGE5,GetDlgItem(IDC_TABMAIN));


//设置父窗口
page0.SetParent(GetDlgItem(IDC_TABMAIN));
page1.SetParent(GetDlgItem(IDC_TABMAIN));
page2.SetParent(GetDlgItem(IDC_TABMAIN));
page3.SetParent(GetDlgItem(IDC_TABMAIN));
page4.SetParent(GetDlgItem(IDC_TABMAIN));
page5.SetParent(GetDlgItem(IDC_TABMAIN));


//定义窗口的大小范围
   RECT r1;
    GetDlgItem(IDC_TABMAIN)->GetClientRect(&r1);
    r1.left=8;
    r1.top=28;
    r1.bottom-=2;
    r1.right-=2;


//设置窗口位置
page0.MoveWindow(&r1);
page1.MoveWindow(&r1);
page2.MoveWindow(&r1);
page3.MoveWindow(&r1);
page4.MoveWindow(&r1);
page5.MoveWindow(&r1);


//默认 page0
page0.ShowWindow(true);


//点击左侧目录Dialog下面的IDD_DIALOG_MAIN,双击TAB控件进入编辑:
//通过函数GetCurSel来获得当前鼠标所点击的选项卡
switch(m_tabmain.GetCurSel())
{
case 0:
{
page0.ShowWindow(true);//显示
page1.ShowWindow(false);
page2.ShowWindow(false);
page3.ShowWindow(false);
page4.ShowWindow(false);
page5.ShowWindow(false);
break;
}
case 1:
{
page0.ShowWindow(false);
page1.ShowWindow(true);//显示
page2.ShowWindow(false);
page3.ShowWindow(false);
page4.ShowWindow(false);
page5.ShowWindow(false);
break;
}
case 2:
{  
page0.ShowWindow(false);
page1.ShowWindow(false);
page2.ShowWindow(true);//显示
page3.ShowWindow(false);
page4.ShowWindow(false);
page5.ShowWindow(false);
break;
}
case 3:
{  
page0.ShowWindow(false);
page1.ShowWindow(false);
page2.ShowWindow(false);
page3.ShowWindow(true);//显示
page4.ShowWindow(false);
page5.ShowWindow(false);
break;
}
case 4:
{  
page0.ShowWindow(false);
page1.ShowWindow(false);
page2.ShowWindow(false);
page3.ShowWindow(false);
page4.ShowWindow(true);//显示
page5.ShowWindow(false);
break;
}
case 5:
{  
page0.ShowWindow(false);
page1.ShowWindow(false);
page2.ShowWindow(false);
page3.ShowWindow(false);
page4.ShowWindow(false);
page5.ShowWindow(true);//显示
break;
}
default:
{
break;
}
}

第三步:给上一步中新建的6个Dialog对话框添加类,双击对应窗口,新建类为CPAGE0,CPAGE1,CPAGE2,CPAGE3,CPAGE4,CPAGE5.
然后你就可以尽情的发挥想象力,在6个对话框中添加各种外挂的编辑框,按钮等等,在主对话框中添加开始挂机,停止挂机,保存设置等等啦,注意要关联好变量(最好是用记事本记录下来,免的弄错了),再然后就是找CALL,写CALL了。
好了,界面的制作过程就写到这里了,其实写好界面只不过是外挂当中最最简单,基础的东西,以后有时间的话我会继续把我的心得体会,以及制作过程详细的继续和大家分享。大家也可能有更好的方法一起来交流~





郁金香外挂教程,学习中...
回复

使用道具 举报

发表于 2015-7-31 19:27:21 | 显示全部楼层
学习
郁金香外挂教程,学习中...
回复

使用道具 举报

发表于 2015-8-15 07:33:35 | 显示全部楼层
看看啊挺好的啊学习一下子啊
郁金香外挂教程,学习中...
回复 支持 反对

使用道具 举报

发表于 2015-8-29 12:25:20 | 显示全部楼层
看看啊挺好的啊学习一下子啊
郁金香外挂教程,学习中...
回复 支持 反对

使用道具 举报

发表于 2016-1-17 14:39:19 | 显示全部楼层
学习
郁金香外挂教程,学习中...
回复

使用道具 举报

发表于 2016-4-14 17:46:13 | 显示全部楼层
好看&#128522;
郁金香外挂教程,学习中...
回复 支持 反对

使用道具 举报

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

本版积分规则

限时限量优惠

QQ|小黑屋|手机版|郁金香外挂技术-郁金香灬老师 ( 苏ICP备10059359号 )

GMT+8, 2020-7-4 03:17 , Processed in 0.040312 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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