程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> QQ本地密碼驗證破解

QQ本地密碼驗證破解

編輯:C語言基礎知識

  對應QQ版本:QQ2000C Build 1230b (2003.04.09)/QQ2003 PreView1 (測試通過)
   使用工具:SoftIce,UE,W32Dasm
   跟蹤過程:
   1,在SI中斷點 bpx messageboxa 對輸錯密碼後彈出的MessageBox進行攔截.
   2,第一步中當然能攔到,接著按F11看何處調用了Messageboxa,再設斷點,並用此方法一直向上找.
   3,用2的方法,直到找到一個斷點,不管輸入的密碼正確與否這個斷點都能起做用,(由下向上找到的第一個這樣的斷點),在本例中是:00404F2(此時QQ開著).
   ...
   00404EC: CALL [EDI+20]
   00404EF: TEST,EAX,EAX
   00404F1: POP EDI
   00404F2: JZ 00404581 這是要害處,輸入密碼正確後就跳,不正確時不跳.
   ...
   那麼對此處修改即可了.
  
   修改:用W32DASM打開QQ.EXE,找到00404F2處,看到:
   ...
   JE 00404581 (為什麼是JE,不是JZ了,偶也沒搞明白,菜啊~ ^_^)
   ...
   其對應的OPCODE是: 57 20 85 C0 5F 0F 84 89
   用UE打開QQ.exe查找"57 20 85 C0 5F 0F 84 89",並改為"57 20 85 C0 5F 0F 85 89",即把JE指令,改成了JNE指令,並保存.這時再打開QQ,不用輸密碼即可進入隨便一QQ了.
  
   用任何一個編程語言做個小程序,讀取從文件頭開始處偏移處的字節,假如為0x84,則修改為0x85就可以了。
  
   #include "stdio.h"
  
   main()
   {
      FILE *fp;
      printf("QQ Local Login Tools ");
      printf("Crack: Wing   QQ:6465660 ");
      printf("Code : ccrun  QQ:165332 ");
  
      fp=fopen("QQ.exe","rb+");
      if(!fp)
      {
        printf("Not Found QQ.exe! ");
        exit(0);
      }
      fseek(fp,0x54f4,0); /*此地址針對QQ2003 Preview 1,假如是QQ1230的,則地址為0x44F3*/
      if(fgetc(fp)==0x84)  /* OPCode:JE */
      {
        fputc(0x85,fp);      /* OPCode:JNE */
        printf("Cracked SUCcess! Press any key to conitnue...");
      }
      else
        printf("QQ Version Error! Press any key to continue...");
      fclose(fp);
      getch();
   }
  
   -----------------------------
   破解:Wing
   Mail:[email protected]
   OICQ:6465660
   -----------------------------
   代碼:ccrun
   信箱:[email protected]
   OICQ:165332
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved