Qq

[ターン] WebQQログインプロセス分析



Webqq Login Process Analysis



ビスタと最近遭遇した互換性の問題QQ、ああ、それで無力WebQQ、このガベージネットワークの顔、httpを見る別の人はその安全性を疑問視せずにはいられないので、最近彼は.netをfiddler2でキャプチャし、分析してキー暗号化を取得しましたプロセス、Baiduは、誰かがすでに分析していることを発見しました。相関分析を見てみましょう。
http://htsoft.net.cn/html/ytag/qq%E5%AF%86%E7%A0%81%E5%8A%A0%E5%AF%86%E6%96%B9%E5%BC% 8F
暗号化ランディングページQQパスワードについて
下に提出:C#関連-HtSoft @ 2009-10-1813:25:56コメントはまだありません。

ページにQQを記録すると、サーバーへの暗号化されたPOSTによって分析されるJSファイルが見つかります。暗号化の方法、JSファイルは複雑な全体のように見え、ビット演算でいっぱいで、必要なJSはC#に変換されます。 aa関数変換関数、少しあきらめてみてください、あまりにも多くのトラブル。

最後に、この問題の非常に単純な解決策です。実際、JSファイルの見当違いを参照してください。暗号化は、次のように非常に単純です。

MD5(MD5_3(QQパスワード)+大文字コード)、C#コードを貼り付ける方法:

public static class qqPwdEncrypt
{
///
/// result when QQ login password encryption is computationally page
///
/// QQ password
/// codes
///
public static String Encrypt(string pwd, string verifyCode)
{
return (md5(md5_3(pwd).ToUpper() + verifyCode.ToUpper())).ToUpper()
}
///
/// calculate MD5 string of three
///
///
///
private static String md5_3(String s)
{
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider()
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(s)

bytes = md5.ComputeHash(bytes)
bytes = md5.ComputeHash(bytes)
bytes = md5.ComputeHash(bytes)

md5.Clear()

string ret = ''
for (int i = 0 i {
ret += Convert.ToString(bytes[i], 16).PadLeft(2, '0')
}

return ret.PadLeft(32, '0')
}
///
/// string once MD5 calculation
///
///
///
private static String md5(String s)
{
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider()
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(s)

bytes = md5.ComputeHash(bytes)

md5.Clear()

string ret = ''
for (int i = 0 i {
ret += Convert.ToString(bytes[i], 16).PadLeft(2, '0')
}

return ret.PadLeft(32, '0')
}
}


================================================= = ==================

まず、暗号化関連の情報を紹介します。

1、http://xiaoyou.qq.com/を開きます

2、フィドラーモニターHTTPパケットを開きます

3、QQにログオンし、QQを選択するためにここにいます:123456123456コードefta

UはQQ番号を表します。

Pは暗号化されたパスワードを表します

検証コード担当者検証コード

残りは固定されており、説明していません

ファームにログインするには、ログイン同窓生をシミュレートするためにさらにデータを送信する必要があり、パスワードは上記のように暗号化する必要があります。

次に、プレーンテキスト1234を09967317CCFC266ADA83C9B1BEA30825(非常に嫌なパスワード)に暗号化する方法を説明します。

これはTencent暗号化パスワード暗号化JavaScriptJavaScriptスクリプトです

予備的な見た目はかなり気分が悪いので、変換後の長い間手がかりを見つけるためのインターネット検索は、MD5暗号化+認証コード変換資本の3倍、MD5暗号化が再び大きくなります

しかし、私はこの方法で得られた結果が正しくないことを試しました。不可解なことに、友人の庭を理解するのを助けるために、彼は私にC#コードのセクションをくれました、あなたは本当に正しくすることができます。コードは次のように表示されます。

using System
using System.Collections.Generic
using System.Text
using System.Security.Cryptography
using System.Text.RegularExpressions
using System.Collections

namespace QQ alumni assistant
{
class QQPassword
{
public static string binl2hex(byte[] buffer)
{
StringBuilder builder = new StringBuilder()
for (int i = 0 i {
builder.Append(buffer[i].ToString('x2'))
}
return builder.ToString()
}
public static string md5_3(string input)
{
MD5 md = MD5.Create()
byte[] buffer = md.ComputeHash(Encoding.Default.GetBytes(input))
buffer = md.ComputeHash(buffer)
buffer = md.ComputeHash(buffer)
return binl2hex(buffer)
}

public static string md5(string input)
{
byte[] buffer = MD5.Create().ComputeHash(Encoding.Default.GetBytes(input))
return binl2hex(buffer)
}

public static string getPassword(string password, string verifycode)
{
return md5(md5_3(password).ToUpper() + verifycode.ToUpper()).ToUpper()
}


}
}


Encoding.Default.GetBytes(入力)はASCII文字列に対して取得されます

長い間トレースを使用したVSデバッガーで、問題がC#computehashプライマリハッシュにあることがわかりました。その結果、16進数ではないMD5文字列MD5はbinl2hexを渡すために文字列を変換する必要があります。これは3回のプライマリハッシュであり、最後のMD5暗号化の前に結合された資本検証コードです。


原則を知っている、私はDelphiのソースコードを変更しました:

procedure TForm1.btn4Click(Sender: TObject)
var
hash: T4x4LongWordRecord
hashstr: string
i: integer
temp3: string
begin
SetLength(hashstr, 16)
with TIdHashMessageDigest5.Create do begin
hash: = HashValue ( '123456') // hash herein are primary
Move(hash, hashstr[1], 16)
for i := 1 to Length(hashstr) do
temp3 := temp3 + Char(hashstr[i])
hash := HashValue(temp3)
Move(hash, hashstr[1], 16)
temp3 := ''
for i := 1 to Length(hashstr) do
temp3 := temp3 + Char(hashstr[i])
temp3: = AsHex (HashValue (temp3)) // AsHex here is the final conversion MD5 string (32)
temp3 := temp3 + 'EFTA'
temp3 := AsHex(HashValue(temp3))
ShowMessage(temp3)
Free
end
end


このコードは、暗号化された文字列09967317CCFC266ADA83C9B1BEA30825の上で取得できます。

ファーマーのQQブラウザーに直接ログインするだけで、データのアナログログインを投稿する方法はありません。したがって、この暗号化アルゴリズムの前に行うべき研究はありません。

私たち全員にとって有益なQQパスワード暗号化を分析したいです!


学校のITネットワークからの記事:http://www.xueit.com/js/show-4765-2.aspx