找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2557|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

利用密碼..訪問加密DOG

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:105323 發(fā)表于 2016-2-22 00:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "ET199Dog.h"
int ET199Dog::ReadEtfsFile(int tCurrETnum,char *etfsfileIdname,char *password,char *etfsfiledata)
{
//讀取
DWORD dwOutLen = 0;
WORD wOffset=0; //從偏移位置為10的地方開始讀取
int datalen=100;//數(shù)據(jù)長度
char buffer[100]="";

buffer[0] = 1;        //為1,表示讀文件
buffer[1] = (BYTE)datalen;     //讀取數(shù)據(jù)長度
FlipBuffer((unsigned char*)&wOffset, 2); //C51中WORD與PC中順序不同,先倒序
memcpy(buffer+2, &wOffset, 2);    //將cBuffer中的下標(biāo)為2,3中設(shè)置為偏移量
memcpy(buffer+4, password, 8);    //偏移4字節(jié),要寫入8位密碼
datalen=100;
dwRet = ETExecute(&ETContextList[tCurrETnum],etfsfileIdname, buffer,datalen, etfsfiledata,datalen, &dwOutLen);
if(dwRet)
{
  printf("調(diào)用讀etfs文件函數(shù)出錯\n");
  return 0;
}
//返回長度為1時,C51中出錯
if(dwOutLen == 1)
{
  printf("讀etfs文件出錯\n");
  return 0;
}
return 1;
}
int ET199Dog::WriteEtfsFile(int tCurrETnum,char *etfsfileIdname,char *password,char *etfsfiledata)
{
//寫入
DWORD wOffset = 0; //從偏移位置為10的地方開始寫入
DWORD dwOutLen = 0;
char buffer[100]="";
int datalen=0;//數(shù)據(jù)長度
datalen=100;//數(shù)據(jù)長度
buffer[0] = 0;           //為0,表示寫文件/為1,表示讀文件
buffer[1] = (BYTE)datalen;     //寫入數(shù)據(jù)長度
FlipBuffer((unsigned char*)&wOffset, 2); //C51中WORD與PC中順序不同,先倒序
memcpy(buffer+2, &wOffset, 2);    //將cBuffer中的下標(biāo)為2,3中設(shè)置為偏移量
memcpy(buffer+4, password, 8);    //偏移4字節(jié),要寫入8位密碼
memcpy(buffer+4+8, etfsfiledata, 100-4-8);  //一定要偏移4字節(jié),要寫入的數(shù)據(jù)

//+4:將系統(tǒng)偏移的位數(shù)也加上
dwRet = ETExecute(&ETContextList[tCurrETnum],etfsfileIdname,buffer,datalen,etfsfiledata,datalen,&dwOutLen);
if(dwRet)
{
  printf("調(diào)用寫etfs文件函數(shù)出錯\n");
  return 0;
}
//返回不是0時,C51中有錯誤
if(etfsfiledata[0] != 0)
{
  printf("寫etfs文件出錯\n");
  return 0;
}
return 1;
}
//在當(dāng)前工作目錄下創(chuàng)建文件
int ET199Dog::CreateDataFile(int tCurrETnum,char *filename,int filesize)
{
//在當(dāng)前工作目錄下創(chuàng)建文件 ID 為 0x1008 的內(nèi)部數(shù)據(jù)文件,
//文件大小為:10000 字節(jié)
dwRet = ETCreateFile(&ETContextList[tCurrETnum], filename,
    filesize, FILE_TYPE_DATA);
if(dwRet != ET_S_SUCCESS)
{
  printf("在當(dāng)前工作目錄下創(chuàng)建文件出錯:0x%08x\n", dwRet);
  return 0;
}
return 1;
}
//寫數(shù)據(jù)入文件(未證實)
//自動檢測當(dāng)前文件是否存在
int ET199Dog::WriteDataToFile(int tCurrETnum,char *filename,BYTE *writedata)
{
//自動檢測當(dāng)前文件是否存在
//向當(dāng)前工作目錄中 ID 為 0x1008 的文件中,從第 0 個字節(jié)開始寫入“HELLO”
dwRet = ETWriteFile(&ETContextList[0],
     filename, 0, writedata, lstrlen((const char*)writedata));
if(dwRet != ET_S_SUCCESS)
{
  printf("寫數(shù)據(jù)入文件出錯:0x%08x\n", dwRet);
  return 0;
}
return 1;
}
//運行 ET199 硬件內(nèi)文件
int ET199Dog::RunDataFile(int tCurrETnum,char *filename,char *oldpassword,char *newpassword,
        DWORD &filedata)
{
int tlen=strlen(oldpassword);
int tlen1=strlen(newpassword);
//運行 ET199 硬件內(nèi)文件 ID 為 0x0001 的可執(zhí)行文件
dwRet = ETExecute(&ETContextList[tCurrETnum], filename,
       oldpassword,tlen, newpassword, tlen1, &filedata);
if(dwRet != ET_S_SUCCESS)
{
  printf("運行 ET199 硬件內(nèi)文件出錯:0x%08x\n", dwRet);
  return 0;
}
return 1;
}


/*
//C51程序,利用密碼,讀寫加密DOG文件內(nèi)容源碼
#include "et199.h"
#include <string.h>
//讀寫文件示例
//輸入時,前4個字節(jié)為信息:
//第一個字節(jié)為讀寫標(biāo)志,0為寫文件,1為讀文件
//第二個字節(jié)為讀寫長度
//第三和第四個字節(jié)為偏移位置
void main()
{
BYTE xdata bRes = 0;
BYTE xdata bFlag = 0;
BYTE xdata bLen = 0;
WORD xdata wStart = 0;
HANDLE xdata hFile = 0;
BYTE xdata pbData[256]="abcd";
BYTE xdata password[8]="";
//輸入的格式
//第一個字節(jié)表示操作,0為寫文件,1為讀文件
//第二個字節(jié)表示讀寫文件的長度
//第三,四個字節(jié)表示偏移位置,即從文件的哪里開始讀寫
//在寫文件時,后面為要寫入的數(shù)據(jù)。在讀文件時,后面沒用,因此讀文件時,外部程序可以只輸入前4個字節(jié)
memcpy(&bFlag, pbInBuff, 1);//為0,表示寫文件/為1,表示讀文件
memcpy(&bLen, pbInBuff+1, 1);//讀寫數(shù)據(jù)的長度
memcpy(&wStart, pbInBuff+2, 2);//將cBuffer中的下標(biāo)為2,3中設(shè)置為偏移量
memcpy(password,pbInBuff+4, 8);//分解出密碼
memcpy(pbData, pbInBuff+4+8,bLen);//分解出內(nèi)容
if(strcmp(password,"PASSWORD")==0)
{
  //寫文件
  if(bFlag == 0)
  {
   //先打開文件
   bRes = _open(0x1008, &hFile);
   if(bRes != 0)
   {
    //內(nèi)部數(shù)據(jù)文件不存在,創(chuàng)建文件,這里創(chuàng)建一個長度為1024的數(shù)據(jù)文件
    if(bRes == 5)
    {
     bRes=_create(0x1009, 1024, FILE_TYPE_DATA, CREATE_OPEN_ALWAYS, &hFile);
     if(bRes != 0)
     {
      _set_response(1,&bRes);
      _exit();
     }
    }
    else
    {
     _set_response(1,&bRes);
     _exit();
    }
   }

   //寫入數(shù)據(jù)
   bRes = _write(hFile, wStart, bLen, pbData);
   if(bRes != 0)
   {
    _close(hFile);
    _set_response(1,&bRes);
    _exit();
   }

   _close(hFile);

   //返回bRes應(yīng)為0,表明寫入成功
   _set_response(1,&bRes);
   _exit();
  }
  //讀文件
  if(bFlag == 1)
  {
   //先打開文件
   bRes = _open(0x1009, &hFile);
   if(bRes != 0)
   {
    _set_response(1,&bRes);
    _exit();
   }
         
   //讀取數(shù)據(jù)
   bRes = _read(hFile, wStart, bLen, pbData);
   if(bRes != 0)
   {
    _close(hFile);
    _set_response(1,&bRes);
    _exit();
   }

   _close(hFile);

   //將結(jié)果返回給外部程序
   _set_response(bLen,pbData);
   _exit();
  }
}
else//密碼出錯
{
  memcpy(pbData,"password is error",17);
  _set_response(17,pbData);
  _exit();
}
//參數(shù)不對,返回0x88
bRes = 0x88;
_set_response(1,&bRes);
_exit();
}
*/

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:105323 發(fā)表于 2016-2-22 00:22 | 只看該作者
//讀寫文件示例(讀寫無密碼文件正常)
//輸入時,前4個字節(jié)為信息:
//第一個字節(jié)為讀寫標(biāo)志,0為寫文件,1為讀文件
//第二個字節(jié)為讀寫長度
//第三和第四個字節(jié)為偏移位置
void main()
{
BYTE xdata bRes = 0;
BYTE xdata bFlag = 0;
BYTE xdata bLen = 0;
WORD xdata wStart = 0;
HANDLE xdata hFile = 0;
BYTE xdata pbData[256]="guoxiaoliang";
BYTE xdata password[8]="";
//輸入的格式
//第一個字節(jié)表示操作,0為寫文件,1為讀文件
//第二個字節(jié)表示讀寫文件的長度
//第三,四個字節(jié)表示偏移位置,即從文件的哪里開始讀寫
//在寫文件時,后面為要寫入的數(shù)據(jù)。在讀文件時,后面沒用,因此讀文件時,外部程序可以只輸入前4個字節(jié)
memcpy(&bFlag, pbInBuff, 1);//0:寫有密碼文件; 1:讀有密碼文件  2:寫無密碼文件; 3:讀無密碼文件
memcpy(&bLen, pbInBuff+1, 1);//讀寫數(shù)據(jù)的長度
memcpy(&wStart, pbInBuff+2, 2);//將cBuffer中的下標(biāo)為2,3中設(shè)置為偏移量
memcpy(pbData, pbInBuff+4,bLen);//分解出內(nèi)容

//寫文件
if(bFlag == 0)
{
  //先打開文件
  bRes = _open(0x1008, &hFile);
  if(bRes != 0)
  {
   //內(nèi)部數(shù)據(jù)文件不存在,創(chuàng)建文件,這里創(chuàng)建一個長度為1024的數(shù)據(jù)文件
   if(bRes == 5)
   {
    bRes=_create(0x1009, 1024, FILE_TYPE_DATA, CREATE_OPEN_ALWAYS, &hFile);
    if(bRes != 0)
    {
     _set_response(1,&bRes);
     _exit();
    }
   }
   else
   {
    _set_response(1,&bRes);
    _exit();
   }
  }
  //寫入數(shù)據(jù)
  bRes = _write(hFile, wStart, bLen, pbData);
  if(bRes != 0)
  {
   _close(hFile);
   _set_response(1,&bRes);
   _exit();
  }
  _close(hFile);
  //返回bRes應(yīng)為0,表明寫入成功
  _set_response(1,&bRes);
  _exit();
}
//讀文件
if(bFlag == 1)
{
  //先打開文件
  bRes = _open(0x1009, &hFile);
  if(bRes != 0)
  {
   _set_response(1,&bRes);
   _exit();
  }
      
  //讀取數(shù)據(jù)
  bRes = _read(hFile, wStart, bLen, pbData);
  if(bRes != 0)
  {
   _close(hFile);
   _set_response(1,&bRes);
   _exit();
  }
  _close(hFile);
  //將結(jié)果返回給外部程序
  _set_response(bLen,pbData);
  _exit();
}
//參數(shù)不對,返回0x88
bRes = 0x88;
_set_response(1,&bRes);
_exit();
}
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表