『壹』 QQ協議採用什麼加密演算法加密傳送數據採用的是什麼演算法
QQ的通信方式就可以用程序模擬QQ到伺服器上進行登錄驗證.然後用字典或者暴力方式來進行破解.,或者騰訊的伺服器有某些漏洞可以導緻密碼泄 漏,這就不得而知了.
其實除了以上這幾種常見的攻擊手段,還有一種以前使用得比較少的方法,那就是通過sniffer來捕獲QQ通信信息.
由於QQ所使用的通信協議的特殊性,可以利用捕獲到的信息來窮舉出登錄密碼.由於這種破解是在本地進行的.所以速度要比遠程破解快一些.這種方法比較適合
在網吧等地方盜取別人的QQ.
首先要對QQ的通信協議有一定的了解.只是通過抓包來分析的話,工作量是相當巨大的.幸好現在網上有一些開源的QQ項
目.QQ的通信協議是一套基於二進制數據的自己開發的應用層網
絡協議.其中使用一些公司的加密演算法.QQ基本通信協議支持udp和tcp兩種基本協議方式.兩種方式的基本數據結構是一樣的.只是tcp包多了一個描述
長度的頭部.
首先QQ客戶端向伺服器發送一個請求登錄令牌的數據包.伺服器返回登錄令牌.這個令牌是在伺服器端生成的.和客戶端的IP地址,版本信息等數據相關.以後會用到這個令牌去進行其他操作.
在
QQ客戶端得到登錄令牌之後.就會向伺服器發送一個包含登錄信息的登錄請求.要求登錄.服務順會首先看看客戶端的號碼.守址和版本是否可以在本伺服器上
進行登錄.如果可以的話,就驗證客戶端的登錄信息是否與伺服器上保存的登錄信息進行比較.匹配的就向客戶端返回一個登錄成功的數據包.不匹配返回登錄失
敗.因為QQ的伺服器有很多台.可能要分管不同的QQ版本.IP等.所以如果客戶端的號碼.IP地址和版本無法在本伺服器進行登錄.
『貳』 QQ密碼的加密方式是什麼
密保卡和密保手機就可以了哈
『叄』 請QQ的密碼用的是什麼加密演算法是在哪個文件中
先進行md5加密再進行base64加密得到密碼的hash值,存儲在qq.exe裡面
『肆』 QQ密碼是怎麼加密的
在QQ的設置里,密碼保護的地方加密。可以加符號和字母。數字一起
『伍』 騰訊qq密碼是用什麼方法加密的 是純MD5加密還是在它加密後再加了密求高手詳解
反向加密 也就是開發者也不知道這QQ密碼是什麼 自動運算出來的
但是開發商可以不用密碼進你的QQ 但是你也要提供相關資料和證據 要不然開發商會觸犯法律的
『陸』 QQ密碼加密原理是什麼
一般只有加密碼過程,沒有解密。 用戶登陸時,把他輸入的密碼經過加密 再拿去與資料庫裡面的密碼比較就可以了。 修改密碼也是一樣的原理,輸入的原密碼加密後與資料庫密碼比較,符合的話再將新密碼加密後存入資料庫覆蓋原密碼 現在流行的MD5加密演算法 網上有很多JAVA的MD5演算法
『柒』 QQ密碼加密原理
QQ2005 賀歲版登錄口令加密演算法及其源代碼 http://www.cnhello.com Binny([email protected]) 2005-12-11 3:27:33 查看: 次 星級: 文字大小: 較大 正常 較小 收藏此頁到365Key 收藏此頁到新浪ViVi 【導讀】拿到QQ 2005賀歲版後,發現其加密原理並沒有新的改變,經過跟蹤和分析,編制出暴力破解本地QQ密碼的程序。QQ密碼在正確登陸後,會將加密的結果保存在用戶目錄的ewh.db文件中,加密採用公開的MD5演算法,通過N次循環以及異或後求反,最終計算出加密的結果,與用戶的ewh.db文件中的密文比較後,發出「輸入密碼與上次成功登錄的密碼不一致,$0A是否到伺服器驗證?」(這條信息在BasicCtrlDll.dll的資源中,$0A在C的格式化中為回車)。根據這個提示,完成本地QQ密碼的暴力破解。 拿到QQ 2005賀歲版後,發現其加密原理並沒有新的改變,經過跟蹤和分析,編制出暴力破解本地QQ密碼的程序。 QQ密碼在正確登陸後,會將加密的結果保存在用戶目錄的ewh.db文件中,加密採用公開的MD5演算法,通過N次循環以及異或後求反,最終計算出加密的結果,與用戶的ewh.db文件中的密文比較後,發出「輸入密碼與上次成功登錄的密碼不一致,$0A是否到伺服器驗證?」(這條信息在BasicCtrlDll.dll的資源中,$0A在C的格式化中為回車)。根據這個提示,完成本地QQ密碼的暴力破解。 在QQ系統中,「QD」標志代表QQ Data,例如,我們可以在文件User.db或ewh.db中找到這個以QD開頭的數據結構。 一、 ewh.db原始數據 51 44 01 01 03 00 04 03 00 BD AF A8 04 00 00 00 00 2E 06 00 07 03 00 B9 AB B4 10 00 00 00 07 22 AA 96 56 19 A3 9E 82 19 B7 2B BD 2D 34 4A 04 03 00 A9 B5 B2 04 00 00 00 3C A8 93 06 其中,紅色為AST循環次數,蘭色為EWH加密字元串,綠色為UIN QQ號(110340156=0x0693A83C,Intel體系內存中排列順序為:3CA89306)。 二、 ewh.db數據結構 HEX 偏移 DEC 偏移 數據 注釋 變數 標志 0000 1 51 44 QD,QQ Data 數據標志 Flag 0002 3 01 01 保留的數據結構 Reserve 0004 5 03 00 總數據段(Data Sections)的個數 Sections 0006 7 04 第一個數據段(簡稱1S,下同)的類型,可以從0x01到0x0F,04代表本數據沒經過加密處理。 Type1S 0007 8 03 00 1S標志的長度。 LenFlag1S 0009 10 BD AF A8 1S標志(例如AST、UIN、EWH等),是經過簡單的異或並求反計算處理的,此處是AST,可能是Algorithm Shift Times 或Axxx Switch Time,管他的呢! Flag1S 000C 13 04 00 00 00 1S數據的長度 LenData1S 0010 17 00 2E 06 00 = (404992) 1S數據,這里是進行MD5轉換的次數。 這個數據是同計算機的性能有關的,性能越高的計算機,在QQ注冊成功後產生的這個循環控制變數就越大。 Data1S 0014 21 07 2S數據的類型,07代表使用MD5進行加密 Type2S 0015 22 03 00 2S標志的長度 LenFlag2S 0017 24 B9 AB B4 2S標志,此處是EWH,代表本數據段是EWH密碼數據,可能是Encrypt With Hash的縮寫 Flag2S 001A 27 10 00 00 00 2S數據的長度 LenData2S 001E 31 07 22 AA 96 56 19 A3 9E 82 19 B7 2B BD 2D 34 4A 2S
『捌』 QQ空間登陸加密密碼演算法是什麼
QQ空間現在採用的是動態加密,加密結果和驗證碼有密切關系,
也就是說是:密碼+演算法+驗證碼在一起,加密演算法如下:
public static string smethod_0(string s)
{
MD5 mD = MD5.Create();
byte[] bytes = Encoding.ASCII.GetBytes(s);
byte[] array = mD.ComputeHash(bytes);
StringBuilder stringBuilder = new StringBuilder();
byte[] array2 = array;
for (int i = 0; i < array2.Length; i++)
{
byte b = array2[i];
stringBuilder.Append(b.ToString("x").PadLeft(2, '0'));
}
return stringBuilder.ToString().ToUpper();
}
public static byte[] EncyptMD5Bytes(string s)
{
MD5 mD = MD5.Create();
byte[] bytes = Encoding.ASCII.GetBytes(s);
return mD.ComputeHash(bytes);
}
public static string smethod_1(byte[] s)
{
MD5 mD = MD5.Create();
byte[] array = mD.ComputeHash(s);
StringBuilder stringBuilder = new StringBuilder();
byte[] array2 = array;
for (int i = 0; i < array2.Length; i++)
{
byte b = array2[i];
stringBuilder.Append(b.ToString("x").PadLeft(2, '0'));
}
return stringBuilder.ToString().ToUpper();
}
public static string EncryptQQWebMd5(string s)
{
MD5 mD = MD5.Create();
byte[] bytes = Encoding.ASCII.GetBytes(s);
byte[] array = mD.ComputeHash(bytes);
StringBuilder stringBuilder = new StringBuilder();
byte[] array2 = array;
for (int i = 0; i < array2.Length; i++)
{
byte b = array2[i];
stringBuilder.Append("\\x");
stringBuilder.Append(b.ToString("x2"));
}
return stringBuilder.ToString();
}
public static string EncryptOld(string password, string verifyCode)
{
return smethod_0(EncyptMD5_3_16(password) + verifyCode.ToUpper());
}
public static string Encrypt(string qq, string password, string verifyCode)
{
return Encrypt((long)Convert.ToDouble(qq), password, verifyCode);
}
public class ByteBuffer
{
private byte[] byte_0;
public Stream BaseStream;
public ByteBuffer()
{
this.BaseStream = new MemoryStream();
this.byte_0 = new byte[16];
}
public virtual long Seek(int offset, SeekOrigin origin)
{
return this.BaseStream.Seek((long)offset, origin);
}
public bool Peek()
{
return this.BaseStream.Position < this.BaseStream.Length;
}
public byte[] ToByteArray()
{
//long position = this.BaseStream.Position;
//this.BaseStream.Position = 0L;
//byte[] array = new byte[(int)((object)((IntPtr)this.BaseStream.Length))];
//this.BaseStream.Read(array, 0, array.Length);
//this.BaseStream.Position = position;
//return array;
long position = this.BaseStream.Position;
this.BaseStream.Position = 0L;
byte[] buffer = new byte[this.BaseStream.Length];
this.BaseStream.Read(buffer, 0, buffer.Length);
this.BaseStream.Position = position;
return buffer;
}
public void Put(bool value)
{
this.byte_0[0] = value ? ((byte)1) : ((byte)0);
this.BaseStream.Write(this.byte_0, 0, 1);
}
public void Put(byte value)
{
this.BaseStream.WriteByte(value);
}
public void Put(byte[] value)
{
if (value == null)
{
throw new ArgumentNullException("value");
}
this.BaseStream.Write(value, 0, value.Length);
}
public void PutInt(int value)
{
this.PutInt((uint)value);
}
public void PutInt(uint value)
{
this.byte_0[0] = (byte)(value >> 24);
this.byte_0[1] = (byte)(value >> 16);
this.byte_0[2] = (byte)(value >> 8);
this.byte_0[3] = (byte)value;
this.BaseStream.Write(this.byte_0, 0, 4);
}
public void PutInt(int index, uint value)
{
int offset = (int)this.BaseStream.Position;
this.Seek(index, SeekOrigin.Begin);
this.PutInt(value);
this.Seek(offset, SeekOrigin.Begin);
}
public byte Get()
{
return (byte)this.BaseStream.ReadByte();
}
}
public static string Encrypt(long qq, string password, string verifyCode)
{
ByteBuffer byteBuffer = new ByteBuffer();
byteBuffer.Put(EncyptMD5Bytes(password));
byteBuffer.PutInt(0);
byteBuffer.PutInt((uint)qq);
EncryptQQWebMd5(password);
byte[] s = byteBuffer.ToByteArray();
string str = smethod_1(s);
return smethod_0(str + verifyCode.ToUpper());
}
上面的加密演算法,調用方法是:string str = Encrypt(QQ號, QQ密碼, 驗證碼);
加密後的密碼會返回到str中,然後使用返回的密碼進行登錄。
註:QQ空間登錄是採用的GET而不是POST。
『玖』 網路上的QQ數據包內容是加密的,是用什麼加密的,怎樣解密,謝謝!
你想幹嘛?