获取电脑上登录的QQ 的QQ号码 可以制作很不错的使用QQ验证软件方式 .qSDe+A
也就是绑定QQ号码 4W" A*A
U0_)J1Yp
QQ运行过程中会读取"MsgEx.db"文件, 在这个文件的全路径中就包含了QQ号码, 路径格式为: QQ路径 +"\" + QQ登陆号码 + "\MsgEx.db", 找到"\MsgEx.db"关键字, 然后提取关键字前面的第一个"\"和第二个"\"之间的文本,不就是QQ号码了吗? qR'FbI
\Ip)Lm0
都是乱码就没有找到"\MsgEx.db"关键字. :EV.nD7
偶不是很清楚ReadProcessMemory 和 VirtualQueryEx 哪里出问题了,还请指点一下. !:|*!
'Tm1Mh0Fso
rw'+2\
/**************************************************************************** "Au4&Fu
* FileName: GetQQName.cpp ]W5*R07
* Author : sudami :oIBJ u%/
* E-MAIL : xiao_rui_119@163.com TwkT|Piw S
* Time : 2007/08/15 *2zp>(%
* Comment : 获取当前进程中的正在运行的QQ号码 d)AYY}pw
****************************************************************************/ !2|Lb' O
a4,V(Hlm
#include <afxwin.h> #%E`~&[
#include <tlhelp32.h> !zE{`H a~
ETHcZ
///////////////////////////////////////////////////////////////////////////// ?6:qAF w
jSem/;
HANDLE hQQProcess[5]; \jC) ;mk
int g_i = 0; -$Fj-pO\
(kxS0 ]=
void GetQQHandle (); // 获得QQ进程的句柄 *wTX
void FindandShowQQName (); // 获取并显示QQ号码 +fVvH
oXG_6E!^
|=}+%>y_
int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE, LPSTR, int) Bq8#'K2i,
{ iE'_x$i
GetQQHandle (); u2#q7}
FindandShowQQName (); >6C\T@{lJ
} @D9O<x
8>C4w 5kF
///////////////////////////////////////////////////////////////////////////// }_lG2#Ll5
// Vl^x_gs#_]
// =Z+^n ?"
void GetQQHandle () 0 ca0-vY
{ t=7Gfv
// 遍历进程,获得当前运行的QQ的PID,获得相应的句柄 g]f<k2
CString szName = TEXT("QQ.exe"); Pim
PROCESSENTRY32 pe32 = {sizeof (PROCESSENTRY32)}; Q h@Q6
!/}4_s`,
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot ( r8(oTx
TH32CS_SNAPPROCESS, 0); xiW}P% bf
C 9%bD
if (hProcessSnap == INVALID_HANDLE_VALUE) Dml?.-Uv<
return; (B` NnL$
dtuCA"D
if (::Process32First (hProcessSnap, &pe32)) 2\{/|\
{ 7_Vd%<:
do C=c&.-Nb9
{ ^Ip\`2^u
if (pe32.szExeFile == szName) q|YnNk>1
{ :TrP3wV _
// 获得此QQ进程的句柄 G]l/L\{
hQQProcess[g_i] = ::OpenProcess ( F\+9u$=
PROCESS_ALL_ACCESS, false, pe32.th32ProcessID); %_]O|(
K0*er
g_i++; Z1H
} MMRO@MdfV
} c1%ki%J#
while (::Process32Next (hProcessSnap, &pe32)); 7Il /+l(
} wu0J XB%&^
9 LEUj
::CloseHandle (hProcessSnap); [Az^i>iH
} 5o~AUo{
`H;O! ty&d
///////////////////////////////////////////////////////////////////////////// =dC5q{
// EJrQ9"x&n
// Y6%O9b
void FindandShowQQName () [=xO>
{ h z+x)M`Y
MEMORY_BASIC_INFORMATION mbi; <N;HB&mr
PBYTE pAddress = NULL; aq,?
char szBuf[MAX_PATH] = {0}; AUAJMS!m
>'lte&
SYSTEM_INFO si; 1vBXO bk
memset(&si, 0, sizeof(si)); {^ ^)bf|1'
GetSystemInfo( &si ); oos7x6
cA4xx^~
LPVOID LowAddr, HighAddr; %<8lLRl
LowAddr = si.lpMinimumApplicationAddress; =7mn= w?
HighAddr = si.lpMaximumApplicationAddress; AA um1xl
0)'^vJe
for (int i=0; i<g_i; i++) -P<e-V%<
{ _$?SKid|o
// 搜索 类型=MEM_PRIVATE 页面属性=PAGE_READWRITE 的内存块 Q!:J.J
while(VirtualQueryEx (hQQProcess, pAddress, &mbi, sizeof(MEMORY_BASIC_INFORMATION)) n%]1p36
== sizeof(MEMORY_BASIC_INFORMATION)) &!#a^d+` 0
{ dhW)<
if((mbi.AllocationProtect == PAGE_READWRITE)/* && (mbi.State == MEM_COMMIT)*/ R*D0A@
&& (mbi.Type == MEM_PRIVATE)) ([='LyH];z
{ Tt.wY=,K
// 读取QQ进程虚拟地址里面的指定内容 3eqnc),Z
BOOL bReadMemory = ::ReadProcessMemory (hQQProcess, pAddress, szBuf, MAX_PATH,NULL); h +Dp<b
.AOf-a
if (bReadMemory) Rw\ LVRdA
{ B(x i
::MessageBox (NULL, szBuf, "2", MB_OK); 8S[`(] )
} \e64Us>"x
q$Z.5EN
} @bQf =N+
pAddress += mbi.RegionSize; ^T83E}
} &)@|WLW
} B:om61Dn
} ZtPq */'
////////////////////////////////////////////////// END OF FILE //////////////////////////////////////////////////////////// ,b2YUb]U
[课程]Android-CTF解题方法汇总!