模拟登录一个网站,用抓包工具得到post数据如下
userName=csdn529
password=ff1544161dbc39615727835782ab21bc
passpod=
category=
__validationToken__=tdfhrya3wflbc6n7xskbd4pvha5gfzx6
__validationDna__=password明显是加密了
多次测试发现password、__validationToken__每次post时都是变化的
求高手帮忙测试下,给个post的代码,谢谢了!!测试账号:csdn529
密码:csdn529
登录地址https://passport.5173.com/?returnUrl=http%3a%2f%2fwww.5173.com%2f
userName=csdn529
password=ff1544161dbc39615727835782ab21bc
passpod=
category=
__validationToken__=tdfhrya3wflbc6n7xskbd4pvha5gfzx6
__validationDna__=password明显是加密了
多次测试发现password、__validationToken__每次post时都是变化的
求高手帮忙测试下,给个post的代码,谢谢了!!测试账号:csdn529
密码:csdn529
登录地址https://passport.5173.com/?returnUrl=http%3a%2f%2fwww.5173.com%2f
后者貌似不可取,意义不大,第一种的可能性较大,httpwatch跟踪一下浏览器请求记录就知道了
至于状态字段的变化,那是必须的,你不能指望手动post一个固定的内容,动态获取,然后再POST过去,包括cookie代码可以参考这个资源:
http://download.csdn.net/source/2277988
加密方法好像是取了md5(password)的后一半,再加上一个send参数(一个字符串,每次都变,不知道怎么来的)后,在用md5加密,昨晚调试的,现在记得也不是很清楚了,我对那个调试工具也不懂,所以调不出具体地思路来,现在就是要知道password具体地加密方法和__validationToken__值具体是怎么来的
另:回楼上的,我是动态获取然后再POST过去包括cookie的,但现在登录的post必须要先做好的。
上面有朋友问网址,我已经发了一次的,我再发下
登录地址https://passport.5173.com/?returnUrl=http%3a%2f%2fwww.5173.com%2f
抓包工具:HttpAnal
麻烦大家都帮我调试下了,非常感谢
用firefox+firebug分析登陆网页,登陆网页调用了passportuserlogin脚本文件,
passportuserlogin脚本文件在地址https://security.5173.com/security/clientBroker/下面
在上面地址的脚本里发现了所有需要的数据
p = hex_md5(hex_md5(p).substr(8, 16) + seed);//加密方法在119行
getPassword('k3qmkp');// 283行的这个k3qmkp就是上面加密用的seed
这个seed每次刷新登陆网页都会变化,但在passportuserlogin脚本文件里每次都用明文显示
现在问题是怎么在程序里得到这个seed呢?我直接用HttpWebRequest来获取
https://security.5173.com/security/clientBroker/passportuserlogin
里面的内容,显示的脚本只是我前面跟踪的一部分,没有我需要的数据
盼高手帮忙解决下,谢谢了
需要 Microsoft.Http.dll, Microsoft.Http.Extension.dll
下载地址:http://aspnet.codeplex.com/releases/view/24644
当然也可以直接用 HttpWebRequest。
下面代码运行后,应该是跳转到:var url = unescape("http%3a%2f%2fwww.5173.com%2f");
lz自己接着搞吧。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Http;
using System.Security.Cryptography;
using System.Text.RegularExpressions;class Program
{
static void Main(string[] args)
{
var client = new HttpClient();
var get = client.Get("https://security.5173.com/Security/ClientBroker/PassportUserLogin").Content.ReadAsString();
var regex4token = new Regex("(?is)<input id=\"__validationToken__\" name=\"__validationToken__\" type=\"hidden\" value=\"(.*?)\" />");
var match = regex4token.Match(get);
if (!match.Success)
{
Console.WriteLine("failed");
return;
}
var token = match.Groups[1].Value;
Console.WriteLine(token);
var regex4seed = new Regex(@"(?is)tpm\.getPassword\('(.*?)'\);");
match = regex4seed.Match(get);
if (!match.Success)
{
Console.WriteLine("failed");
return;
}
var seed = match.Groups[1].Value;
Console.WriteLine(seed);
var user = "csdn529";
var passwd = GetPasswd("csdn529", seed);
Console.WriteLine(passwd);
client.DefaultHeaders.Add("Referer", "https://passport.5173.com/?returnUrl=http%3a%2f%2fwww.5173.com%2f");
client.DefaultHeaders.Add("Origin", "https://passport.5173.com");
client.DefaultHeaders.Add("Cookie", "__utmz=1.1306665492.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utma=1.1232420102.1306665492.1306665492.1306665492.1; __utmc=1; __utmb=1.1.10.1306665492");
var body = new HttpUrlEncodedForm();
body.Add("userName", user);
body.Add("password", passwd);
body.Add("passpod", "");
body.Add("category", "");
body.Add("__validationToken__", token);
body.Add("__validationDna__", "");
var post = client.Post("https://passport.5173.com/?returnUrl=http%3a%2f%2fwww.5173.com%2f", body.CreateHttpContent());
Console.WriteLine(post.StatusCode);
Console.Read();
} static string GetPasswd(string passwd, string seed)
{
return Md5(Md5(passwd).Substring(8, 16) + seed);
} static string Md5(string str)
{
MD5 m = new MD5CryptoServiceProvider();
byte[] s = m.ComputeHash(UnicodeEncoding.UTF8.GetBytes(str));
return BitConverter.ToString(s).Replace("-", "").ToLower();
}
}
我怎么使用firebug httpanl 都找不到那