怎么用DELPHI或者VB写个网页游戏的外挂?
主要实现自动提交数据包的功能,网上找不到资料看。
我用WINSOCK EXPERT抓取我点击一个按钮后发送的数据包,然后用DELPHI写程序模拟出这个动作,就达到了代替人工点游戏的目的。
但是不知道怎么搜索资料,搜索过"delphi 发送数据包""delphi 提交数据包""delphi 提交表单"等等,都不行。
请高手赐教怎么才可以找到相关资料,或者直接给我提供相关资料,小弟感激不尽!!!!!!!!!!!!!

解决方案 »

  1.   

    综合楼主的问题,看来楼主离开发外挂的能力还有相当的差距。不要一开始就想着要修改数据包,可以先从鼠标和键盘操作入手。也就是用程序代替人为地发送鼠标或键盘事件。比如Kyebd_event\mouse_event之类的。对于修改封包,首先需要具备封包拦载、协议分析、封包分析、封包解密等等。
      

  2.   

    好像没什么资料。
    登录时识别验证码(解决不了就人工输入), 用IdHttp控件就可以Get/Post数据。还需要写一个html的解析器(用正则表达式等)来分析Get回来的文件信息。
      

  3.   

    网页游戏的外挂比较简单,就是http协议。
    给你一个登录163邮箱,提交用户名密码的例子:var
        Param: TStringList;
        ret: string;
    begin
      IdHttp1.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*';
      IdHttp1.Request.AcceptEncoding := 'gzip, deflate';
      IdHttp1.Request.AcceptLanguage := 'zh-cn';
      IdHttp1.Request.CacheControl := 'no-cache';
      IdHttp1.Request.Connection := 'Keep-Alive';
      IdHttp1.Request.ContentType := 'application/x-www-form-urlencoded';
      IdHttp1.Request.Host := 'reg.163.com';
      IdHttp1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)';
      IdHttp1.Request.Referer := 'https://reg.163.com/logins.jsp?url=http://fm163.163.com/coremail/fcg/ntesdoor2?lightweight=1&&';
      Param := TStringList.Create;
      Param.Add('url=http://fm163.163.com/coremail/fcg/ntesdoor2?lightweight=1');
      Param.Add('type=1');
      Param.Add('product=163');
      Param.Add('savelogin=');
      Param.Add('outfoxer=');
      Param.Add('username=liangqingzhi1984');
      Param.Add('password=******');
      UniCode2Gb(IdHttp1.Post('http://reg.163.com/logins.jsp', Param), ret);
      Memo1.Lines.Add(ret);
    end;
    UniCode2Gb 是在网上找到的转换函数。那些提交信息是用HttpWacth Pro 这个工具在登录163邮箱的时候监测到的。
    网页游戏外挂、论坛灌水机应该都是这样的原理,外挂还需要有cookies的处理。PS:玩了战神世界2近两年,虽然没有深入的研究过外挂,但csdn java版的大花猫用python写过一个,我曾经请教过他
      

  4.   

          liangqingzhi 离我的要求已经比较接近了,我需要的不是复杂游戏的需要分析鼠标动作,键盘动作的外挂功能,网页游戏只是网页上点点固定好的按钮的游戏,因此我只要抓好包以后,以后发送固定数据包就能模拟IE提交数据包动作,这样外挂的功能便达到了。
    谢谢楼上朋友赐教,不过还没有得到我想要的资料,大家有过见解的望不屑赐教,感激不尽。
      

  5.   

    按键精灵比较依靠坐标,稍微的变动就会导致使用不正常,我要完成后台也能运行,后台向指定服务器发送HTTP请求就能替代游戏操作。顶一下.
      

  6.   

    谁能提供详细的HTTP POST提交方法的也就可以了,原来就是这么一回事,把
    POST /GameTools/firstRsProc.aspx?apidos=795010 HTTP/1.1
    Accept: */*
    Accept-Language: zh-cn
    Referer: http://war1.awarz.com/module_page/game_ms.aspx?aid=9179D0AA056D2C78&d=4
    Content-Type: application/x-www-form-urlencoded
    UA-CPU: x86
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; MAXTHON 2.0)
    Host: war1.awarz.com
    Content-Length: 13
    Connection: Keep-Alive
    Cache-Control: no-cache
    Cookie: cnzz_a853112=49; rtime=1; ltime=1214390270343; cnzz_eid=90521001-http%3A//war1.awarz.com/module_page/game_ms.aspx%3Faid%3D5AAFFDABA90AEC69%26d%3D6; ASP.NET_SessionId=0rvemlmi152yhq55u4unwi45
    这样的数据包提交给服务器就可以了!
      

  7.   

    如果是纯http协议,并且报文不加密的话,那就 get/post 就行了,具体内容需要根据游戏来分析。如果加密...那就麻烦了
      

  8.   

    不加密,完全明码,提供一点http协议get/post DELPHI实现的学习资料看看啊
      

  9.   

    网页外挂的写法种类很多,你没有具体的问题。所以无法给你相应代码。用Delphi控制网页我还是比较擅长的。
      

  10.   

    mwy654321 你好!很荣幸遇到你,我为朋友做网页游戏外挂,搞了好几天,试过用IDHTTP模拟WINSOCK EXPERT抓到的数据包发送给服务器,但是没有成功,因为就算我设置好了,发送过去的数据包抓下来看一下,和浏览器发送的HTTP请求还是不一样的,但是我发现只要连接指定构造的地址就可以模拟浏览器发送数据,可不可以用WEBBROWSER组件模拟呢?我尝试http://war1.awarz.com/GameTools/flotaStepSend.aspx?apidos=795010&ids=3F2989F9-9E60-74A8-1898-E16C361A36FE&posz=6&posx=953&posy=23&speedmax=100&speedprop=0&duration_day=44&consumption=107&objtyp=0&dragold=0&drametal=0&dracrystal=0&drazsoe=0&accMode=0&otherRes=&zsoeType=1这个构造起来提交浏览器,而他本来的数据包是 POST /GameTools/flotaStepSend.aspx?apidos=795010 HTTP/1.1 
    Accept: */* 
    Accept-Language: zh-cn 
    Referer: http://war1.awarz.com/module_page/game_ms.aspx 
    Content-Type: application/x-www-form-urlencoded 
    UA-CPU: x86 
    Accept-Encoding: gzip, deflate 
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; MAXTHON 2.0) 
    Host: war1.awarz.com 
    Content-Length: 209 
    Connection: Keep-Alive 
    Cache-Control: no-cache 
    Cookie: cnzz_a853112=10; rtime=3; ltime=1214539903281; cnzz_eid=90521001-http%3A//war1.awarz.com/module_page/game_ms.aspx%3Faid%3D5AAFFDABA90AEC69%26d%3D6; ASP.NET_SessionId=i4msdn553qf3jd55ik4lh455 一个,下面紧跟着还有一个 ids=3F2989F9-9E60-74A8-1898-E16C361A36FE &posz=6&posx=953&posy=23&speedmax=100&speedprop=0&duration_day=44&consumption=107&objtyp=0&dragold=0&drametal=0&dracrystal=0&drazsoe=0&accMode=0&otherRes=&zsoeType=1 
    这么2个数据包,我构造的那个地址直接放浏览器提交不能成功。请帮忙!
      

  11.   

    要不到外挂网站看看去?
    bbs.wghai.com
    www.wgum.net
      

  12.   

    你的问题描述不清楚,在QQ上说吧,你QQ多少?
      

  13.   

    就是用TWebBrowser来操作吧
    提取其中的元素,然后通过操作元素来达到操作网页的目的
    比如说有一个按钮
    你先在 IE打开,查看他的HTML源代码,然后找到那个按钮是个什么元素
    找到元素后,使用MSHTML中的接口来对其操作就可以了。
      

  14.   

    比如操作
    CSDN的登录
    先用WebBrowser定位到登录页面
    WebBrowser1.Navigate('http://passport.csdn.net/UserLogin.aspx?from=http://community.csdn.net/');
    然后,看其HTML源代码,发现
    名字为 ctl00$CPH_Content$tb_LoginNameOrLoginEmail的元素就是 其用户名的输入框了。
    此时
    使用
    (WebBrowser1.Document as IHTMLDOCUMENT2).all.item('ctl00$CPH_Content$tb_LoginNameOrLoginEmail',emptyParam)来得到这个元素了。var
      UserEdt,LogBtn: IHTMLELEMENT;
    begin
      UserEdt := (WebBrowser1.Document as IHTMLDOCUMENT2).all.item('ctl00$CPH_Content$tb_LoginNameOrLoginEmail',emptyParam) as IHTMLELEMENT;
      UserEdt.setAttribute('value','test',0);//这里就设置了test到输入用户名的编辑框中了 。
      //依此一样,输入密码,验证码
      //然后找那个登录按钮,通过他的HTML源代码,可以知道,那个按钮其实是个图片,元素的名字叫 “ctl00$CPH_Content$Image_Login”
      //同样的方法
      LogBtn := (WebBrowser1.Document as IHTMLDOCUMENT2).all.item('ctl00$CPH_Content$Image_Login',emptyParam) as IHTMLELEMENT;
      LogBtn.Click;//调用按钮的点击事件开始登录。
    end;
      

  15.   

    比如操作
    CSDN的登录
    先用WebBrowser定位到登录页面
    WebBrowser1.Navigate('http://passport.csdn.net/UserLogin.aspx?from=http://community.csdn.net/');
    然后,看其HTML源代码,发现
    名字为 ctl00$CPH_Content$tb_LoginNameOrLoginEmail的元素就是 其用户名的输入框了。
    此时
    使用
    (WebBrowser1.Document as IHTMLDOCUMENT2).all.item('ctl00$CPH_Content$tb_LoginNameOrLoginEmail',emptyParam)来得到这个元素了。var
      UserEdt,LogBtn: IHTMLELEMENT;
    begin
      UserEdt := (WebBrowser1.Document as IHTMLDOCUMENT2).all.item('ctl00$CPH_Content$tb_LoginNameOrLoginEmail',emptyParam) as IHTMLELEMENT;
      UserEdt.setAttribute('value','test',0);//这里就设置了test到输入用户名的编辑框中了 。
      //依此一样,输入密码,验证码
      //然后找那个登录按钮,通过他的HTML源代码,可以知道,那个按钮其实是个图片,元素的名字叫 “ctl00$CPH_Content$Image_Login”
      //同样的方法
      LogBtn := (WebBrowser1.Document as IHTMLDOCUMENT2).all.item('ctl00$CPH_Content$Image_Login',emptyParam) as IHTMLELEMENT;
      LogBtn.Click;//调用按钮的点击事件开始登录。
    end;
      

  16.   

    比如操作
    CSDN的登录
    先用WebBrowser定位到登录页面
    WebBrowser1.Navigate('http://passport.csdn.net/UserLogin.aspx?from=http://community.csdn.net/');
    然后,看其HTML源代码,发现
    名字为 ctl00$CPH_Content$tb_LoginNameOrLoginEmail的元素就是 其用户名的输入框了。
    此时
    使用
    (WebBrowser1.Document as IHTMLDOCUMENT2).all.item('ctl00$CPH_Content$tb_LoginNameOrLoginEmail',emptyParam)来得到这个元素了。var
      UserEdt,LogBtn: IHTMLELEMENT;
    begin
      UserEdt := (WebBrowser1.Document as IHTMLDOCUMENT2).all.item('ctl00$CPH_Content$tb_LoginNameOrLoginEmail',emptyParam) as IHTMLELEMENT;
      UserEdt.setAttribute('value','test',0);//这里就设置了test到输入用户名的编辑框中了 。
      //依此一样,输入密码,验证码
      //然后找那个登录按钮,通过他的HTML源代码,可以知道,那个按钮其实是个图片,元素的名字叫 “ctl00$CPH_Content$Image_Login”
      //同样的方法
      LogBtn := (WebBrowser1.Document as IHTMLDOCUMENT2).all.item('ctl00$CPH_Content$Image_Login',emptyParam) as IHTMLELEMENT;
      LogBtn.Click;//调用按钮的点击事件开始登录。
    end;
      

  17.   

    谢谢 suiyunonghen 我会按你的办法先试试,过会给回答!我的QQ号发送你了,愤怒的黑蝴蝶,谢谢你的帮忙!
      

  18.   

    谢谢楼上朋友的帮助,我已经解决了登入及简单按钮点击的问题,看历史贴子找到的办法。procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject;\\登入
      const pDisp: IDispatch; var URL: OleVariant);
    var
      vDocument:IHTMLDocument2;
      useredt,userPASS:IHTMLELEMENT;
    begin
       if q then
       begin
       UserEdt := (WebBrowser1.Document as IHTMLDOCUMENT2).all.item('logUsers',emptyParam) as IHTMLELEMENT;
       UserEdt.setAttribute('value','cc3802',0);
       Userpass := (WebBrowser1.Document as IHTMLDOCUMENT2).all.item('logPasses',emptyParam) as IHTMLELEMENT;
       Userpass.setAttribute('value','*******',0);
       q:=false;
       vDocument := WebBrowser1.Document as IHTMLDocument2;
       vDocument.parentWindow.execScript('document.loginForm.submit()', 'javascript');   end;
    end;
    procedure TForm1.Button7Click(Sender: TObject);
    var
         astring:String;
         vDocument:IHTMLDocument2;
    begin
        vDocument := WebBrowser1.Document as IHTMLDocument2;
        astring:='url_link('+'''../DutyPage/SubmitDuty2.aspx?apidos=795010&sl=1'''+')';
       vDocument.parentWindow.execScript(astring,'javascript');
    end;
    因为我发现他网页源代码里按钮里有事件<a href="" onclick="javascript:document.loginForm.submit();return false;"><img src="images/im1_21.gif" alt="" width="97" height="27" border="0"></a></td>所以我模拟按钮的点击事件可以达到功能。
      

  19.   

    但是有一个问题还不能解决,游戏中有一个舰队出征的功能,每个舰队之后又一个单选框,需要它出征的话要先单击他的单选框,我观察他的源代码,他是这样的实现指定舰队功能的<div class="arm_n">
    <ul>
    <li class="arm_bh1">2</li>
    <li class="arm_sl1">1</li>
    <li class="arm_mb1"><a href="javascript:void(0);" onMouseOver="showdiv(event,'Hvt9DY6kc94bT73wDI5IrmorOe1Pvwlw8bFc4TFEthNCt0WzsZ1N6Cwng4P8rh43')" onMouseOut="hiddendiv(event,'Hvt9DY6kc94bT73wDI5IrmorOe1Pvwlw8bFc4TFEthNCt0WzsZ1N6Cwng4P8rh43')">偷运走私①大队<a></li>
    <li class="arm_rw1">空闲</li>
    <li class="arm_time1">---</li>
    <li class="arm_ml1"><input type="radio" name="ids" value="951BDBFE-ED6B-3491-FA92-70E0BE07AC71    "></li>
    </ul>
    </div>
    <div class="arm_n">
    <ul>
    <li class="arm_bh1">3</li>
    <li class="arm_sl1">1</li>
    <li class="arm_mb1"><a href="javascript:void(0);" onMouseOver="showdiv(event,'bJtKIq5UebVmeJAT2UwFU5XmxFvsndzjvyEZtzH3NIqllMgWrDd6ZIkkCsbx75SA')" onMouseOut="hiddendiv(event,'bJtKIq5UebVmeJAT2UwFU5XmxFvsndzjvyEZtzH3NIqllMgWrDd6ZIkkCsbx75SA')">黑鹰②舰队<a></li>
    <li class="arm_rw1">空闲</li>
    <li class="arm_time1">---</li>
    <li class="arm_ml1"><input type="radio" name="ids" value="FEE92689-9EC3-C4E0-9ADE-DE05C9071C06    "></li>
    </ul>
    </div>
    <div class="arm_n">
    <ul>
    <li class="arm_bh1">4</li>
    <li class="arm_sl1">1</li>
    <li class="arm_mb1"><a href="javascript:void(0);" onMouseOver="showdiv(event,'ABNWIVOzDaO99BloOWgcBtdI+eC9SYcjSn5Jna0omiNNuD4cXbsoPmOkhJiHa9SU')" onMouseOut="hiddendiv(event,'ABNWIVOzDaO99BloOWgcBtdI+eC9SYcjSn5Jna0omiNNuD4cXbsoPmOkhJiHa9SU')">护盾运输<a></li>
    <li class="arm_rw1">空闲</li>
    <li class="arm_time1">---</li>
    <li class="arm_ml1"><input type="radio" name="ids" value="3D73EC9A-A121-04CD-69B5-8E5EF57E5C41    "></li>
    </ul>
    </div>就是每个单选框点击事件中把ids这个变量赋值为舰队在系统中的3D73EC9A-A121-04CD-69B5-8E5EF57E5C41    这种代号,
    这样我设想,只要把ids赋值为我需要挂机时用的舰队(舰队是固定的,我用同样的舰队不断出征攻打海盗得到经验)就可以再模拟“出征”按钮,就可以成功派出了,问题就出在ids赋值这里,这个出征界面是一个嵌套界面,是通过主页面的<td width="33" height="30" class="rb"><img src="../images/chuz.gif" width="23" height="19"></td>
    <td class="br"><a href="javascript:void(0);" onClick="javascript:url_link('../GameTools/flota_first.aspx?apidos=795010');">舰队出征</a></td>
    </tr>
    这个调用的页面,嵌套在主页面,就是说点了这个链接以后,浏览器地址栏还是显示http://war1.awarz.com/module_page/game_ms.aspx这个主界面,不知道什么原理,应该是嵌套的框架吧,框架内的变量怎么赋值?这个就是我的问题
      

  20.   

    楼主不妨去这里看一下,不用你写程序,编个脚本就行了。
    http://www.grscript.com/
      

  21.   

    http://keletime.cn
    我用vb写的 校内 好友买卖的辅助软件源码..
    你可以参考下,不涉及到坐标问题,就是分析html文件结构,然后确定按钮目标,然后模拟点击。
      

  22.   

    俺用VB6.0编写了网页外挂程序,正在QQ空间免费连载,有点编程基础的都可以去看看,不需要分析html,不妨看看其思路,
    http://user.qzone.qq.com/1154852220
      

  23.   

    有人说,java比较强,貌似这方面的教程也是相当少
      

  24.   

    你是外星来的吧 java是很简单的oop BC哈  资料多的数不清。。
      

  25.   

    网页外挂:
    本质就是分析特定网站的HTTP交互数据:
    1.分析特定网站的请求参数
    2.定时请求服务器,分析返回的结果(有可能是特定格式的字符串)
      

  26.   

    不加密,完全明码,提供一点http协议get/post DELPHI实现的学习资料看
      

  27.   

    一般网页游戏都是一个Flash的,也是这样做?
      

  28.   

    如果是flash的话好像有个叫ARM协议哇