宝峰科技

 找回密码
 注册

QQ登录

只需一步,快速开始

智能终端设备维修查询系统注册会员邮箱认证须知!
查看: 4226|回复: 2

[页游辅助图文教程] 易语言+HttpWatch分析并编写Discuz! X1.51论坛管理器第七课

[复制链接]
  • TA的每日心情
    奋斗
    2020-6-5 22:18
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    潇潇 发表于 2012-3-27 22:06:06 | 显示全部楼层 |阅读模式
    前面我们讲了论坛验证码及相关参数的获取,今天我们来讲论坛账号登陆。我们每次讲课都离不开HttpWatch这个工具,还是先把获取登陆部分的数据截出来,先来个截图:

    上图为账号正确登陆时截取的图片,上图中第一条数据相关信息:
    1、第一条数据:
    + 0.000        0.225    1199    1364    POST    200    text/xml; charset=gbk    http://demo.wgbcw.com/dzx151gbk/member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=LUOLP&inajax=1

    2、Headers:
    (Request-Line)    POST /dzx151gbk/member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=LUOLP&inajax=1 HTTP/1.1
    Accept    image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
    Accept-Encoding    gzip, deflate
    Accept-Language    zh-cn
    Cache-Control    no-cache
    Connection    Keep-Alive
    Content-Length    233
    Content-Type    application/x-www-form-urlencoded
    Cookie    6Qvx_2132_sid=gBO1Qz; 6Qvx_2132_lastvisit=1332846467; 6Qvx_2132_lastact=1332850222%09misc.php%09seccode; _D_SID=973C78A4; 6Qvx_2132_seccodeSec1x=e453Jr%2BO1K20al8oJFEMUyaLm70FnJAt%2FQQtkmcYsEBeXtAFoK5fxlXkINBPlIdbaao2f%2FaTT1qhU8I
    Host    demo.wgbcw.com
    Referer    http://demo.wgbcw.com/dzx151gbk/forum.php
    User-Agent    Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)

    3、Query String:
    action    login
    handlekey    login
    inajax    1
    loginhash    LUOLP
    loginsubmit    yes
    mod    logging

    4、POST Data:
    auth    99510J3IpSyUBKLIfABJFFHqA+hGL5V3sl282/FCo3pmWUnV0xH7/TBXewY    70
    formhash    a87678d1    17
    loginsubmit    <STRONG>&#188;</STRONG>    51
    referer    http://demo.wgbcw.com/dzx151gbk/forum.php    59
    seccodeverify    e983    18
    sechash    Sec1x    13

    5、Content:
    1. <?xml version="1.0" encoding="gbk"?>
    2. <root><![CDATA[<script type="text/javascript" reload="1">if(typeof succeedhandle_login=='function') {succeedhandle_login('http://demo.wgbcw.com/dzx151gbk/forum.php', '欢迎你回来,wgbcw1。现在将转入登录前页面。', {'username':'wgbcw1','usergroup':'实习版主','uid':'2','groupid':'16','syn':'0'});}hideWindow('login');showDialog('欢迎你回来,wgbcw1。现在将转入登录前页面。', 'notice', null, function () { window.location.href ='http://demo.wgbcw.com/dzx151gbk/forum.php'; }, 0, null, null, null, null, null, 3);</script>]]></root>
    复制代码
    6、Stream:
    POST /dzx151gbk/member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=LUOLP&inajax=1 HTTP/1.1
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
    Referer: http://demo.wgbcw.com/dzx151gbk/forum.php
    Accept-Language: zh-cn
    Content-Type: application/x-www-form-urlencoded
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)
    Host: demo.wgbcw.com
    Content-Length: 233
    Connection: Keep-Alive
    Cache-Control: no-cache
    Cookie: 6Qvx_2132_sid=gBO1Qz; 6Qvx_2132_lastvisit=1332846467; 6Qvx_2132_lastact=1332850222%09misc.php%09seccode; _D_SID=973C78A4; 6Qvx_2132_seccodeSec1x=e453Jr%2BO1K20al8oJFEMUyaLm70FnJAt%2FQQtkmcYsEBeXtAFoK5fxlXkINBPlIdbaao2f%2FaTT1qhU8I

    formhash=a87678d1&referer=http%3A%2F%2Fdemo.wgbcw.com%2Fdzx151gbk%2Fforum.php&auth=99510J3IpSyUBKLIfABJFFHqA%2BhGL5V3sl282%2FFCo3pmWUnV0xH7%2FTBXewY&sechash=Sec1x&seccodeverify=e983&loginsubmit=%3CSTRONG%3E%B5%C7%C2%BC%3C%2FSTRONG%3E

    从所获得的数据中不难看出,这条数据的HTTP通信方式为POST,我们先看下在易语言中所编写自定义的POST子程序的代码片段:
    1. .版本 2

    2. .子程序 POST, 字节集, , http post
    3. .参数 URL, 文本型
    4. .参数 附加数据, 文本型, , PostData
    5. .参数 返回内容, 文本型
    6. .局部变量 请求句柄, 整数型
    7. .局部变量 协议头, 文本型, , , Headers
    8. .局部变量 dwByteRead, 整数型
    9. .局部变量 临时文本, 文本型
    10. .局部变量 返回数据, 字节集
    11. .局部变量 临时数据, 字节集
    复制代码
    根据上面的子程序我们先来找下参数:
    第一个参数:
    URLhttp://demo.wgbcw.com/dzx151gbk/member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=LUOLP&inajax=1;另外也可参数 Query String;补充:在测试过程中发现URL的“loginhash”是个变化的值,那我们同样在第二课中的返回数据中获取。先定义个全局变量“loginhash”,获取此值的代码为:
    1. .版本 2

    2.         loginhash = 取指定文本后N个字符 (临时文本, “main_messaqge_”, 5)  ' 第七课中增加
    3.         loginhash = 取文本右边 (loginhash, 5)   ' 第七课中增加
    4.         输出调试文本 (“main_messaqge_========” + loginhash)  ' 第七课中增加
    复制代码

    第二个参数:附加数据为 POST Data;
    第三个参数:
    不难看出如果此函数执行成功的话,应该返回的数据就是上面的Content部分。另所截取的数据中Headers较前面几课而言Content-Length有所变化,我们在编程时一定要注意这点。
    现在我们关键来看来附加数据 POST Data部分:
    1、auth
    的值为 99510J3IpSyUBKLIfABJFFHqA+hGL5V3sl282/FCo3pmWUnV0xH7/TBXewY这么长的字符串(易语言中称文本),是不是感觉在那里见过呢?呵呵当然了,我们在第二课代码测试中就出现过和这相似的字符串,那我们就在那取出来就行了。我们在易语言中定义个全局变量 auth,然后在第二课的返回数据代码中获取:
    1. auth = 取指定文本 (临时文本, “auth=”, “referer”, 1)  ' 第七课中增加
    复制代码
    2、formhash的值为a87678d1,经查看这个值同样在第二课中的返回数据中出现(因前面一直没用过这个值,现在还不知道我们用这值是否是正确的,当然第二课的返回数据中有这个值,我们用上先测试。)第二课中返回数据中第一次出现的地方截图如下:

    经分析,第一次出现“formhash”的地方,刚好也是“value=”第一次出现,我们就利用“value=”和“ />”(注意这字符前有一个空格)来取出formhash这个值,我们还是把上图中红色框部分的代码复制出来:
    1. <input type="hidden" name="formhash" value="b2439da5" />
    复制代码
    根据网页代码相关知识可知formhash的值应该是上面红色字符部分,在写代码时要注意这点。在易语言中取formhash的代码如下:
    1. .版本 2

    2.         formhash = 取指定文本 (临时文本, “value=”, “ />”, 1)  ' 这样取得字符串为“"b2439da5"” ' 第七课中增加
    3.         formhash = 取文本中间 (formhash, 2, 8)  ' 去掉引号 ' 第七课中增加
    4.         输出调试文本 (“formhash========” + formhash)  ' 第七课中增加
    复制代码
    3、loginsubmit的值为<STRONG>&#188;</STRONG>,经分析这个值在前面几课中没出现过,我们暂且用这个值来测试。
    4、referer的值为 http://demo.wgbcw.com/dzx151gbk/forum.php,这个值就不说了,您懂得。
    5、seccodeverify的值为 e983,这个值在HttpWatch中实际上就是验证码。
    6、sechash 的值为 Sec1x,经分析实际上这个值就是我们上一课所讲的 idhash。
    分析了附加数据的几个值,我们现在可以来写登陆网站的代码了,代码编写中……

    补充:
    另外我们再看下Stream中的“formhash=a87678d1&referer=http%3A%2F%2Fdemo.wgbcw.com%2Fdzx151gbk%2Fforum.php&auth=99510J3IpSyUBKLIfABJFFHqA%2BhGL5V3sl282%2FFCo3pmWUnV0xH7%2FTBXewY&sechash=Sec1x&seccodeverify=e983&loginsubmit=%3CSTRONG%3E%B5%C7%C2%BC%3C%2FSTRONG%3E”,实际上这段字符串就是POSTData的数据,我们在易语言中的代码写为:
    1. POSTData = “formhash=” + formhash + “&referer=” + Request.Referer + “&auth=” + auth + “&sechash=” + idhash + “&seccodeverify=” + 验证码校验.内容 + “&loginsubmit=<STRONG>&#188;</STRONG>”
    复制代码
    经测试易语言代码编辑器中不支持像“&#188;”Unicode编码的特殊字符,还在想办法解决中……
    呵呵找到解决办法有两种:
    1、用Stream文本中的“%3CSTRONG%3E%B5%C7%C2%BC%3C%2FSTRONG%3E来代替“<STRONG>&#188;</STRONG>”。
    2、另外我用了Delphi XE编写了个DLL文件来调用,效果也不错,这是首先想到的方法。上面的方法是在测试中想到的。因我们用易语言编写代码,那就用第一种方法好了。

    论坛登陆部分核心代码如下:
    1. .版本 2

    2. .子程序 登陆论坛
    3. .局部变量 URL, 文本型
    4. .局部变量 POSTData, 文本型
    5. .局部变量 返回内容, 文本型

    6. Request.Accept = “image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*”
    7. Request.AcceptEncoding = “gzip,deflate”
    8. Request.AcceptLanguage = “zh-cn”
    9. Request.CacheControl = “no-cache”
    10. Request.Connection = “Keep-Alive”
    11. ' Request.ContentLength = 233
    12. Request.ContentType = “application/x-www-form-urlencoded”
    13. Request.Host = “demo.wgbcw.com”
    14. Request.Referer = “http://demo.wgbcw.com/dzx151gbk/forum.php”
    15. Request.UserAgent = “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)”

    16. URL = “/dzx151gbk/member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=” + loginhash + “&inajax=1”
    17. ' formhash=a87678d1&referer=http%3A%2F%2Fdemo.wgbcw.com%2Fdzx151gbk%2Fforum.php&auth=99510J3IpSyUBKLIfABJFFHqA%2BhGL5V3sl282%2FFCo3pmWUnV0xH7%2FTBXewY&sechash=Sec1x&seccodeverify=e983&loginsubmit=%3CSTRONG%3E%B5%C7%C2%BC%3C%2FSTRONG%3E

    18. POSTData = “formhash=” + formhash + “&referer=” + Request.Referer + “&auth=” + auth + “&sechash=” + idhash + “&seccodeverify=” + 验证码校验.内容 + “&loginsubmit=%3CSTRONG%3E%B5%C7%C2%BC%3C%2FSTRONG%3E”

    19. Request.ContentLength = 取文本长度 (POSTData) ‘第七课增加
    20. POST (URL, POSTData, 返回内容)
    21. 调试窗口.编辑框1.加入文本 (“正常登陆论坛时返回=======” + 返回内容)
    22. 取Cookie并设置 (“http://” + Request.Host + URL)

    23. .如果 (寻找文本 (返回内容, “欢迎你回来”, , 假) ≠ -1)
    24.     信息框 (“论坛登陆成功。”, 0, “登陆提示”)
    25. .否则
    26.     信息框 (“论坛登陆失败。”, 0, “登陆提示”)
    复制代码
    登陆成功时的截图:

    在本课登陆论坛测试中,发现个问题,因第二课中所取的auth值的长度不固定,导至原所写的代码有时能登陆成功有时登陆失败。经检查,上面代码的"Request.ContentLength = 取文本长度 (POSTData)"就直接取POSTData文本的长度就可以,我们在POST子程序里的Headers(协议头)中用到:
    1. 协议头 = “Accept:” + Request.Accept + #换行符 + “Accept-Encoding:” + Request.AcceptEncoding + #换行符 + “Accept-Language:” + Request.AcceptLanguage + #换行符 + “Cache-Control:” + Request.CacheControl + #换行符 + “Connection:” + Request.Connection + #换行符 + “Content-Length:” + 到文本 (Request.ContentLength) + #换行符 + “Content-Type:” + Request.ContentType + #换行符 + “Host:” + Request.Host + #换行符 + “Referer:” + Request.Referer + #换行符 + “User-Agent:” + Request.UserAgent
    复制代码

    好了本课内容就到这里,有不懂的地方就回帖寻问吧,呵呵。



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?注册

    x

    该用户从未签到

    浪漫可乐 发表于 2012-3-29 16:55:26 | 显示全部楼层
    话说,我看着头都晕了。
  • TA的每日心情
    奋斗
    2020-6-5 22:18
  • 签到天数: 22 天

    [LV.4]偶尔看看III

     楼主| 潇潇 发表于 2012-3-31 00:04:48 | 显示全部楼层
    呵呵内容已经增加,有兴趣的可以继续看了。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    免责声明

    本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件编程开发或软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习编程开发技术或逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者用于商业用途!否则,一切后果请用户自负!

    QQ|Archiver|手机版|小黑屋|联系我们|宝峰科技 ( 滇公网安备 53050202000040号 | 滇ICP备09007156号-2 )

    Copyright © 2001-2023 Discuz! Team. GMT+8, 2024-3-29 16:59 , File On Powered by Discuz! X3.49

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