找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2615|回复: 1
打印 上一主题 下一主题
收起左侧

利用密码..访问加密DOG

[复制链接]
跳转到指定楼层
楼主
ID:105323 发表于 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;//数据长度
char buffer[100]="";

buffer[0] = 1;        //为1,表示读文件
buffer[1] = (BYTE)datalen;     //读取数据长度
FlipBuffer((unsigned char*)&wOffset, 2); //C51中WORD与PC中顺序不同,先倒序
memcpy(buffer+2, &wOffset, 2);    //将cBuffer中的下标为2,3中设置为偏移量
memcpy(buffer+4, password, 8);    //偏移4字节,要写入8位密码
datalen=100;
dwRet = ETExecute(&ETContextList[tCurrETnum],etfsfileIdname, buffer,datalen, etfsfiledata,datalen, &dwOutLen);
if(dwRet)
{
  printf("调用读etfs文件函数出错\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;//数据长度
datalen=100;//数据长度
buffer[0] = 0;           //为0,表示写文件/为1,表示读文件
buffer[1] = (BYTE)datalen;     //写入数据长度
FlipBuffer((unsigned char*)&wOffset, 2); //C51中WORD与PC中顺序不同,先倒序
memcpy(buffer+2, &wOffset, 2);    //将cBuffer中的下标为2,3中设置为偏移量
memcpy(buffer+4, password, 8);    //偏移4字节,要写入8位密码
memcpy(buffer+4+8, etfsfiledata, 100-4-8);  //一定要偏移4字节,要写入的数据

//+4:将系统偏移的位数也加上
dwRet = ETExecute(&ETContextList[tCurrETnum],etfsfileIdname,buffer,datalen,etfsfiledata,datalen,&dwOutLen);
if(dwRet)
{
  printf("调用写etfs文件函数出错\n");
  return 0;
}
//返回不是0时,C51中有错误
if(etfsfiledata[0] != 0)
{
  printf("写etfs文件出错\n");
  return 0;
}
return 1;
}
//在当前工作目录下创建文件
int ET199Dog::CreateDataFile(int tCurrETnum,char *filename,int filesize)
{
//在当前工作目录下创建文件 ID 为 0x1008 的内部数据文件,
//文件大小为:10000 字节
dwRet = ETCreateFile(&ETContextList[tCurrETnum], filename,
    filesize, FILE_TYPE_DATA);
if(dwRet != ET_S_SUCCESS)
{
  printf("在当前工作目录下创建文件出错:0x%08x\n", dwRet);
  return 0;
}
return 1;
}
//写数据入文件(未证实)
//自动检测当前文件是否存在
int ET199Dog::WriteDataToFile(int tCurrETnum,char *filename,BYTE *writedata)
{
//自动检测当前文件是否存在
//向当前工作目录中 ID 为 0x1008 的文件中,从第 0 个字节开始写入“HELLO”
dwRet = ETWriteFile(&ETContextList[0],
     filename, 0, writedata, lstrlen((const char*)writedata));
if(dwRet != ET_S_SUCCESS)
{
  printf("写数据入文件出错:0x%08x\n", dwRet);
  return 0;
}
return 1;
}
//运行 ET199 硬件内文件
int ET199Dog::RunDataFile(int tCurrETnum,char *filename,char *oldpassword,char *newpassword,
        DWORD &filedata)
{
int tlen=strlen(oldpassword);
int tlen1=strlen(newpassword);
//运行 ET199 硬件内文件 ID 为 0x0001 的可执行文件
dwRet = ETExecute(&ETContextList[tCurrETnum], filename,
       oldpassword,tlen, newpassword, tlen1, &filedata);
if(dwRet != ET_S_SUCCESS)
{
  printf("运行 ET199 硬件内文件出错:0x%08x\n", dwRet);
  return 0;
}
return 1;
}


/*
//C51程序,利用密码,读写加密DOG文件内容源码
#include "et199.h"
#include <string.h>
//读写文件示例
//输入时,前4个字节为信息:
//第一个字节为读写标志,0为写文件,1为读文件
//第二个字节为读写长度
//第三和第四个字节为偏移位置
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]="";
//输入的格式
//第一个字节表示操作,0为写文件,1为读文件
//第二个字节表示读写文件的长度
//第三,四个字节表示偏移位置,即从文件的哪里开始读写
//在写文件时,后面为要写入的数据。在读文件时,后面没用,因此读文件时,外部程序可以只输入前4个字节
memcpy(&bFlag, pbInBuff, 1);//为0,表示写文件/为1,表示读文件
memcpy(&bLen, pbInBuff+1, 1);//读写数据的长度
memcpy(&wStart, pbInBuff+2, 2);//将cBuffer中的下标为2,3中设置为偏移量
memcpy(password,pbInBuff+4, 8);//分解出密码
memcpy(pbData, pbInBuff+4+8,bLen);//分解出内容
if(strcmp(password,"PASSWORD")==0)
{
  //写文件
  if(bFlag == 0)
  {
   //先打开文件
   bRes = _open(0x1008, &hFile);
   if(bRes != 0)
   {
    //内部数据文件不存在,创建文件,这里创建一个长度为1024的数据文件
    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();
    }
   }

   //写入数据
   bRes = _write(hFile, wStart, bLen, pbData);
   if(bRes != 0)
   {
    _close(hFile);
    _set_response(1,&bRes);
    _exit();
   }

   _close(hFile);

   //返回bRes应为0,表明写入成功
   _set_response(1,&bRes);
   _exit();
  }
  //读文件
  if(bFlag == 1)
  {
   //先打开文件
   bRes = _open(0x1009, &hFile);
   if(bRes != 0)
   {
    _set_response(1,&bRes);
    _exit();
   }
         
   //读取数据
   bRes = _read(hFile, wStart, bLen, pbData);
   if(bRes != 0)
   {
    _close(hFile);
    _set_response(1,&bRes);
    _exit();
   }

   _close(hFile);

   //将结果返回给外部程序
   _set_response(bLen,pbData);
   _exit();
  }
}
else//密码出错
{
  memcpy(pbData,"password is error",17);
  _set_response(17,pbData);
  _exit();
}
//参数不对,返回0x88
bRes = 0x88;
_set_response(1,&bRes);
_exit();
}
*/

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:105323 发表于 2016-2-22 00:22 | 只看该作者
//读写文件示例(读写无密码文件正常)
//输入时,前4个字节为信息:
//第一个字节为读写标志,0为写文件,1为读文件
//第二个字节为读写长度
//第三和第四个字节为偏移位置
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]="";
//输入的格式
//第一个字节表示操作,0为写文件,1为读文件
//第二个字节表示读写文件的长度
//第三,四个字节表示偏移位置,即从文件的哪里开始读写
//在写文件时,后面为要写入的数据。在读文件时,后面没用,因此读文件时,外部程序可以只输入前4个字节
memcpy(&bFlag, pbInBuff, 1);//0:写有密码文件; 1:读有密码文件  2:写无密码文件; 3:读无密码文件
memcpy(&bLen, pbInBuff+1, 1);//读写数据的长度
memcpy(&wStart, pbInBuff+2, 2);//将cBuffer中的下标为2,3中设置为偏移量
memcpy(pbData, pbInBuff+4,bLen);//分解出内容

//写文件
if(bFlag == 0)
{
  //先打开文件
  bRes = _open(0x1008, &hFile);
  if(bRes != 0)
  {
   //内部数据文件不存在,创建文件,这里创建一个长度为1024的数据文件
   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();
   }
  }
  //写入数据
  bRes = _write(hFile, wStart, bLen, pbData);
  if(bRes != 0)
  {
   _close(hFile);
   _set_response(1,&bRes);
   _exit();
  }
  _close(hFile);
  //返回bRes应为0,表明写入成功
  _set_response(1,&bRes);
  _exit();
}
//读文件
if(bFlag == 1)
{
  //先打开文件
  bRes = _open(0x1009, &hFile);
  if(bRes != 0)
  {
   _set_response(1,&bRes);
   _exit();
  }
      
  //读取数据
  bRes = _read(hFile, wStart, bLen, pbData);
  if(bRes != 0)
  {
   _close(hFile);
   _set_response(1,&bRes);
   _exit();
  }
  _close(hFile);
  //将结果返回给外部程序
  _set_response(bLen,pbData);
  _exit();
}
//参数不对,返回0x88
bRes = 0x88;
_set_response(1,&bRes);
_exit();
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表