ホームページ >バックエンド開発 >Python チュートリアル >Python を使用して Dr.com にログインするためのアイデアとコード共有

Python を使用して Dr.com にログインするためのアイデアとコード共有

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-16 08:43:361300ブラウズ

前提条件: ISP は Web ログインをサポートしている必要があります。

注: 各 ISP のログイン ページは異なりますが、アルゴリズムは同じであると推定されるため、解決策も同様になるはずですが、フォームのキーは異なる場合があります。

まず、ログインページを分析します。

ページの先頭には 3f1c4e4b6b16bbbd69b2ee476dc4f83a タグが埋め込まれており、送信関連のスクリプトはすべてここにあります。ページの重要な部分は、f1 と f0 の 2 つの形式です。 f0 全体は表示されませんが、f1 の submit をクリックすると、f0 の submit 自体が submit されるのではなく、直接呼び出されます。フォームのテーブルレイアウトには文句は言えません...

HTML の一部

<form name="f1" method="post" action="" onsubmit="return ee()">
<table border="0" width="100%" cellspacing="1" cellpadding="0" height="100%" class="f1">
...
<tr>
<td height="34" width="35%" align="right">账号 Account </td><td height="34" width="64%"> <input name="DDDDD" type="text" maxlength="26" class="input-border"></td>
</tr>

<tr>
<td height="32" width="35%" align="right">密码 Password </td><td height="32" width="64%"> <input name="upass" type="password" maxlength="16" class="input-border"></td>
</tr>

<tr>
<td height="57" width="35%"> </td><td height="57" width="64%"> <input type="submit" name="0MKKey" value="" onclick="cc(0)" class="login-b">  <input type="submit" name="" value="" onclick="reset();return false;"></td>
</tr>
...
</form>

ここでわかるように、送信をクリックすると cc(0) が呼び出され、送信すると ee() 関数が呼び出されます

js の一部:

function cc(ss) {
 f0.R1.value = ss;
}

function ee() {
 if (f1.DDDDD.value == "") {
  alert("请输入您的账号 Please enter your account account number");
  return false;
 }
 f0.DDDDD.value = f1.DDDDD.value
 if (ps == 0) {
  f0.upass.value = xproc1(f1.upass.value);
 } else {
  tmpchar = pid + f1.upass.value + calg;
  f0.upass.value = calcMD5(tmpchar) + calg + pid;
  f0.R2.value = 1;
 }
 document.f0.submit();
 return false;
}

明らかに、送信をクリックすると、一連の割り当てが f0 に行われ、問題がなければ f0 が送信されます。

f0:

<form name="f0" method="post" action=""><input type="hidden" name="DDDDD" value="0"><input type="hidden" name="upass" value="0">
<input type="hidden" name="R1" value="0"><input type="hidden" name="R2" value="0"><input type="hidden" name="para" value="00">
<input type="hidden" name="0MKKey" value="123456">
</form>

js の内容を参照してください。Python の dict を使用して f0 を表す場合、次の疑似コードが得られます。

f0={}
 f0["DDDDD"] = f1['DDDD']
 f0["upass"] = calcMD5(pid + f1['upass'] + calg) + calg + pid;
 f0["R1"] = ss
 f0["R2"] = 1
 f0["para"] = 00
 f0["0MKKey"] = 123456

このうち、ss、pid、calg はすべて定数で、f1['DDDD'] と f1['upass'] はそれぞれユーザーが入力したユーザー名とパスワードの文字列です

鍵はcalcMD5のアルゴリズムにあります。

関数名と関数自体から判断すると、この関数は MD5 の実装です。ただし、js コードの移植中にいくつかの問題が発生しました。js と Python のシフト操作の動作が異なります。

ユーザーが入力したパスワードを除いて、f0['upass'] フィールド全体は定数であるため、この文字列を Python で保存するだけで、js を使用して f0['upass'] を計算できます。


Cookie を確認したところ、Web ページ全体で Cookie が使用されていないことがわかりました。

ログイン後、ログアウト ページにジャンプします。ログアウト ページを分析した結果、ログアウトするには特定の Web ページにアクセスするだけであることがわかります。

全体の考え方は非常に単純で、pos はサーバーにログインしてログインし、指定された Web ページを取得してログアウトします。実装コードは次のとおりです:

import sys
from urllib import urlencode
from urllib2 import urlopen

username = "s10********"
upass = "6696a3***********************************"
LOGIN = "http://202.1**.***.***/"
LOGOUT = "http://202.1**.***.***/F.htm"

def post(url, data=None):
 if data:
  data = urlencode(data)
 response = urlopen(url, data)
 return response.read()

def login():
 data={}
 data["DDDDD"] = username
 data["upass"] = upass
 data["R1"] = 0
 data["R2"] = 1
 data["para"] = 00
 data["0MKKey"] = 123456
 post(LOGIN, data)
 pass

def logout():
 post(LOGOUT)

def main(argv):
 if argv[0] in ('login','in','i'):
  login()
 elif argv[0] in ('logout','out','o'):
  logout()
  pass
 pass

if __name__ == '__main__': 
 main(sys.argv[1:]);

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。