如何用算法来防止批量注册最大匹配算法的防范

&1&&&&&&&FormParams:=&Http.HttpGet('/cgi-bin/checkconn?seed0.2269');&///获取checkconn页面内容&2&&&&&&&StrCookie:=&Http.CookieMgr.CookieCollection.Cookie['PCCOOKIE','qq.com'].V&///获取'PCCOOKIE'这个COOKIE里边保存的COOKIE信息&3&&&&&&&StrCookie:=&copy(StrCookie,length(StrCookie)-<span style="color: #,<span style="color: #);&///获取COOKIE的倒数两位&4&&&&&&&&LBase:=&HexToInt(StrCookie);&///将COOKIE倒数两位进行十六进制转换&5&&6&&&&&&&ParamArray[<span style="color: #]:=&'QQ';&///申请类型1&7&&&&&&&ParamArray[<span style="color: #]:=&'EMAIL';&///申请类型2&8&&&&&&&ParamArray[<span style="color: #]:=&'zeze';&///QQ昵称&9&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #';&///QQ性别<span style="color: #&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #85';&///出生年<span style="color: #&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #';&///出生月<span style="color: #&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #';&///出生日<span style="color: #&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #';&///忘记了<span style="color: #&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #';&///忘记了<span style="color: #&&&&&&&ParamArray[<span style="color: #]:=&'abc111111';&///密码<span style="color: #&&&&&&&ParamArray[<span style="color: #]:=&'abc111111';&///重复密码<span style="color: #&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #';&///国家代码<span style="color: #&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #';&///省份代码<span style="color: #&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #';&///区域代码<span style="color: #&&&&&&&ParamArray[<span style="color: #]:=&RndS&///验证码<span style="color: #&<span style="color: #&&&&&&try<span style="color: #&&&&&&&&&SListA:=&FPNSplit(Copy(FormParams,<span style="color: #,<span style="color: #2),',');<span style="color: #&&&&&&&&&SListB:=&FPNSplit(Copy(FormParams,<span style="color: #7,<span style="color: #),',');<span style="color: #&&&&&&&&&///上边的是处理CHECKCONN页面的内容,实际上是JSON格式的,可以直接采用JSON解析,但是我这里嫌麻烦,所以自己用的分割函数直接处理<span style="color: #&&&&&&&&&FormParams:=&'';&///需要提交的变量名<span style="color: #&&&&&&&&&///下边的是对CHECKCONN返回内容的解密算法<span style="color: #&&&&&&&&&for&i&:=&<span style="color: #&to&<span style="color: #&do&begin<span style="color: #&&&&&&&&&&&IdxA:=&StrToInt(SListB[i])&xor&LB<span style="color: #&&&&&&&&&&&IdxB:=&<span style="color: #-i;<span style="color: #&&&&&&&&&&&IdxA:=&IdxA&xor&<span style="color: #18;<span style="color: #&&&&&&&&&&&IdxA:=&IdxA&xor&<span style="color: #15;<span style="color: #&&&&&&&&&&&IdxA:=&IdxA&xor&<span style="color: #23;<span style="color: #&&&&&&&&&&&IdxA:=&IdxA&xor&<span style="color: #52;<span style="color: #&&&&&&&&&&&for&j&:=&<span style="color: #&to&<span style="color: #&do<span style="color: #&&&&&&&&&&&&&IdxA:=&IdxA&xor&<span style="color: #;<span style="color: #&&&&&&&&&&&IdxA:=&IdxA&mod&<span style="color: #;<span style="color: #&<span style="color: #&&&&&&&&&&&FormParams:=&FormParams+&Copy(SListA[IdxB],<span style="color: #,<span style="color: #)+&'='+&ParamArray[IdxA]+&'&';&///这里是构造提交数据信息<span style="color: #&&&&&&&&&end;<span style="color: #&<span style="color: #&&&&&&&finally<span style="color: #&&&&&&&&&SListA.F<span style="color: #&&&&&&&&&SListB.F<span style="color: #&&&&&&&end;<span style="color: #&<span style="color: #&<span style="color: #&
上边通过FormParams变量,将所需要提交的信息保存了下来,接下来我们开始像服务器提交
提交注册,并检测结果
&1&&&&&&&StrResult:=&Http.HttpPost('/cgi-bin/getnum',FormParams,True);&2&&&&&&&Reg:=&TPerlRegEx.Create(nil);&3&&&&&&&try&4&&&&&&&&&Reg.Subject:=&StrR&5&&&&&&&&&Reg.RegEx:=&'您获得的号码为:\&span&id\=\"aq\-uin\"&class\=\"number\"&([\s\S]*?)\&';&6&&&&&&&&&if&Reg.MatchAgain&then&begin&7&&&&&&&&&&&StrQQ:=&Reg.SubExpressions[<span style="color: #];&8&&&&&&&&&&&FPNWriteLnText('注册成功的QQ.txt',StrQQ,False);&9&&&&&&&&&end&else&begin<span style="color: #&&&&&&&&&&&FPNWriteLnText('注册失败线程.txt',TRegData(aDataObj).FId,False);<span style="color: #&&&&&&&&&end;<span style="color: #&&&&&&&finally<span style="color: #&&&&&&&&&Reg.F<span style="color: #&&&&&&&end;<span style="color: #&
以上的过程就完成了腾讯的注册流程,但是仅仅这样是不够的,因为我们所需要的最终目的是多线程,多线程怎么实现呢?我这里采用DELPHI线程池的方式
&1&&&TCoding=&record&///这里是记录打码区的状态&2&&&&&Status:&&&//忙碌1,空闲0,等待用户输入数据2,用户已经输入,等待处理3&3&&&&&ShowBegin:&&//开始显示验证码的时间&4&&&end;&5&&6&&&///线程池中的线程处理类,可以派生,也可以不用派生&7&&&TRegThread&=&class(TPNPoolThread)&8&&&private&9&&&&&MyCodeIdx:&<span style="color: #&&&&&bmp:&TB<span style="color: #&&&&&procedure&ShowImg1;<span style="color: #&&&&&procedure&ShowI<span style="color: #&&&public<span style="color: #&&&&&destructor&D<span style="color: #&&&end;<span style="color: #&<span style="color: #&&&TRegData=&class(TPNTaskObject)<span style="color: #&&&private<span style="color: #&&&&&FId:&S&//编号<span style="color: #&&&public<span style="color: #&&&&&constructor&Create(const&AId:&string);<span style="color: #&&&&&function&Duplicate(DataObj:&TPNTaskO<span style="color: #&&&&&&&const&Processing:&Boolean):&B&&///判断两个任务是否重复,此函数必须在派生类写明<span style="color: #&&&&&function&Info:&string;&override;&&///输出信息,覆盖<span style="color: #&&&end;<span style="color: #&
相关打码区函数
&1&var&2&&&MainForm:&TMainF&3&&&Codings:&array[<span style="color: #..<span style="color: #]&of&TC&4&&&CodingCs:&TPNCriticalS&///申请打码资源的CS&5&&6&&&RegId:&&7&&8&&&StrLog:&string;&///日志数据&9&&&PoolReg:&TPNThreadP&&///线程池<span style="color: #&&&csLog:&TPNCriticalS&&///保存日志的临界区<span style="color: #&<span style="color: #&function&CodingApply:&&&//申请打码显示资源,如果申请成功,返回显示的标号,否则返回-<span style="color: #<span style="color: #&function&CodingRelease(CodeIdx:&Integer):&string;&&//释放显示资源,返回的是打码的信息<span style="color: #&function&CodingWait(CodeIdx:&Integer):&B&//将状态更改为等待<span style="color: #&function&CodingOK(CodeIdx:&Integer):&B&//将状态更改为处理完毕<span style="color: #&function&CodingStatus(CodeIdx:&Integer):&&//获取当前状态<span style="color: #&
具体的线程池设置代码,对于申请打码区资源,及其释放打码区资源,都写得有具体的方案
&&1&&&2&function&CodingApply:&&&3&var&&4&&&i:&&&5&begin&&6&&&CodingCs.E&&7&&&Result:=&-<span style="color: #;&&8&&&try&&9&&&&&for&i&:=&<span style="color: #&to&<span style="color: #&do&begin&10&&&&&&&if&Codings[i].Status=<span style="color: #&then&begin&11&&&&&&&&&Result:=&i;&12&&&&&&&&&Codings[i].Status:=&<span style="color: #;&13&&&&&&&&&B&14&&&&&&&end;&15&&&&&end;&16&&&finally&17&&&&&CodingCs.L&18&&&&&Sleep(<span style="color: #);&19&&&end;&20&end;&21&&22&function&CodingRelease(CodeIdx:&Integer):&string;&23&begin&24&&&if&(CodeIdx&<span style="color: #)&or&(CodeIdx&<span style="color: #)&then&E&25&&&CodingCs.E&26&&&try&27&&&&&try&28&&&&&&&Result:=&TEdit(MainForm.FindComponent('Input'+&IntToStr(CodeIdx))).T&29&&&&&except&30&&&&&&&Result:=&'';&31&&&&&end;&32&&&&&Codings[CodeIdx].Status:=&<span style="color: #;&33&&&finally&34&&&&&CodingCs.L&35&&&&&Sleep(<span style="color: #);&36&&&end;&37&end;&38&&39&function&CodingWait(CodeIdx:&Integer):&B&40&begin&41&&&if&(CodeIdx&<span style="color: #)&or&(CodeIdx&<span style="color: #)&then&E&42&&&Result:=&T&43&&&CodingCs.E&44&&&try&45&&&&&try&46&&&&&&&Codings[CodeIdx].Status:=&<span style="color: #;&47&&&&&except&48&&&&&&&Result:=&F&49&&&&&end;&50&&&finally&51&&&&&CodingCs.L&52&&&&&Sleep(<span style="color: #);&53&&&end;&54&end;&55&&56&function&CodingOK(CodeIdx:&Integer):&B&57&begin&58&&&if&(CodeIdx&<span style="color: #)&or&(CodeIdx&<span style="color: #)&then&E&59&&&Result:=&T&60&&&CodingCs.E&61&&&try&62&&&&&try&63&&&&&&&Codings[CodeIdx].Status:=&<span style="color: #;&64&&&&&except&65&&&&&&&Result:=&F&66&&&&&end;&67&&&finally&68&&&&&CodingCs.L&69&&&&&Sleep(<span style="color: #);&70&&&end;&71&end;&72&function&CodingStatus(CodeIdx:&Integer):&&73&begin&74&&&if&(CodeIdx&<span style="color: #)&or&(CodeIdx&<span style="color: #)&then&E&75&&&CodingCs.E&76&&&try&77&&&&&Result:=&Codings[CodeIdx].S&78&&&finally&79&&&&&CodingCs.L&80&&&&&Sleep(<span style="color: #);&81&&&end;&82&end;&83&&84&constructor&TRegData.Create(const&AId:&string);&85&begin&86&&&FId:=&AId;&87&end;&88&&89&function&TRegData.Duplicate(DataObj:&TPNTaskO&90&&&const&Processing:&Boolean):&B&91&begin&92&&&Result&:=&(not&Processing)&and&93&&&&&(FId&=&TRegData(DataObj).FId);&94&end;&95&&96&function&:&string;&97&begin&98&&&Result:=&'FId='+&FId+&';';&99&end;<span style="color: #0&<span style="color: #1&<span style="color: #2&procedure&TRegThread.ShowImg1;<span style="color: #3&begin<span style="color: #4&&&try<span style="color: #5&&&&&TImage(MainForm.FindComponent('Img'+&IntToStr(MyCodeIdx))).Picture.Assign(bmp);<span style="color: #6&&&&&TEdit(MainForm.FindComponent('Input'+&IntToStr(MyCodeIdx))).Text:=&'';<span style="color: #7&&&except<span style="color: #8&&&end;<span style="color: #9&&&CodingWait(MyCodeIdx);<span style="color: #0&end;<span style="color: #1&procedure&TRegThread.ShowI<span style="color: #2&begin<span style="color: #3&&&Synchronize(ShowImg1);<span style="color: #4&end;<span style="color: #5&destructor&TRegThread.D<span style="color: #6&begin<span style="color: #7&&&try<span style="color: #8&&&&&if&bmp&&nil&then&bmp.F<span style="color: #9&&&except<span style="color: #0&&&end;<span style="color: #1&&&inherited&D<span style="color: #2&end;<span style="color: #3&<span style="color: #4&function&HexToInt(const&S:&String):&DWORD;<span style="color: #5&asm<span style="color: #6&&&PUSH&EBX<span style="color: #7&&&PUSH&ESI<span style="color: #8&<span style="color: #9&&&MOV&ESI,&EAX&//字符串地址<span style="color: #0&&&MOV&EDX,&[EAX-<span style="color: #]&//读取字符串长度<span style="color: #1&<span style="color: #2&&&XOR&EAX,&EAX&//初始化返回值<span style="color: #3&&&XOR&ECX,&ECX&//临时变量<span style="color: #4&<span style="color: #5&&&TEST&ESI,&ESI&//判断是否为空指针<span style="color: #6&&&JZ&@@<span style="color: #<span style="color: #7&&&TEST&EDX,&EDX&//判断字符串是否为空<span style="color: #8&&&JLE&@@<span style="color: #<span style="color: #9&&&MOV&BL,&$<span style="color: #<span style="color: #0&&&@@<span style="color: #:<span style="color: #1&&&MOV&CL,&[ESI]<span style="color: #2&&&INC&ESI<span style="color: #3&<span style="color: #4&&&OR&CL,&BL&//如果有字母则被转换为小写字母<span style="color: #5&&&SUB&CL,&'<span style="color: #'<span style="color: #6&&&JB&@@<span style="color: #&//&&&'<span style="color: #'&的字符<span style="color: #7&&&CMP&CL,&$<span style="color: #<span style="color: #8&&&JBE&@@<span style="color: #&//&'<span style="color: #'..'<span style="color: #'&的字符<span style="color: #9&&&SUB&CL,&'a'-'<span style="color: #'-<span style="color: #<span style="color: #0&&&CMP&CL,&$0A<span style="color: #1&&&JB&@@<span style="color: #&//&&&'a'&的字符<span style="color: #2&&&CMP&CL,&$0F<span style="color: #3&&&JA&@@<span style="color: #&//&&&'f'&的字符<span style="color: #4&&&@@<span style="color: #:&//&'<span style="color: #'..'<span style="color: #',&'A'..'F',&'a'..'f'<span style="color: #5&&&SHL&EAX,&<span style="color: #<span style="color: #6&&&OR&EAX,&ECX<span style="color: #7&&&DEC&EDX<span style="color: #8&&&JNZ&@@<span style="color: #<span style="color: #9&&&JMP&@@<span style="color: #<span style="color: #0&&&@@<span style="color: #:<span style="color: #1&&&XOR&EAX,&EAX&//&非法16进制字符串<span style="color: #2&&&@@<span style="color: #:<span style="color: #3&&&POP&ESI<span style="color: #4&&&POP&EBX<span style="color: #5&&&RET<span style="color: #6&end;<span style="color: #7&<span style="color: #8&procedure&TMainForm.DownProcessRequest(Sender:&TPNThreadP<span style="color: #9&&&aDataObj:&TPNTaskO&aThread:&TPNPoolThread);<span style="color: #0&var<span style="color: #1&&&Http:&TPNH<span style="color: #2&&&i,j,LBase,IdxA,IdxB:&<span style="color: #3&&&RndStr,FormParams,StrResult,StrQQ,StrCookie,StrIP:&string;<span style="color: #4&&&SListA,SListB:&TStringL<span style="color: #5&&&Reg:&TPerlRegEx;<span style="color: #6&&&ParamArray:&array[<span style="color: #..<span style="color: #]&of&string;<span style="color: #7&begin<span style="color: #8&//&&FPNWriteLnText('日志.txt',TRegData(aDataObj).FId+'开始注册',False);<span style="color: #9&&&Http:=&TPNHttp.Create(nil,True,True);<span style="color: #0&&&R<span style="color: #1&&&StrIP:=&'<span style="color: #.193.86.'+&IntToStr(Random(<span style="color: #5)+&<span style="color: #);<span style="color: #2&//&&StrIP:=&IntToStr(Random(<span style="color: #5)+&<span style="color: #)+'.'+&IntToStr(Random(<span style="color: #5)+&<span style="color: #)+'.'+&IntToStr(Random(<span style="color: #5)+&<span style="color: #)+'.'+&IntToStr(Random(<span style="color: #5)+&<span style="color: #);<span style="color: #3&&&Http.Request.CustomHeaders.Add('X-Forwarded-For:'+&StrIP);<span style="color: #4&&&try<span style="color: #5&&&&&try<span style="color: #6&&&&&&&Http.HttpGet('/');<span style="color: #7&//&&&&&&FPNWriteLnText(TRegData(aDataObj).FId+'HEADER信息.txt','首页:'+&Http.HttpHeader,False);<span style="color: #8&&&&&&&TRegThread(aThread).MyCodeIdx:=&CodingA<span style="color: #9&&&&&&&///等待获取打码资源<span style="color: #0&&&&&&&while&TRegThread(aThread).MyCodeIdx=-<span style="color: #&do&begin<span style="color: #1&&&&&&&&&sleep(<span style="color: #0);<span style="color: #2&&&&&&&&&TRegThread(aThread).MyCodeIdx:=&CodingA<span style="color: #3&&&&&&&end;<span style="color: #4&&&&&&&try<span style="color: #5&&&&&&&&&TRegThread(aThread).Bmp:=&Http.HttpBmp('/getimage?aid=.1837');<span style="color: #6&&&//&&&&&&FPNWriteLnText(TRegData(aDataObj).FId+'HEADER信息.txt','验证码:'+&Http.HttpHeader,False);<span style="color: #7&&&&&&&&&TRegThread(aThread).ShowI<span style="color: #8&&&&&&&finally<span style="color: #9&&&&&&&&&if&TRegThread(aThread).Bmp&&nil&then<span style="color: #0&&&&&&&&&&&TRegThread(aThread).Bmp.F<span style="color: #1&&&&&&&end;<span style="color: #2&&&&&&&while&CodingStatus(TRegThread(aThread).MyCodeIdx)=<span style="color: #&do&begin<span style="color: #3&&&&&&&&&Sleep(<span style="color: #0);<span style="color: #4&&&&&&&end;<span style="color: #5&&&&&&&RndStr:=&CodingRelease(TRegThread(aThread).MyCodeIdx);<span style="color: #6&//&&&&&&FPNWriteLnText('日志.txt',TRegData(aDataObj).FId+':RndStr='+&RndStr,False);<span style="color: #7&&&&&&&FormParams:=&Http.HttpGet('/cgi-bin/checkconn?seed0.2269');<span style="color: #8&//&&&&&&FPNWriteLnText(TRegData(aDataObj).FId+'HEADER信息.txt','CheckConn:'+&Http.HttpHeader,False);<span style="color: #9&//&&&&&&FPNWriteLnText(TRegData(aDataObj).FId+'数据日志.txt','返回的参数集:'+&FormParams,False);<span style="color: #0&//&&&&&&FormParams:=&Copy(FormParams,<span style="color: #,<span style="color: #2);<span style="color: #1&&&&&&&StrCookie:=&Http.CookieMgr.CookieCollection.Cookie['PCCOOKIE','qq.com'].V<span style="color: #2&//&&&&&&FPNWriteLnText(TRegData(aDataObj).FId+'数据日志.txt','PCCOOKIE值为:'+&StrCookie,False);<span style="color: #3&&&&&&&StrCookie:=&copy(StrCookie,length(StrCookie)-<span style="color: #,<span style="color: #);<span style="color: #4&//&&&&&&FPNWriteLnText(TRegData(aDataObj).FId+'数据日志.txt','LBASE值为:'+&StrCookie,False);<span style="color: #5&&&&&&&LBase:=&HexToInt(StrCookie);<span style="color: #6&<span style="color: #7&&&&&&&ParamArray[<span style="color: #]:=&'QQ';<span style="color: #8&&&&&&&ParamArray[<span style="color: #]:=&'EMAIL';<span style="color: #9&&&&&&&ParamArray[<span style="color: #]:=&'zeze';<span style="color: #0&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #';<span style="color: #1&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #85';<span style="color: #2&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #';<span style="color: #3&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #';<span style="color: #4&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #';<span style="color: #5&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #';<span style="color: #6&&&&&&&ParamArray[<span style="color: #]:=&'abc111111';<span style="color: #7&&&&&&&ParamArray[<span style="color: #]:=&'abc111111';<span style="color: #8&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #';<span style="color: #9&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #';<span style="color: #0&&&&&&&ParamArray[<span style="color: #]:=&'<span style="color: #';<span style="color: #1&&&&&&&ParamArray[<span style="color: #]:=&RndS<span style="color: #2&&&&&&try<span style="color: #3&&&&&&&&&SListA:=&FPNSplit(Copy(FormParams,<span style="color: #,<span style="color: #2),',');<span style="color: #4&&&&&&&&&SListB:=&FPNSplit(Copy(FormParams,<span style="color: #7,<span style="color: #),',');<span style="color: #5&//&&&&&&&&FPNWriteLnText(TRegData(aDataObj).FId+'数据日志.txt',Copy(FormParams,<span style="color: #7,<span style="color: #),False);<span style="color: #6&&&&&&&&&FormParams:=&'';<span style="color: #7&&&&&&&&&for&i&:=&<span style="color: #&to&<span style="color: #&do&begin<span style="color: #8&&&&&&&&&&&IdxA:=&StrToInt(SListB[i])&xor&LB<span style="color: #9&&&&&&&&&&&IdxB:=&<span style="color: #-i;<span style="color: #0&&&&&&&&&&&IdxA:=&IdxA&xor&<span style="color: #18;<span style="color: #1&&&&&&&&&&&IdxA:=&IdxA&xor&<span style="color: #15;<span style="color: #2&&&&&&&&&&&IdxA:=&IdxA&xor&<span style="color: #23;<span style="color: #3&&&&&&&&&&&IdxA:=&IdxA&xor&<span style="color: #52;<span style="color: #4&&&&&&&&&&&for&j&:=&<span style="color: #&to&<span style="color: #&do<span style="color: #5&&&&&&&&&&&&&IdxA:=&IdxA&xor&<span style="color: #;<span style="color: #6&&&&&&&&&&&IdxA:=&IdxA&mod&<span style="color: #;<span style="color: #7&//&&&&&&&&&&FPNWriteLnText(TRegData(aDataObj).FId+'数据日志.txt','IdxA:'+&IntToStr(IdxA),False);<span style="color: #8&<span style="color: #9&&&&&&&&&&&FormParams:=&FormParams+&Copy(SListA[IdxB],<span style="color: #,<span style="color: #)+&'='+&ParamArray[IdxA]+&'&'<span style="color: #0&&&&&&&&&end;<span style="color: #1&<span style="color: #2&//&&&&&&&&FormParams:=&Copy(SList[<span style="color: #],<span style="color: #,<span style="color: #)+&'=1&'+&Copy(SList[<span style="color: #],<span style="color: #,<span style="color: #)+&'=1&'+&Copy(SList[<span style="color: #],<span style="color: #,<span style="color: #)+&'=pop&'<span style="color: #3&//&&&&&&&&&&+&Copy(SList[<span style="color: #],<span style="color: #,<span style="color: #)+&'=1983&'+&Copy(SList[<span style="color: #],<span style="color: #,<span style="color: #)+&'='+&RndStr+'&'&+&Copy(SList[<span style="color: #],<span style="color: #,<span style="color: #)+&'=1&'<span style="color: #4&//&&&&&&&&&&+&Copy(SList[<span style="color: #],<span style="color: #,<span style="color: #)+&'=lovezeze&'+&Copy(SList[<span style="color: #],<span style="color: #,<span style="color: #)+&'=pop&'+&Copy(SList[<span style="color: #],<span style="color: #,<span style="color: #)+&'=0&'<span style="color: #5&//&&&&&&&&&&+&Copy(SList[<span style="color: #],<span style="color: #,<span style="color: #)+&'=1&'+&Copy(SList[<span style="color: #],<span style="color: #,<span style="color: #)+&'=2&'+&Copy(SList[<span style="color: #],<span style="color: #,<span style="color: #)+&'=11&'<span style="color: #6&//&&&&&&&&&&+&Copy(SList[<span style="color: #],<span style="color: #,<span style="color: #)+&'=1';<span style="color: #7&&&&&&&finally<span style="color: #8&&&&&&&&&SListA.F<span style="color: #9&&&&&&&&&SListB.F<span style="color: #0&&&&&&&end;<span style="color: #1&&&&&&&for&i&:=&<span style="color: #&to&Http.CookieMgr.CookieCollection.Count&-&<span style="color: #&do<span style="color: #2&&&&&&&&&StrCookie:=&StrCookie+&Http.CookieMgr.CookieCollection.Items[i].CookieName+&':'<span style="color: #3&&&&&&&&&+&Http.CookieMgr.CookieCollection.Items[i].CookieT<span style="color: #4&&&&&&&StrResult:=&Http.HttpPost('/cgi-bin/getnum',FormParams,True);<span style="color: #5&//&&&&&&FPNWriteLnText(TRegData(aDataObj).FId+'HEADER信息.txt','POST时候:'+&Http.HttpHeader,False);<span style="color: #6&//&&&&&&FPNWriteLnText(TRegData(aDataObj).FId+'数据日志.txt','提交COOKIE为:'+&StrCookie,False);<span style="color: #7&//&&&&&&FPNWriteLnText(TRegData(aDataObj).FId+'数据日志.txt','提交参数为:'+&FormParams,False);<span style="color: #8&//&&&&&&FPNWriteLnText(TRegData(aDataObj).FId+'返回数据.txt',StrResult,False);<span style="color: #9&&&&&&&Reg:=&TPerlRegEx.Create(nil);<span style="color: #0&&&&&&&try<span style="color: #1&&&&&&&&&Reg.Subject:=&StrR<span style="color: #2&&&&&&&&&Reg.RegEx:=&'您获得的号码为:\&span&id\=\"aq\-uin\"&class\=\"number\"&([\s\S]*?)\&';<span style="color: #3&&&&&&&&&if&Reg.MatchAgain&then&begin<span style="color: #4&&&&&&&&&&&StrQQ:=&Reg.SubExpressions[<span style="color: #];<span style="color: #5&&&&&&&&&&&FPNWriteLnText('注册成功的QQ.txt',StrQQ,False);<span style="color: #6&&&&&&&&&end&else&begin<span style="color: #7&&&&&&&&&&&FPNWriteLnText('注册失败线程.txt',TRegData(aDataObj).FId,False);<span style="color: #8&&&&&&&&&end;<span style="color: #9&//&&&&&&&&FPNWriteLnText(TRegData(aDataObj).FId+'匹配结果.txt',StrResult,False);<span style="color: #0&&&&&&&finally<span style="color: #1&&&&&&&&&Reg.F<span style="color: #2&&&&&&&end;<span style="color: #3&&&&&except<span style="color: #4&<span style="color: #5&&&&&end;<span style="color: #6&&&finally<span style="color: #7&&&&&Http.F<span style="color: #8&&&end;<span style="color: #9&end;<span style="color: #0&<span style="color: #1&procedure&TMainForm.btn1Click(Sender:&TObject);<span style="color: #2&var<span style="color: #3&&&i:&<span style="color: #4&begin<span style="color: #5&&&for&i&:=&<span style="color: #&to&StrToInt(RegNum.Text)&do&begin<span style="color: #6&&&&&RegId:=&RegId+&<span style="color: #;<span style="color: #7&&&&&PoolReg.AddRequest(TRegData.Create(IntToStr(RegId)));<span style="color: #8&&&end;<span style="color: #9&end;<span style="color: #0&<span style="color: #1&procedure&TMainForm.FormCreate(Sender:&TObject);<span style="color: #2&begin<span style="color: #3&&&RegId:=&<span style="color: #;<span style="color: #4&&&CodingCs:=&TPNCriticalSection.C<span style="color: #5&&&PoolReg&:=&TPNThreadPool.Create(nil);<span style="color: #6&&&with&PoolReg&do&begin<span style="color: #7&&&&&OnProcessRequest&:=&DownProcessR&///线程处理函数<span style="color: #8&&&&&AdjustInterval&:=&<span style="color: #&*&<span style="color: #00;&///减少线程间隔时间,<span style="color: #秒<span style="color: #9&&&&&MinAtLeast&:=&F&&///是否设置最小线程数<span style="color: #0&&&&&ThreadDeadTimeout&:=&<span style="color: #&*&<span style="color: #00;&///线程死亡超时时间<span style="color: #1&&&&&ThreadsMinCount&:=&<span style="color: #;&///最小线程数<span style="color: #2&&&&&ThreadsMaxCount&:=&<span style="color: #;&&///最大线程数<span style="color: #3&&&&&uTerminateWaitTime&:=&<span style="color: #&*&<span style="color: #00;&///挂起等待时间<span style="color: #4&&&end;<span style="color: #5&<span style="color: #6&end;<span style="color: #7&<span style="color: #8&procedure&TMainForm.FormDestroy(Sender:&TObject);<span style="color: #9&begin<span style="color: #0&&&PoolReg.F<span style="color: #1&&&CodingCs.F<span style="color: #2&end;<span style="color: #3&<span style="color: #4&procedure&TMainForm.Input1KeyPress(Sender:&TO&var&Key:&Char);<span style="color: #5&var<span style="color: #6&&&CodeIdx:&<span style="color: #7&&&ObjName:&string;<span style="color: #8&begin<span style="color: #9&&&if&Key=&Char(<span style="color: #)&then&begin<span style="color: #0&&&&&ObjName:=&(Sender&as&TRzEdit).N<span style="color: #1&&&&&CodeIdx:=&StrToInt(Copy(ObjName,<span style="color: #,<span style="color: #));<span style="color: #2&&&&&CodingOK(CodeIdx);<span style="color: #3&&&&&if&CodeIdx=<span style="color: #&then<span style="color: #4&&&&&&&CodeIdx:=&<span style="color: #<span style="color: #5&&&&&else<span style="color: #6&&&&&&&CodeIdx:=&CodeIdx+&<span style="color: #;<span style="color: #7&&&&&TRzEdit(FindComponent('Input'+&IntToStr(CodeIdx))).SetF<span style="color: #8&&&end;<span style="color: #9&end;<span style="color: #0&
本文只是对QQ注册页面进行一些分析,供大家参考,其实大家在做WEB设计的时候,如何防止批量注册这块,也可以参考下QQ,比较变态一些,但是感觉腾讯做的还不完善。}

我要回帖

更多关于 如何防止批量注册 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信