多语言展示
当前在线:1796今日阅读:145今日分享:43

msg2.0.db破解步骤

还在为msg2.0.db怎么破解的朋友注意,本篇分享有详细说明。
方法/步骤

Msg2.0.db 破解步骤(研究学习用途)-Alex  分类: 计算机 2009-12-23 09:52步骤简短,看不懂的,本人不提供支持。本人原创。纯研究,用于黑客或商业用途,请别联系我。----Alexmsg2.0.db,这个东西真麻烦,不象之前的msgex那么容易破解。下面简短陈述。看的懂得拿走,看不懂的自己想。如果你连msg2.0.db是什么都不知道,那就别往下看了。你肯定看不懂。更浪费时间。1.需要:7-zip,DBcompresser或者Paradox (Paradox用起来麻烦需要library,推荐DBC)2 用7—zip释放你需要破解得msg2.0.db。 得到buddy,discuss,group,mobile,system这5个文件夹。以及lastmsginfo.dat , Matrix.dat,seqbase.dat 这3个加密的dat文件。3 需要你自己的msg2.0 并且释放。得到buddy,discuss,group,mobile,system这5个文件夹。以及lastmsginfo.dat , Matrix.dat,seqbase.dat 这3个加密的dat文件。注:buddy是重点,其余的文件夹缺失,没有关系。 4 打开需破解的buddy文件夹,里面就是很多qq号码组成的文件夹。再任意打开其中一个看到content.dat,index.dat,info.dat 三个dat文件。 将自己的info.dat  复制到需破解buddy文件夹下。根据号码复制自己需要的。当然,你也可以全部复制。5 把7-zip 释放的3个你自己的dat文件,既lastmsginfo.dat , Matrix.dat,seqbase.dat 覆盖到需破解的msq2.0文件夹中。(却一不可)6 用DBcompresse组合文件,重命名为msg2.0.db,默认储存路径为C:\gainover 。放入user\XXXX里面。(DOS可以直接combine,这个我没研究,看到有人研究过)7 用复制合成的msg2.0 登陆自己的号码,就能直接看到其中记录。目标人一般在你的黑名单或已删除联系人中。8 破解完毕。享受吧。该哭的哭,该笑的笑。如果你懂java.可以直接破解dat,算法已有。还有,别以为这些buddy里面的dat很容易破解。Passware Kit 没有破出来,想破壳的人...绕道吧...感谢朋友DiLi,提供 qq2009 msg2.0.db  VB结构。以下是msq2.0.db 分析图。如果需要查看内容的话,用IStorage::OpenStream函数就可以打开,这里不多说。// ClassTest.cpp : Defines the entry point for the console application.//#include 'stdafx.h'#include 'objidl.h'#include 'comdef.h'void PrintDB(IEnumSTATSTG *pEnum,IStorage *pStore,int Depth){    STATSTG statstg;       while(NOERROR == pEnum->Next(1,&statstg,NULL))    {        for(int i=0;iOpenStorage(statstg.pwcsName,NULL,                STGM_READ|STGM_DIRECT|STGM_SHARE_EXCLUSIVE,                NULL,                0,&pStore1);            if(hr != S_OK || pStore1==NULL)            {                wprintf(_T('open %s error\n'),statstg.pwcsName);                continue;            }            IEnumSTATSTG *pEnum1=NULL;            pStore1->EnumElements(0,NULL,0,&pEnum1);            PrintDB(pEnum1,pStore1,Depth+1);            pEnum1->Release();            pStore1->Release();        }    }}int _tmain(int argc, _TCHAR* argv[]){    wchar_t szFileName[]=_T('E:\\下载保存\\XXXX\\msg2.0.db'//换成你的QQ);    ::CoInitialize(NULL);    IStorage *pStore=NULL;    IStream *pStream=NULL;    HRESULT hr=E_FAIL;    hr=::StgOpenStorage(_bstr_t(szFileName),NULL,STGM_READ|STGM_DIRECT|STGM_SHARE_EXCLUSIVE,NULL,0,&pStore);    if(hr != S_OK || pStore==NULL)    {        printf('open failed\n');        return 0;    }    IEnumSTATSTG *pEnum=NULL;    hr = pStore->EnumElements(0,NULL,0,&pEnum );    if(hr != S_OK || pStore==NULL)    {        printf('enumerate failed\n');        return 0;    }    PrintDB(pEnum,pStore,0);    pEnum-> Release();    pStore->Release();    return 0;}输出结果---buddy    |---8362xx    |    |---info.dat    |    |---index.dat    |    |---content.dat    |---169329xx    |    |---info.dat    |    |---index.dat    |    |---content.dat---group    |---2048838xx    |    |---info.dat    |    |---index.dat    |    |---content.dat    |---2049667xx    |    |---info.dat    |    |---index.dat    |    |---content.dat---mobile---system    |---1    |    |---index.dat    |    |---content.dat    |---3    |    |---index.dat    |    |---content.dat    |---4    |    |---index.dat    |    |---content.dat---discuss---Matrix.dat---seqbase.dat---lastmsginfo.dat  以下是JAVA。 package com;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/** * Decry LoginUinList.dat * @author rmb * 2008-08-07 */public class LoginUinListDecry { FileOutputStream fw = null; FileInputStream fr = null; boolean isFileEnd = false; int[] ascii = ; /**  * init Decry,Encry file handle  * @return   */ public int initFile(){  int result = -1;  try {   fw = new FileOutputStream((new File('LoginUinList_Decry.txt')));   fr = new FileInputStream((new File('LoginUinList.dat')));   result = 1;  } catch (FileNotFoundException e) {   result = -1;   e.printStackTrace();  }  return result; } /**  * Judge file effectiveness  * @return  */ public int isEffectHead(){  int result = -1;  try{   if(fr!=null){    byte[] byte_head = new byte[13];    fr.read(byte_head);    if(byte_head[0] == 0x51 && byte_head[1] == 0x41 ){ //&& byte_head[4] == 0x0E     result = 1;    }    if(result>0){     fr.read(new byte[6]);    }   }  }  catch(Exception e){   result = -1;   e.printStackTrace();  }  return result; } /**  * decry LoginUinList data  * @param key  * @param orig_Data  * @return  */ public byte[] decryData(byte key,byte[] encry_Data){  /* mov     dl, byte ptr [ecx+esi]    * not     dl    * xor     dl, al    * mov     byte ptr [ecx+esi], dl   */  byte single_Data;  for(int i=0;i>4);    if(height<0){     height = 0;    }    down = (decryData[i]&15);    if(down<0){     down = 0;    }    fw.write(ascii[height]);    fw.write(ascii[down]);   }   return 1;  }  catch(Exception e){   e.printStackTrace();  }  return -1; } public void fileFlush(){  try {   fw.flush();  } catch (IOException e) {   e.printStackTrace();  } } public void jump(){  try {   fr.read(new byte[8]);  } catch (IOException e) {   e.printStackTrace();  } } public int run(){  int result = -1;  byte[] keyField;  byte key;  byte[] decryData;  byte[] encryData;  if(initFile()>0){   if(isEffectHead()>0){    while(!isFileEnd){     result=-1;     keyField = getKeyField(3);     if(keyField==null) break;     if(isNeedJump(keyField)){      jump();      writeData(new byte[]);//block line      continue;     }     key = getKey(keyField);     encryData = getEncryData(key);     if(encryData==null) break;     decryData = decryData(key,encryData);     writeData(decryData);     writeData(new byte[]);//:          keyField = getKeyField(4);     if(keyField==null) break;     key = getKeyDataValue(keyField);     encryData = getEncryData(key);     if(encryData==null) break;     if(isNeedDecry(key)){      decryData = decryData(key,encryData);      decryData = trunAround(decryData);     }     else{      decryData = trunAround(encryData);     }     writeDataString(decryData);     writeData(new byte[]);//break line     fileFlush();     result=1;    }   }   destroy();  }  return result; } /**  * destroy  * @return  */ public int destroy(){  int result = -1;  try{   if(fw!=null){    fw.close();   }   if(fr!=null){    fr.close();   }   result = 1;  }  catch(Exception e){   result = -1;   e.printStackTrace();  }  return result; } public static void main(String[] args) {  LoginUinListDecry ListDecry = new LoginUinListDecry();  if(ListDecry.run()>0){   System.out.println('Decry LoginUinList.dat Success');   }  else{   System.out.println('Decry LoginUinList.dat Fail');   }  }   END

注意事项

因本篇分享所造成的损失与作者无关。

推荐信息