`
hunix
  • 浏览: 21784 次
  • 性别: Icon_minigender_1
  • 来自: 孝感
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

研究QQ密码的算法

阅读更多

在QQ对应号码目录下user.db文件从800h起20字节为与密码相关数据,其中后16个字节和Hash后摘要有关.这20个字节后4个字节是QQ号码。
下列是一些常用的Hash算法(从微软加密头文件中提取出来的)

#define CALG_MD2 1 MD2算法 \ iga Q\~ 
gt@SuX!@{^ 
#define CALG_MD4 2 MD4算法 "-0;#&! 
h'!V8'}O? 
#define CALG_MD5 3 MD5算法 U&Ab# m; 
fnOIv# 
#define CALG_SHA 4 SHA算法 (yGQa5v 
^@"c` 
#define CALG_SHA1 4 SHA1算法 "kr,x3 = 
qHJ'1~?q 
#define CALG_MAC 5 MAC算法 G_+Ph^ 
v:A:37#I 
#define ALG_SID_RIPEMD 6 RIPEMD算法 <soj&f+ 
HtUG#sc&`{ 
#define ALG_SID_RIPEMD160 7 RIPEMD160算法 >HIt}Zh 
+;6) 
#define ALG_SID_SSL3SHAMD5 8 SSL3SHAMD5算法 #B}Qt5w 
]4GZ'&m} 
#define CALG_HMAC 9 HMAC算法 Q]T BQ& 
W]@6=OpH 
*:[b'D!A 
而MD5算法中需要使用下面几个初始值 zu C5@jy.x 
kJ__:rS(T_ 
context->state[0] = 0x67452301; ",QPb3 
Y6a$gXRT 
context->state[1] = 0xefcdab89; &<@%{h@ = 
)6g&v'dq 
context->state[2] = 0x98badcfe; 4[Z1r~t\L 
AsD1-$ 
context->state[3] = 0x10325476; wD}EW 
|^Ur 
呵呵,在QQ中一搜索,果然几个特征值赫然在目。但是显然QQ使用了上述20个字节中的前四个字节对MD5密文又做了处理,我跟了两天还是没有头绪(头晕脑胀)。但是我发现把这四个字节改成00 00 00 00,然后登陆输入正确密码,仍然会提示密码不一致是否到服务器验证,选择是,然后验证成功后,这20个字节的后16个字节恰好就是密码的MD5密文。有兴趣的高手可以继续看看奥(其中密码比较函数地址为:004A7E0C) Qf" 6PJ 
zz[g{[SN 
例: 9t.fij 
Z3Bo @`&? 
1B D5 01 00 5D D7 87 19 0D 92 6D E2 0A 56 E9 19 63 0F 5A E1 DF CA 20 05 *;>V2!N=U 
5?<|3 
DF CA 20 05即是我的QQ号。不过可不要暴力破解我的奥:) [_B+DD=} 
*>?):-9"6N 
1B D5 01 00 5D D7 87 19 0D 92 6D E2 0A 56 E9 19 63 0F 5A E1就是和口令相关的数据 aNuZ/9O 
GapX$Jb,p 
如果把1B D5 01 00改为00 00 00 00,然后按上述步骤登陆后,5D D7 87 19 0D 92 6D E2 0A 56 E9 19 63 0F 5A E1即变为口令的MD5密文。 Hsd|ka$x> 
 "@UU[o 
A?6 { 
算法源代码如下: ;T"m [D 
$_ I%1 
头文件: F$sF 'cw 
 5Xy^I^J 
5,=B 1 
// Decrypt.h: interface for the CDecrypt class. QB.*R?A 
Y/e N) 
// y uK5r 
j O5:{% 
////////////////////////////////////////////////////////////////////// 65e Wu=T 
JXy667_ 
#define AFX_DECRYPT_H__916D97B8_C120_4435_BE23_2CF35B8763A2__INCLUDED_ J ]l@ r 
'14l )1g. 
E#X!*q& 
#if _MSC_VER > 1000 !.GY~f<d$ 
5J2p^$s 
#pragma once /s0VyUV= 
8; N}d)*O 
#endif // _MSC_VER > 1000 "dU#j,B2 
(#Kvm 
V1V4 <Zj 
#define _WIN32_WINNT 0x0400 _4#psxl[M 
XD>@EYN<X 
#include <afxpriv.h> Q $5:P& 
srA ~gzF 
#include <Wincrypt.h> R;ug+N 
e5]0<s$ 
nClU 5 
class CDecrypt %>z}P&Yz 
R[t[M}q 
{ lU& IS?^? 
ZC-N4ESr 
public: V ZGhF!To 
-9EbU7>! 
BOOL EncryptMessage(const TCHAR *Message,TCHAR *pHashData,int *pHashLen,int Algorithm); _6( =0::x 
*XuzTGa" 
CDecrypt(); +zvK/Fj2q 
CAO$Z t 
virtual ~CDecrypt(); )I@iW\`7 
P+xZaf H 
@47TDCr 
}; Y*6*;0Kx 
h W-[omr0 
A /MOY@%G 
#endif // !defined(AFX_DECRYPT_H__916D97B8_C120_4435_BE23_2CF35B8763A2__INCLUDED_) V1+IqOXAIp 
)}EwEM 
?VJ Fp^Ra 
CPP文件:  z\ \MLyS 
6K,AQ.=V2 
// Decrypt.cpp: implementation of the CDecrypt class. dfNNCPu]+ 
m49)cK? 
// 5YRa2 #d 
VLRW,lR9O 
////////////////////////////////////////////////////////////////////// xw`Pq6 
SDZ/rC!C 
w?Y;pc}1B 
#include stdafx.h G{)2f &< 
[8[g_ 
#include Decrypt.h 8a)lrIg 
,Tjc\;~% 
g\:(1oY 
#ifdef _DEBUG muc6gwBp 
F!ZE4S_ 
#undef THIS_FILE KDxqz$14 - 
"lLwgh; 
static char THIS_FILE[]=__FILE__; Nk2n&(~$ 
#K&XY6cTj 
#define new DEBUG_NEW \?tE,\Ln 
?xW,2S 
#endif 8B! MgNKV 
hh!4DHv  
gz#2} 
////////////////////////////////////////////////////////////////////// Gv&%cq1 
&G!~@\tMg 
// Construction/Destruction mWF\h>]|. 
Lb#PiTJI 
////////////////////////////////////////////////////////////////////// _6m{zvyX> 
1HLU & 
M?5voV* 
CDecrypt::CDecrypt() 85q!FpuH 
'Z|Czd8E 
{  He%v 4S 
\~r_S 
a]J>2A@-I 
} {b-SK5%]L 
|[p]]) o 
A"0Yn(awWu 
CDecrypt::~CDecrypt() k8i0`VY5Y 
5k?xBk=< 
{ Q(R -8" 
gQ|?~hYYv 
/g8nT1k 
} 4^9qs%& 
32pPeYxB!- 
? :A%$T 
BOOL CDecrypt::EncryptMessage(const TCHAR *Message,TCHAR *pHashData,int *pHashLen,int Algorithm) 1_8@yO 
4tvZJS hV 
{ [(vV45(E 
gQeoCBCE 
BOOL bResult = TRUE; $J]NWgXl@ 
A>)W6|m| 
VK|$SY( 
HCRYPTPROV hProv = NULL; N*KM6j 
`R-VJR 2" 
HCRYPTKEY hKey = NULL; h0l_9uI 
~S0T+4$ 
HCRYPTKEY hXchgKey = NULL; pQ`S%]k.< 
T 6=~vOzTJ 
HCRYPTHASH hHash = NULL; %vU*4mH 
^!K 8nW{* 
DWORD dwLength; ;{"uG>#R 
tsf !Q 
// Get handle to user default provider.  >fgV!o4 
`R o>?H 
if (CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) #M8>)oc 
L9 H.DNA 
{ qAuq2pHA+d 
CV6W)B%Se 
// Create hash object. ?[ v C?P 
.s<tQU 
if (CryptCreateHash(hProv, Algorithm, 0, 0, &hHash)) Z(fhH..T` 
+v'n[xa1v 
{ "Q<* H<e 
]6{\`a 
// Hash password string. K1>(Fs$ 
`+0)dTA(g$ 
dwLength = sizeof(TCHAR)*_tcslen(Message); TID0x/j"K5 
XL7jUi_4:L 
if (CryptHashData(hHash, (BYTE *)Message, dwLength, 0)) M^^u{);q 
{9 Op{bZ 
{ xf@D<}~1 
wWflZ"% 
CryptGetHashParam(hHash,2,(BYTE*)pHashData,(DWORD*)pHashLen,0); JqH2c=}- 
o=_4v ^ 
} k 9Kv 
M)EUR0>8 
else zAB-kE\ ) 
60AX2-sdJ, 
{ 7X}_yMxc 
#^#)OQ q] 
// Error during CryptHashData! x|<|eRYK 
PL+fLCk,I 
bResult = FALSE; H#Og0gEE}5 
!&'xkw` 
} 1@nR.v"$ 
@$nI\ n?* 
CryptDestroyHash(hHash); // Destroy session key. IYQYW.`ly 
%*19S.=l 
} 3tm z2JIb 
fF d9D=EW. 
else )-QNWN H 
Ffxk] o&%c 
{ jo|q,t 
y="SzPl 
// Error during CryptCreateHash! `HS4(2+C 
cyhD%sB[D9 
bResult = FALSE; YDNqW P7s 
 [;=WnG 
} /SXz_ e 
O&,O:b:@ 
CryptReleaseContext(hProv, 0); VM]IL%AN 
j#e.rNG 
} C|f7L>qe 
Yg)V*%0n 
sJb)HQ,7x 
return bResult; g?~Tguv 
{KDgK 
} Q0cY/'>4 
|= cCv_y 
(a `FS,M 
V5a?=vK9 
使用: 8geek$FY x 
jJ a V 
TCHAR Hash[255]; z2w;oM$g 
y"^yYO 
int Len=-1; m0A#6=< 
$$JIBf8 
CString Message=Your Message; W`$[j0 
{Eu'v$c! 
m_decrypt.EncryptMessage((LPCSTR)(Message),Hash,&Len,CALG_MD5); vMhYpt?7\ 
P@gt di(Q 
Hash中存放的就是MD5密文。你可以使用上述算法 LeSHRoD 
<F7V=Er 
#define CALG_MD2 1 MD2算法 /s|{by`we4 
q[ ULG v 
#define CALG_MD4 2 MD4算法 ewnfeg1 
1fFj:p./l_ 
#define CALG_MD5 3 MD5算法 i#W*'  
&yIGr` ; 
#define CALG_SHA 4 SHA算法 WVX`< 
H&4~Uo.5 
来替换CALG_MD5参数.
分享到:
评论

相关推荐

    国密算法(国家商用密码算法简介).pdf

    国密算法是中国的国家商用密码算法的简称,它包含了一系列的加密技术标准和规范,这些算法和规范被用于商业和政府信息系统的加密通讯以及数据保护。在中国,国密算法是推动信息安全、保障信息传输安全、防止信息泄露...

    密码算法关于QQ空间解密

    密码算法在信息安全领域是一个重要的研究方向,涉及到加密、解密、哈希等技术。对于QQ空间的加密,其背后可能是基于某种特定的加密算法,例如RSA、AES等。这些算法的安全性很高,一般情况下无法轻易破解。而上述方法...

    QQ加密算法C++源码

    C++实现QQ密码加密算法的源码通常会包含以上步骤的函数或者类。在分析源码时,我们需要关注以下几个关键部分: - 密码预处理函数,如`normalizePassword`,它可能包含大小写转换和特殊字符过滤。 - MD5哈希计算函数...

    QQ密码最新加密算法(RSA)

    QQ密码的最新加密算法采用了RSA(Rivest-Shamir-Adleman)公钥加密体制,这是一种非对称加密技术,广泛应用于网络通信的安全保护。RSA加密算法基于数论中的大数因子分解难题,其安全性至今仍被认为相对较高。 1. ...

    凯撒密码算法的实现

    凯撒密码,又称移位密码,是历史上最早且最简单的加密技术之一,它通过将明文中的每个字母按照固定数量的位移来实现加密。...打开并研究这个文件,可以更直观地了解如何在具体编程环境中实现凯撒密码。

    QQTEA算法源码.rar

    总的来说,QQTEA算法是一个重要的密码学研究对象,对于理解和实现对称加密算法有着积极的教育意义。通过分析这个易语言版本的源码,不仅可以学习到QQTEA的工作原理,还能加深对编程语言和位操作的理解。

    c语言实现常用密码算法

    在IT领域,密码算法是信息安全的核心组成部分,它们用于保护数据的机密性、完整性和真实性。C语言由于其高效和底层特性,常被用来实现各种密码算法。本篇将深入探讨C语言如何实现常见的密码算法,包括哈希(Hash)...

    QQTEA算法.rar

    QQTEA,全称为“Quick and Quality Encryption Algorithm”,是由Dong Wang和Kai Yang于1998年提出的一种对称...了解和掌握QQTEA有助于理解加密算法的基本原理和设计思路,对于学习和研究信息安全具有一定的参考意义。

    古典加密算法之置换密码和代换密码

    同时,研究历史上的加密方法可以帮助我们更好地理解密码学的发展历程,以及为什么现代加密技术能够提供如此高水平的安全保障。 《古典加密算法.txt》这个文件很可能包含了关于这两种密码的详细解释和示例,包括可能...

    易语言QQ登陆器获得QQ密码

    如果易语言程序能够“获取QQ密码”,则可能涉及到逆向工程,尝试破解加密算法,这是非常复杂且不道德的行为。 4. 网络安全:这种行为严重侵犯了用户隐私,属于网络钓鱼攻击的一种形式。了解如何防止此类攻击,如...

    研究qq源代码,界面,算法的源代码

    以下是对"研究qq源代码,界面,算法的源代码"这一主题的深入探讨。 首先,QQ的源代码包含了大量的编程语言技术,如C++、Objective-C(针对iOS)、Java(针对Android)等,这些语言用于构建跨平台的应用。通过分析...

    QQ账号密码验证无法使用但可作参考

    在压缩包子文件的文件名称列表中,“验证QQ密码是否正确.e”很可能是一个程序或者脚本,设计用于检查输入的QQ密码是否与数据库中的记录匹配。这个文件可能是用某种编程语言编写的,比如Python、JavaScript或者其他...

    易语言源码QQ注册RSA算法易语言源码.rar

    易语言是一种专为中国人设计的编程语言,它以简体中文作为编程语法,降低了编程的门槛,使得更多非计算机专业的人也能理解和使用编程。...同时,对于安全研究人员,这个源码也提供了一个研究非对称加密实际应用的机会。

    椭圆加密算法的研究

    椭圆加密算法研究 椭圆加密算法(ECC)是一种公钥加密体制,最初由 Koblitz 与 Miller 两人于 1985 年提出...椭圆曲线密码算法是一种高安全性、高效率的公钥加密体制,广泛应用于数字签名、密钥交换和数据加密等领域。

    tx充值QB页面的mobile-save接口中的encrypt-msg算法

    tx充值QB页面的mobile_save接口中的encrypt_msg算法 易语言纯算法腾讯充值页面encrypt_msg算法易语言算法,成品算法tx充值QB页面的mobile_save接口中的encrypt_msg值算法。 本帖学习研究探讨 目标网站地址 ...

    古典加密算法之置换密码和代换密码-羽灵光Fealight

    通过研究这些古老的加密方式,我们可以更好地理解密码学的发展历程,以及在设计更安全的现代加密系统时应避免的错误。在实际应用中,现代密码学结合了置换和代换的概念,并引入了公钥密码体制、哈希函数、伪随机数...

    QQ登录器C++源代码(BCB2007)(含MD5算法及BASE64编码解码的C源代码)

    QQ应用程序路径 /START QQUIN:QQ号码 PWDHASH:Base64(MD5(QQ密码)) /STAT:登录模式 程序基本用法: (1)运行程序,首先会要求输入密码,如果是首次运行,可以输入一个新密码或直接回车即可. (2)进入后,可以看到已保存的...

Global site tag (gtag.js) - Google Analytics