几年前写的《模拟器编程》内容

03月 17th, 2008

大家好,我是cashsoldier; 很奇怪我的名字吧,刚用这个名字呢,许多网友和钱友都很是议论了一下;给了很多猜测,有的说我的名字太长了,在西陆社区只能注册11位长度名字,居然将我的耳朵给割了下来,成了cashsoldie,不懂是什么意思了,干脆叫我cs,可不要有其它想法,当我叫cs的时候,那个反恐还没出来呢,可是它侵犯我的版权;不过我对反恐没什么兴趣,仅只有时候玩玩;另有人叫我c$,什么意思呢?create $,如果是那样就好了,我成印钞机了^_^,呵呵 …其它说法更多,我不想说下去了,免得有人说我骗稿费凑文字数量,反正已经凑了不少了… 谈到网赚,以后我再详细介绍下(本来知道就不多),可作为一个有点历史的编程人员,对这些不仅仅只看表面,因此也积累了不少心得,独乐乐不如众乐乐,写一点出来和大家分享,也算不枉在网上结识了一帮子朋友。好了,不骗稿费了,书归正传。 如果要深入了解网赚的技术细节,不了解一些基本常识可就很困难了,因此,本教程(算教程吗?)也就要求从基础开始,一步步让你明白其中的道理; 今天的第一课应该了解的就是web服务器了,我们天天在网上冲浪,不可能不知道所有的内容和后台都是web服务器提供的,可web服务器是怎么工作的,它的优点在什么地方,缺点在什么地方(这是我们最关心的,如果有漏洞被我发现该多好,我帐户上的$齐唰唰往天上跑….做梦吧你!!),具体的原理不是我这里所要讲的(去死吧你,说要讲这个又断开了,骗稿费呀你!!)。不过,有些基础和简单的应该可以说得清,同时也给非技术人员一个大概的了解,对我们所要做的事也应该可以做到了。 我们都知道,在浏览器上(不用讲什么浏览器了,原理差不多,不过这里以m$的ie浏览器为准,如果你用其它的,出了事不归我负责) 只要键入要去的url地址,浏览器就带我们去了(废话),其中的过程大概是这样: 键入url地址–>go–>下面由浏览器的工作–>判断url输入的格式及合法性–>分解url地址,找出host name和port–>提交host name,请求dns返回ip地址–>联接ip地址和port–>得到web主机回应–>提交请求html头部数据–>web服务器返回html头部数据–>web服务器返回html内容数据–>断开socket联接–>分解html数据–>显示和外理(如果包含javascript或vbscript,解释和执行) 好了,虽然你只输入了一次url地址,可浏览器却执行和处理如此多的内容,当然,这还不是全部,所以,你现在明白为何只有m$独霸天下的原因了吧,有本事你不用ie的浏览器内核自己写一个全面的支持script和html3.2的浏览器? 刚才大家看到的是浏览器和web服务器共同工作的一个缩影,但在web服务器上究竟怎么做的呢?下面的内容看了之后一定会明白的。 url=http://www.sina.com.cn/login.cgi?user=abc&pass=abc 上面的url地址不用我介绍了,都很熟悉,不过,通过一个例子,我想大家会更清楚明白浏览器和web服务器的工作原理,更详细的内容请参考rfc多少多少,我记不住了。 首先,浏览器将取得host name,也就是要访问的主机名称(当然也可直接键入ip地址,不过它简单了,你就累多了),这里取出是;然后,取出该主机提供这个url地址服务的端口号,缺省是80,否则,如果是像8080的话,你应该像下面的输入方式:; 页面地址是/login.cgi?user=abc&pass=abc,记住了,前面有个/号,否则,嘿嘿,你哭死了也会返回找不到的。好了,内容足够了,下一步是通过网络取得主机的ip地址,c语言中有通过host name取得ip的函数,就不用你自己去写通过网络取地址了,我这里提供一个delphi的函数,vb的我不知道,想知道的人自己去查查吧,如果什么我都做了,你还学什么呀。 做emu的教程 《模拟器编程》-(针对ie控件webbrowser编程-自动登录操作) 利用delphi的olevariant类型 单个frames的输入 var o : olevariant; begin o := webbrowser.oleobject.document.all.item(’loginuserid’,0); //找到登录用户名的输入框 o.value := ‘test’; o := webbrowser.oleobject.document.all.item(’loginpassword’,0); //找到登录密码的输入框 o.value := ‘test’ webbrowser.oleobject.document.forms.item(0, 0).submit; //第一个表单提交 { o :=webbrowser.oleobject.document.all.item(’login’,0); //或者用指定表单名称提交 o.click; //点击操作,对其它对象也可同样操作 } end; 多个frames的输入,frameindex为frame的序号 var o : olevariant; begin //找到登录用户名的输入框 o := webbrowser.oleobject.document.documentelement.document.frames.item(frameindex).document.all.item(’loginuserid’,0); o.value := ‘test’; //找到登录密码的输入框 o := webbrowser.oleobject.document.documentelement.document.frames.item(framindex).document.all.item(’loginpassword’,0); o.value := ‘test’ //第一个表单提交 webbrowser.oleobject.document.documentelement.document.frames.item(framindex).document.forms.item(0, 0).submit; { //或者用指定表单名称提交 o :=webbrowser.oleobject.document.documentelement.document.frames.item(framindex)..document.all.item(’login’,0); o.click; //点击操作,对其它对象也可同样操作 } end; 模拟器编程》-(针对ie控件webbrowser编程-找出所有link对象对应的href) 在模拟器编程中,我们常要找出所有要操作的link对象。如果是我们需要的,就对它进行操作。在一个网页中作为判断的依据或其它用途 单个frames的link对象 var count:integer; linklist:tstringlist; begin linklist:=tstringlist.create; try for count :=0 to webbrowser.oleobject.document.links.count -1 do linklist.add(webbrowser.oleobject.document.links.item(count).href); {以下对取得的link对象内容href做相应操作,如判断、navigate等} finally linklist.free; end; end; 多个frames的link对象,frameindex为frame的序号 var count:integer; linklist:tstringlist; begin linklist:=tstringlist.create; try for count =0 to webbrowser.oleobject.document.documentelement.document.frames.item(frameindex).document.links.count -1 do linklist.add(webbrowser.oleobject.document.documentelement.document.frames.item(frameindex).document.links.item(count).href); {以下对取得的link对象内容href做相应操作,如判断、navigate等} finally linklist.free; end; end; 《模拟器编程》-针对ie控件webbrowser编程-tagname属性和sourceindex属性 如何取得html页面中某个位置的内容,如我的登录姓名,现在我取得的$数据,我还有多少spin可用等等;下面我们就来谈谈这个东西。 html中每一个保留字都由开始和结束组成就像《和》一样,是成对出现的。在html语法中常见的如<html></html>,<td></td>等,我们不需自己去计算这些内容,因为使用了webbrowser后,它已经帮我们做到了。 同时,在webbrowser中,有一个极有用的属性,即sourceindex属性,它将所有上述成对出现的对象能够唯一在页面中标识(不信的话你试试看,查找td属性的对象就会出一大堆),能使我们找出唯一我们所需的内容。 在单个frames中查找相同属性的对象 var count:integer; begin for count :=0 to webbrowser.oleobject.document.all.length -1 do //当前页面中所有对象数量 begin if webbrowser.oleobject.document.all.item(count).tagname =’td’ then //找出所有属性为td的对象 begin showmessage(webbrowser.oleobject.document.all.item(count).innertext); //显示找到的对象的文本信息 showmessage(webbrowser.oleobject.document.all.item(count).innerhtml); //显示找到的对象的html源码信息 end; end; end; ok,现在找出相同属性的内容了,唯一值呢? if webbrowser.oleobject.document.all.item(count).sourceindex = xxx then … 当然,你需首先得到xxx的值,怎样得到它?难到你不知道? 自己做个工具吧;如果你比我还懒,算了,我这里做了一个工具,它可取得当前所有对象的唯一id,就是sourceindex了,当然有其它几个功能,不过用来完成刚才所讲内容,足够了,如果你认为我做的不行,好了,你多加几个功能吧;记得做好后给我email一份。 下载地点?当然在我的源码荟萃里了;没有?哦,我还没上传呢,等等吧! 多个frames的link对象,frameindex为frame的序号 我就不想多写了,所有多个frames和前面所讲操作一样,如果你连这个都颔会不了的话,我劝你还是不要学了,别人做好后你用这行了。 另外,取得html页面中有几个frames就这样做 webbrowser.oleobject.document.documentelement.document.frames.length 明白了吗? 现在我们做一个通用的函数,可按tagname和sourceindex取得相应的文本内容: // 取得tagname指定的元素文本内容 function getwebbrowserdocumentinnertext(web:twebbrowser;const framindex,sourceindex:integer;const tagname:string):string; var count,index :integer; tmp:string; begin result :=”; //如果framindex为-1的话,表示只有一个frame,否则,就是想操作的frame序号 if framindex = -1 then begin for count := 0 to web.oleobject.document.all.length -1 do begin tmp :=web.oleobject.document.all.item(count).tagname; index :=web.oleobject.document.all.item(count).sourceindex; if (tmp = tagname) and (sourceindex =index) then begin result :=web.oleobject.document.all.item(count).innertext; exit; end; end; exit; end; for count := 0 to web.oleobject.document.documentelement.document.frames.item(framindex).document.all.length -1 do begin tmp :=web.oleobject.document.documentelement.document.frames.item(framindex).document.all.item(count).tagname; index :=web.oleobject.document.documentelement.document.frames.item(framindex).document.all.item(count).sourceindex; if (tmp = tagname) and (sourceindex =index) then begin result :=web.oleobject.document.documentelement.document.frames.item(framindex).document.all.item(count).innertext; exit; end; end; end; 《作弊器编程》-winapi-mouse控制 作弊器主要利用程序完成人对计算机的某些操作,如mouse、键盘等外设的操作,让其它程序认为是人在计算机旁操作一样。今天谈谈mouse的模拟操作。这些内容就需要用到winapi中的函数了。 winapi中对mouse的操作函数有: 1、移动mouse位置:setcursorpos setcursorpos( x: integer; {x coordinate of the cursor} y: integer {y coordinate of the cursor} ): bool; {returns true or false} description the setcursorpos function relocates the mouse cursor to the location specified by the x and y parameters, in screen coordinates. if the cursor is confined to a rectangular region by calling the clipcursor function, the system translates the coordinates to the appropriate coordinates within the rectangular region. parameters x: specifies the new x-coordinate for the cursor. y: specifies the new y-coordinate for the cursor. return value if the function succeeds, it returns true; otherwise it returns false. to get extended error information, call the getlasterror function. 2、取得mouse位置:getcursorpos getcursorpos( var lppoint: tpoint {receives coordinates of cursor} ): bool; {returns true or false} description the getcursorpos function retrieves the mouse cursor position relative to the screen. parameters lppoint: points to tpoint structure which receives the current mouse cursor抯 position in screen coordinates. this structure must be allocated by the caller. return value if the function succeeds, it returns true; otherwise it returns false. to get extended error information, call the getlasterror function. 3、模拟mouse点击:mouse_event mouse_event( dwflags: dword; {mouse activity codes} dx: dword; {horizontal location or change} dy: dword; {vertical location or change} dwdata: dword; {wheel movement amount} dwextrainfo: dword {application defined data} ); {this procedure does not return a value} description the mouse_event function simulates mouse activity. the system generates mouse messages as if the mouse was actually moved or a mouse button was actually pressed. parameters dwflags: specifies which kind of mouse activity to simulate. dx: specifies the horizontal location or change in location. if the dwflags parameter contains the mouseeventf_absolute flag, this parameter specifies a location. otherwise, this parameter specifies the amount of mickeys (a measurement of mouse distance) to move. dy: specifies the vertical location or change in location. if the dwflags parameter contains the mouseeventf_absolute flag, this parameter specifies a location. otherwise, this parameter specifies the amount of mickeys (a measurement of mouse distance) to move. dwdata: specifies the amount of wheel movement if the dwflags parameter contains the mouseeventf_wheel flag. a positive value indicates wheel movement away from the user; a negative value indicates wheel movement toward the user. this value is in terms of wheel_delta, approximately 120 mickeys. if the dwflags parameter does not contain the mouseeventf_wheel flag, dwdata should be set to zero. dwextrainfo: 32 bits of additional application defined data. to retrieve this data, call the getmessageextrainfo function. 下面的代码是我们的一个练习,将mouse先移到屏幕0,0位置,然后移动至中间,并单击: var count:integer; begin setcursorpos(0,0); //称动mouse到0,0;其实,用mouse_event也能移动操作 for count :=0 to 400 do //屏幕大小为800*600 setcursorpos(count,0); //y为0 //以下为单击操作,双击怎么做?回去好好想想 mouse_event(mouseeventf_leftdown ,400,0,0,0); //在400,0处按下mouse左键 //mouse_event(mouseeventf_rightdown ,400,0,0,0); //不用说,右键 mouse_event(mouseeventf_leftup ,400,0,0,0); //在400,0处放开mouse左键 //mouse_event(mouseeventf_rightup ,400,0,0,0); //不用说,右键 end; 这不就是一个自动点击机吗?当然,不完全,但自动点击的操作不就完成了吗!就这么简单 作弊器编程》-winapi-键盘控制 winapi中对键盘的操作函数只能用于application自身,要想用自己的程序给其它程序窗体发送键码,需用到hook(天,hook可就复杂多了):而取得其它窗口输入的键码,就需用全局的dll了(我晕,太多了) 就里不再写代码了,在cashsoldier造钱战士 1.0 vip源码的窗体控制中有全部源码(太多,这里写不了)un_sendkey.pas 使用方法: const controlkey = ‘^’; altkey = ‘@’; shiftkey = ‘~’; keygroupopen = ‘{’; keygroupclose = ‘}’; //如当前窗口是ie窗口 var keys:string; begin keys :=’@d’; //按下 alt+d,焦点为ie的地址输入框 sendkeys(keys); //向当前窗口发送键码 waitforhook; //等待结束 keys :=”+$13; //输入内容并按回车 sendkeys(keys); //向当前窗口发送键码 waitforhook; //等待结束 end; 作弊器编程》-winapi-窗口控制 一般来讲,对于我们常用的窗口控制的功能有如下要求: 1、得到当前运行中的所有窗口信息 2、取得最前端的窗口信息 3、取得想控制的窗口信息等等 在winapi中针对窗口控制的函数很多,完成以上功能的一般用的就以下几个函数: enumwindows 取得当前系统中所有窗口句柄 findwindow 查找窗口 setwindowpos 设置窗口位置 getwindowrect 取得窗口大小 … 作弊器的目的在于让被蒙弊的程序认为我们的程序操作是由人在控制。同时,作弊器需像人一样取得针对的窗口信息,对它进行相应的操作。以上几个函数能够基本完成我们现在现要的操作。在cashsoldier造钱战士中的窗口控制及spedia模拟器中,大量使用了以上函数;当然,所有函数每一个人使用都会采用不同的方法,如showwindow,movewindow可以用setwindowpos来完成相应的功能。 现在我们利用以上函数做一个自动点击机,它能找出广告窗口,同时每隔十秒点击相应的广告位置;(我们假设该广告条要点击的窗口classname为tbanner,广告条程序名称为banner.exe。广告条标题为spediabanner)。 function enumwindowsproc(ahwnd: hwnd;lparam: lparam): boolean; stdcall; var wndcaption: array[0..254] of char; //窗口标题 wndclassname: array[0..254] of char; //窗口类名 arect:trect; //窗口坐标 begin if iswindowvisible(ahwnd) then //是否可见窗口(我们要的广告窗口难道是不可见的吗?) begin getwindowtext(ahwnd, @wndcaption, 254); //取得窗口标题 getclassname(ahwnd, @wndclassname, 254); //取得窗口类名 if (strpas(wndcaption) = ’spediabanner’) and //是否运行的banner.exe (strpas(wndclassname = ‘tbanner’) then //是否运行的窗口类为tbanner begin //是我们想要的窗口 getwindowrect(ahwnd,arect); //取得广告窗口的坐标位置(为什么要取出来呢?) showwindow(ahwnd,sw_shownormal); //按正常方式显示广告窗口(如果被隐藏了,不就对了吗) //设置窗口位置及大小;实际上并没有改变大小和位置,因为用showwindow时,如果窗口被最小化时,就不起作用了(现在知道为何要先取坐标位置了吧) setwindowpos(ahwnd,hwnd_top,ahwnd.left,ahwnd.top,ahwnd.right,ahwnd.bottom,swp_showwindow); setcursorpos(ahwnd.top+10,ahwnd.left+30); //移动鼠标到广告条上(我随便加的位置,根据实际位置设置) //单击广告条 mouse_event(mouseeventf_leftdown ,ahwnd.top+10,ahwnd.left+30,0,0); mouse_event(mouseeventf_leftup ,ahwnd.top+10,ahwnd.left+30,0,0); result :=false; //没必要再作枚举吧 exit; end; end; result := true; //返回true表示继续下一个,否则,不再枚举 end; procedure tform.tm_autotimer(sender: tobject); //时钟控件,每隔一秒触发一次 begin tm_auto.enabled :=false; tm_auto.tag :=tm_auto.tag +1 //每秒加一 if tm_auto.tag >= 10 then //十秒触发一次 begin tm_auto.tag :=0; //恢复计数 enumwindows(@enumwindowsproc, 0); //取当前所有窗口 end; tm_auto.enabled :=true; end; end; 《作弊器编程》-截包实战 做emu最重要的是要知道emu对象的协议请求内容,因为在internet上最常用的协议是tcp/ip协议组,而tcp协议 是最常用的,在其上构建了http,ftp等上层协议,只要我们得到其交互的ip包,就可以分析和做出自己的emu来蒙骗对方。 得到ip包的方式有很多,最底层的是用截包工具如iris之类的,这里不讲如何使用工具,因为它们都有说明(看不懂? 天,我的e文比你还差,更看不懂了),因为大多冲浪软件都是利用http协议(如spedia,about等),这里我就讲讲怎样 利用代理服务来苏获http内容。大多冲浪程序通过http来完成,是其简单的方式,同时大多支持代理。我们可利用这个方式, 自己做个代理,不就可以得到所有的来往信息了吗? 以今天我做www,cashspace.com的广告条为例: 1、运行它的广告条,按正常情况使用,一小时60-80点增加(不过我没用,你用不用无所谓了)。 2、运行自己做的代理服务器程序(不会做的话在我主页上下载,不过我还没上传,过两天吧,上次传了一次没传完) 3、将ie的代理服务器设置为本机ip和port(不可能这都不知道吧,如果不知道,别看了) 4、运行冲浪,可以看到我的代理服务器监视窗口有内容了如下: get … ;p=xxxxx&s=1024 http/1.0 accept: , , 棣? 吚u ??m q嬒 u u p8??e 婳 p婨 u j p? , , , , , , , , , , user-agent: utilmind httpget host: pragma: no-cache cookie: enter=468; eon_contest=thereisnospoon; eon_contest=thereisnospoon get http/1.0 accept: p_w_picpath/gif, p_w_picpath/x-xbitmap, p_w_picpath/jpeg, p_w_picpath/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* accept-language: zh-cn accept-encoding: gzip, deflate user-agent: mozilla/4.0 (compatible; msie 5.01; windows nt 5.0) host: proxy-connection: keep-alive cookie: enter=468; eon_contest=thereisnospoon; eon_contest=thereisnospoon http/1.1 200 ok server: microsoft-iis/5.0 date: wed, 16 may 2001 09:21:37 gmt connection: keep-alive content-length: 384 content-type: text/html set-cookie: aspsessionidgqqqglwk=pdgkoolcaikggbeiggdfkjab; path=/ cache-control: private ……………… 太多,不写了,可以看到它的步骤了吗,不用急 实际上可看到它不断地在 … ldier&x=1024c86 … c86&xx=71805608 两行中取页面 好了,退出吧,有了,有了 … ;p=xxxxx4&up=10 这句等会再说。 … ;p=xxxxx&s=1024 … ldier&x=1024c86 … c86&xx=71805608 好,有了上面几行url地址(不要问我从那里得到的,应该明白了吧,不明白???%$#@^#*@**@#&*@) 在ie里改代理,依次输入上述url,看看效果吧 重复 … ldier&x=1024c86 和 … c86&xx=71805608 可看到广告了吧,我劝你做emu时还时加上这两句,否则,每家公司都死定了(它没广告收入了) 可做了很久查帐,没动静 用这个退出 … ;p=xxxxx4&up=10 再查帐加了10点,问题来了,明白了吗???? 将up=10改为up=100,查帐,加了100点^&^%@^%@&$&%@$%^*@^#&(@(*&*dqyidh@*&^*&^#*^@ 何苦呢,只一句就完成了;慢,许多网站可没这么简单,spedia就这样,所有的信息(用户信息)有的加了密, 或加上一大堆参数,让你不明白。所以这只是个简单的方法。 好,一气写了这么多,还不错吧 《模拟器编程》-编制模拟器要掌握的技术(一) 我们在刚开始编制模拟器时,,常常不知从那里下手,其实,编制模拟器需要掌握一定的常识,否则,得到的数据会让我 们不知所措。 因为模拟器是模拟ie或广告条的操作,给网战发送相应的基于http协议的内容,因此,需要掌握http超文本协议的内容及 要点,才能更好地为上层应用服务。这里是http协议即rfc1945的详细说明,其它关于www的说明请参阅,我们这 里仅对http协议作简单介绍。 与一个http服务器通信: http是一个非常简单的。客户在先打开一个与某一http服务器的连接,其缺省端口为80.它接着发一个请求行,一此可选的 请求标题和一个空行(注意,最后要发一个空行,我刚在做的时候,忘了发一个空行,结果没有返回信息)。http服务器发送 一个响应行,一些响应标题,一个空白行(注,又一个空行)和一个文档,接着关闭连接。 客户一般发送的请求行使用get、head、或post,然后发送零信或更多http请求标题和空白行,使用post时,客户可以在 空白行后发送额外的数据。get也可行发更新数据,不过是在请求行里。 例子:(还是以 为例) 发送信息: get … mp;p=xxxxx&up=0 http/1.0 accept: p_w_picpath/gif, p_w_picpath/x-xbitmap, p_w_picpath/jpeg, p_w_picpath/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* accept-language: zh-cn accept-encoding: gzip, deflate user-agent: mozilla/4.0 (compatible; msie 5.01; windows nt 5.0) host: proxy-connection: keep-alive cookie: enter=468; aspsessionidgqqqglwk=hlekoolceacodcckdhdgpeei 返回信息: http/1.1 200 ok server: microsoft-iis/5.0 date: wed, 16 may 2001 07:31:47 gmt connection: keep-alive content-length: 132 content-type: text/html cache-control: private yes<br> t1=35<br> t2=34<br> t3 =15<br> t4=0<br> 成功返回,返回信息为 http/1.1 xxx yyyyy 其中,xxx为200表示成功,yyyy为描述内容,下面的内容不用我多讲,很清楚的表示了。 发送的信息怎样发送,当然是socket了,在windows或linux或其它操作系统中,它们都是一样的。 简单地讲,建一个socket联接,端口为80,联接,联接正常后发送上述信息,接收,ok;讲的很简单了,可实际也就这么简单,我在这里用 delphi的tclientsocket,完成,vb、vc也有相应的socket控件,下次我们再谈如何直接用windows的winsock api来建立socket。 接收到了http返回信息,读取返回文本,就要分析它的内容了,详细内容我这里就不讲了(我讲完就可重写一遍ie了,同时要掌握另一种内容, 即html语法,呵呵,下次再说)。 再来一次: get … ldier&x=1024c86 http/1.0 accept: p_w_picpath/gif, p_w_picpath/x-xbitmap, p_w_picpath/jpeg, p_w_picpath/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* accept-language: zh-cn accept-encoding: gzip, deflate user-agent: mozilla/4.0 (compatible; msie 5.01; windows nt 5.0) host: proxy-connection: keep-alive cookie: enter=468; eon_contest=thereisnospoon; aspsessionidgqqqglwk=kpiloolcijejllncfojdfffb; eon_contest=thereisnospoon http/1.1 200 ok server: microsoft-iis/5.0 date: thu, 17 may 2001 04:03:52 gmt connection: keep-alive content-length: 826 content-type: text/html cache-control: private <body bgcolor="#c0c0c0" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" scroll=no> <!– begin adrotator.com’s adbutler code –> <iframe src="" width=468 height=60 frameborder=0 border=0 marginwidth=0 marginheight=0 vspace=0 hspace=0 scrolling=no> <script src="" language="javascript"> </script> <noscript> ""> <img src="" border="0" height="60" width="468"></a> </noscript> </iframe> <!– end adrotator.com’s adbutler code –> 这次不好了,除了http头外,文本内容也有了,是什么呢?会html的一看就明白了,呵呵,不用我讲太多吧,整个内容讲的是要求浏览器 中加一个fram,支持javascript的如何,不支持又如何(我头痛)。 好了它实际还是没什么内容,如果你要显示它的广告的话,那就再发src=后面的内容吧,不用我多讲,还是get,不过对我们的作模拟器 的家伙们来讲,速度是$$$$,定不会要它的了(图片不要,如果要点击率的话,可能就要了,否则,一通通没完,你怎知道要的url来了没有; 像8848,它属于二次点击,即广告代码返回src=xxx,ie取出src=后的内容[当然是用get],这时返回才是真正的刷新和要点击的url) 你问上面的get内容是怎么来的???啉呆,我的上一篇讲座你没看?快去看看,《作弊器编程》截包实战,一年级都没读完,现就上初二 了,比我还聪明(^_^) 这样一步又一步,省略n段内容……………………我又没精力写了 告诉你们吧,看了上面的内容,能作什么样的模拟器呢? cashsoldier !!!!!给我力量….!!!!!!! !!!!!!!!!!!《超级广告条自动点击工具 version xxxx,xxx》!!!!!!!!!!!!! 现在大多数广告条(主页上的)都使用二次点击方式,其步骤为: 1.访问你的网页(如我的alin.51.net/right.htm) 2.我主页上有<script src="">这样的内容,从html语法来讲(我不知道是否html语法), ie会get http/1.0 没错吧 3.返回一大堆我看不懂的东西,其中有一句 src=http://ads.my8848.net/show8848.asp?user呵呵,这就是二次内容, (二次点击就这样的吗?有谁知道告诉我) 4.当然,ie 会再次get http/1.0,另外其它的图片就没必要下载了。返回 又一堆,其中有 herf=http://ads.my8848.net/click.asp?user呵呆,这不是要我点击的内容吗?#%%#%$#$#$@$#%$@#$@$%$ 5.还有什么要讲的,我 get … .64.&d,查帐,我的帐号上多了一次点击了,呵呵,刷新?在第4步就完 成了。当然,算算点击率,多刷新,少点几次啦。 不过,这么简单就完成了,照你说的,可我的刷新点击不对呀,没有加点呢!!!!! 什么什么???、???? 我明白了,这还有个问题,8848可知道你从那来的,因此,有个referer标题,看好了 get http/1.0 accept: */* accept-language: zh-cn accept-encoding: gzip, deflate user-agent: mozilla/4.0 (compatible; msie 5.01; windows nt 5.0) host: ads.my8848.net referer:alin.51.net/right.htm //这里一次要写你的广告条码所在位置 proxy-connection: keep-alive cookie: 明白了吗????不明白,拉倒吧你…………. 今天到这里吧,下次再谈了 《作弊器编程》实战系列(二)利用tnmhttp实战fun-lotto ********************************************************************************* 各位好,呵呵,客套话先说一句了。 今天我们开始实战中的第二步,利用tnmhttp控件完成一个fun-lotto的模拟器。 当然,在以往的教程中,并没有过多谈论一些技术上的问题,仅对实现的方法和理论进行了一些论述,在此, 特别郑重宣布,本模拟教程在未指明的情况下,编程工具为delphi,针对的对象是有一定编程能力,对delphi 有一定了解的人;因此,为节省篇幅,针对delphi的一些技术特性在此不用多讲,如果你不懂,请参考相关书籍, 我这里不教delphi(想学的话多交点学费也可以,mm收半价优惠,plmm可全免^_^) 好了,这里因为要用到tnmhttp控件,先对tnmhttp控件的方法和属性做一简单介绍: 我们这里用到的tnmhttp属性和方法有: host:主机名,要联接的对象 proxy:代理服务器ip地址,常用到的 proxyport:端口,因不一定是80或8080 header:得到分解的http头信息,用外还是很大,严格的网战对它要尔很不错的 body:网页正文,返回的具体内容 headerinfo:发出去时的http头信息,极为重要 get方法:在本文中主要使用此方法与网战交互,我不太会用post方法,但post能做的get也能做到,当然, 更复杂的提交方法还是用post,不过在本文中get方法足够用了,所以,本文不讲其它方法,想知道的话请参考其 它相关书籍;问我的话可是先要收费的#%$$%$#%#%%(我打,你这个财迷…..!!!!) 好了,了解了tnmhttp控件的方法后,我们开始往下讲。 tnmhttp控件是delphi自带的第三方控件,它主要用于在程序中与www网站进行交互,取得网页内容等;我们取 得网页的原始内容后,可根据内容进行相应处理,不难做出一个自己的ie浏览器。当然,需要对www有深入的了解 才行。由于它得到的是网页的原始内容,因此你可以很容易地控制网上的流量(很多图片呀,不重要的东西你可以 不下载),这样的做法比用twebbrowser当然速度快多了,当然,还有其它方法能更深入控制网络,我们的教程也 是如此,从twebbrowser->tnmhttp->tclinetsock->winsock这样的教学方式来的,层次越来越高,控制的层次 越来越低,这样的教学很不错吧,想当初%…¥%¥%…%¥%…(大量西红柿、臭鸡蛋呼啸而来…)。 废话少说,我们先到fun-lotto去看一下: fun-lotto是一个make cash网站(废话),它的方法是:选取七个数字,提交,返回另七个数字,如果其中有 相同的数字,呵呵,三个以上就中奖了,奖金多少?我这里就不知道了,不过,如果七个数字全对,呵呵,记得 分我一点$,不要多了,一、两百万够了(我打,哟哟哟哟哟,轻点)。就这样,如有不明白的地方,到它的网 站去看看就明白了。 好了,拿出我们的法宝来。太上老君急急如律令……!!!!!cashsoldier……给我力量吧!!!! 用上次我们的代理程序,准备就绪(什么,代理程序

标签:, ,

相关日志


This entry was posted on 星期一, 03月 17th, 2008 at 6:55 am and is filed under c语言教程. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Reply