#include "dkcCryptograph.h"
#include "dkcSHA1.h"
#include "dkcSJISFileSystem.h"
#include "dkcBuffer.h"
#include "dkcStream.h"
dkcSafeFileSystem.hのインクルード依存関係図

このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

構成 | |
| struct | dkc_FileHeader_FileWithSignature |
| struct | dkc_FileWithSignature |
| struct | dkc_Arcfour_File |
型定義 | |
| typedef dkc_FileHeader_FileWithSignature | DKC_FILE_HEADER_FILE_WITH_SIGNATURE |
| typedef dkc_FileWithSignature | DKC_FILE_WITH_SIGNATURE |
| typedef dkc_Arcfour_File | DKC_ARCFOUR_FILE |
関数 | |
| DKC_EXTERN DKC_FILE_WITH_SIGNATURE *WINAPI | dkcOpenFileWithSignature (UINT stream_flag, const char *filename, const char *mode, const void *dustbin, size_t dustbin_size, UINT signature) |
| DKC_EXTERN int WINAPI | dkcFileWithSignatureWrite (DKC_FILE_WITH_SIGNATURE *p, const void *data, size_t size) |
| DKC_EXTERN int WINAPI | dkcFileWithSignatureWrite16 (DKC_FILE_WITH_SIGNATURE *p, const void *data, size_t size) |
| DKC_EXTERN int WINAPI | dkcFileWithSignatureWrite32 (DKC_FILE_WITH_SIGNATURE *p, const void *data, size_t size) |
| DKC_EXTERN int WINAPI | dkcFileWithSignatureWrite64 (DKC_FILE_WITH_SIGNATURE *p, const void *data, size_t size) |
| DKC_EXTERN int WINAPI | dkcFileWithSignatureRead (DKC_FILE_WITH_SIGNATURE *p, void *data, size_t size, size_t *readsize) |
| DKC_EXTERN int WINAPI | dkcFileWithSignatureCheckCheat (DKC_FILE_WITH_SIGNATURE *p) |
| DKC_EXTERN int WINAPI | dkcFileWithSignatureCheckCheatFile (const char *filename) |
| DKC_EXTERN void WINAPI | dkcFileWithSignatureFinal (DKC_FILE_WITH_SIGNATURE *p) |
| SHAの最終処理をする. | |
| DKC_EXTERN int WINAPI | dkcCloseFileWithSignature (DKC_FILE_WITH_SIGNATURE **) |
| DKC_EXTERN DKC_ARCFOUR_FILE * | dkcOpenArcfourFile (UINT stream_flag, size_t stream_size, const char *filename, const char *mode, const void *dustbin, size_t dustbin_size, const void *arcfour_key, size_t arcfour_size, UINT signature, BOOL *IsCheated) |
| DKC_EXTERN int | dkcCloseArcfourFile (DKC_ARCFOUR_FILE **) |
| DKC_EXTERN int WINAPI | dkcArcfourFileWrite (DKC_ARCFOUR_FILE *p, const void *data, size_t size) |
| DKC_EXTERN int WINAPI | dkcArcfourFileWrite16 (DKC_ARCFOUR_FILE *p, const void *data, size_t size) |
| DKC_EXTERN int WINAPI | dkcArcfourFileWrite32 (DKC_ARCFOUR_FILE *p, const void *data, size_t size) |
| DKC_EXTERN int WINAPI | dkcArcfourFileWrite64 (DKC_ARCFOUR_FILE *p, const void *data, size_t size) |
| DKC_EXTERN int WINAPI | dkcArcfourFileRead (DKC_ARCFOUR_FILE *p, void *data, size_t size) |
-ファイルに保存した暗号化したデータをメモリ上にロード -メモリ上にロードしたデータを複合化する -複合化したデータをハッシュ関数に食わせる -ハッシュ値をいただく。 -ファイルに保存してあるハッシュ値とさっき取得したハッシュ値をくらべる。 (ここでハッシュ値が違う場合は、セーブデータが改竄されていると判断できる。)
dkcSafeFileSystem.h で定義されています。
|
|
|
|
|
参照元 dkcOpenFileWithSignature(), GetHeader(), と HeaderWrite(). |
|
|
||||||||||||||||
|
|
|
||||||||||||||||
|
|
|
||||||||||||||||
|
|
|
||||||||||||||||
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
dkcSafeFileSystem.c の 285 行で定義されています。 参照先 DKC_FILE_WITH_SIGNATURE, dkcFree(), dkcFreeBuffer(), dkcFreeSHA1(), dkcFreeStream(), dkcStreamSeek(), dkcStreamTell(), edk_FAILED, edkcStreamSeekSet, dkc_FileHeader_FileWithSignature::filesize, FileWithSignatureGetDigest(), HeaderWrite(), dkc_FileWithSignature::mDustbin, dkc_FileWithSignature::mFileHeader, dkc_FileWithSignature::mSHA1, dkc_FileWithSignature::mStream, dkc_FileWithSignature::mWriteMode, NULL, と ULONGLONG.
00285 {
00286 DKC_FILE_WITH_SIGNATURE *ptr;
00287 //BYTE buff[SHA1_BUFFER_SIZE];
00288
00289 //size_t offset = SM_OFFSET(DKC_FILE_HEADER_FILE_WITH_SIGNATURE,hash_value);
00290
00291 if(NULL==p){
00292 return edk_FAILED;
00293 }
00294
00295 ptr = *p;
00296
00297 if(ptr->mWriteMode)
00298 {//書き込みモード時のみ
00299
00300 //メッセージダイジェストを取得
00301 //FileWithSignatureGetDigest(ptr,buff,sizeof(buff));
00302 FileWithSignatureGetDigest(ptr);
00303 //ファイルサイズ取得
00304 ptr->mFileHeader.filesize = (ULONGLONG)dkcStreamTell(ptr->mStream);
00305 //ptr->mFileHeader.datasize = ptr->mFileHeader.filesize - sizeof(DKC_FILE_HEADER_FILE_WITH_SIGNATURE);
00306
00307 //メッセージダイジェスト領域の位置を取得
00308 dkcStreamSeek(ptr->mStream,0,edkcStreamSeekSet);
00309 //メッセージダイジェストを書き込む
00310 //dkcStreamWrite(ptr->mStream,buff,sizeof(buff));
00311 HeaderWrite(ptr->mStream,&(ptr->mFileHeader));
00312 }
00313 dkcFreeBuffer(&(ptr->mDustbin));
00314
00315 dkcFreeStream(&(ptr->mStream));
00316
00317 dkcFreeSHA1(&(ptr->mSHA1));
00318
00319 return dkcFree(p);
00320 }
|
|
|
|
|
|
|
SHAの最終処理をする.
|
|
||||||||||||||||||||
|
dkcSafeFileSystem.c の 417 行で定義されています。 参照先 DKC_FILE_WITH_SIGNATURE, dkcStreamTell(), DKUTIL_FAILED, edk_EndProcess, edk_FAILED, edk_FileCheated_Addition, edk_LogicError, dkc_FileHeader_FileWithSignature::filesize, FileWithSignatureReadLogic(), dkc_FileWithSignature::mAllLoad, dkc_FileWithSignature::mFileHeader, dkc_FileWithSignature::mStream, dkc_FileWithSignature::mWriteMode, ReadEOFCheck(), TRUE, と ULONGLONG.
00418 {
00419 size_t tsize;
00420 ULONGLONG filesize = p->mFileHeader.filesize;
00421 ULONGLONG stream_size = dkcStreamTell(p->mStream);
00422 int r = edk_FAILED;
00423
00424 if(readsize){
00425 //とりあえず、明示的にまだ読み込んでいない事を告げる。
00426 *readsize = 0;
00427 }
00428
00429 if(p->mWriteMode){//書き込みモードじゃねぇかよ。
00430 return edk_LogicError;
00431 }
00432
00433 if(filesize == stream_size || TRUE==p->mAllLoad)
00434 {
00435 p->mAllLoad = TRUE;
00436 return edk_EndProcess;
00437 }
00438 //ファイルに冗長なモノが引っ付いている。
00439 if(filesize < stream_size){
00440 p->mAllLoad = TRUE;
00441 return edk_FileCheated_Addition;
00442 }
00443 //読み取りサイズをフィルターする
00444 if(stream_size + size > filesize){
00445 tsize = (size_t)(ULONGLONG)(filesize - stream_size);
00446 }else{
00447 tsize = size;
00448 }
00449
00450 r = FileWithSignatureReadLogic(
00451 p,data,tsize,readsize);
00452
00453
00454 if(DKUTIL_FAILED(r)){
00455 return r;
00456 }
00457
00458 return ReadEOFCheck(p);
00459 //return dkcStreamRead(p->mStream,data,tsize,readsize);
00460 }
|
|
||||||||||||||||
|
dkcSafeFileSystem.c の 463 行で定義されています。 参照先 FileWithSigCallBackSend::callback, DKC_FILE_WITH_SIGNATURE, dkcStreamProcess(), dkcStreamWrite(), FWS_CALLBACK_SEND, dkc_FileWithSignature::mStream, FileWithSigCallBackSend::psig, FileWithSigCallBackSend::readsize, と WriteCallback().
00465 {
00466 FWS_CALLBACK_SEND send;
00467 send.callback = dkcStreamWrite;
00468 send.psig = p;
00469 send.readsize = 0;
00470 return dkcStreamProcess(p->mStream,(void *)data,size,WriteCallback,&send);
00471 //return FileWithSignatureWriteLogic(p,data,size,dkcStreamWrite);
00472
00473 }
|
|
||||||||||||||||
|
dkcSafeFileSystem.c の 475 行で定義されています。 参照先 FileWithSigCallBackSend::callback, DKC_FILE_WITH_SIGNATURE, dkcStreamProcess(), dkcStreamWrite16(), FWS_CALLBACK_SEND, dkc_FileWithSignature::mStream, FileWithSigCallBackSend::psig, FileWithSigCallBackSend::readsize, と WriteCallback().
00477 {
00478 FWS_CALLBACK_SEND send;
00479 send.callback = dkcStreamWrite16;
00480 send.psig = p;
00481 send.readsize = 0;
00482 return dkcStreamProcess(p->mStream,(void *)data,size,WriteCallback,&send);
00483 //return FileWithSignatureWriteLogic(p,data,size,dkcStreamWrite16);
00484 }
|
|
||||||||||||||||
|
dkcSafeFileSystem.c の 488 行で定義されています。 参照先 FileWithSigCallBackSend::callback, DKC_FILE_WITH_SIGNATURE, dkcStreamProcess(), dkcStreamWrite32(), FWS_CALLBACK_SEND, dkc_FileWithSignature::mStream, FileWithSigCallBackSend::psig, FileWithSigCallBackSend::readsize, と WriteCallback().
00490 {
00491 FWS_CALLBACK_SEND send;
00492 send.callback = dkcStreamWrite32;
00493 send.psig = p;
00494 send.readsize = 0;
00495 return dkcStreamProcess(p->mStream,(void *)data,size,WriteCallback,&send);
00496 //return FileWithSignatureWriteLogic(p,data,size,dkcStreamWrite32);
00497 }
|
|
||||||||||||||||
|
dkcSafeFileSystem.c の 499 行で定義されています。 参照先 FileWithSigCallBackSend::callback, DKC_FILE_WITH_SIGNATURE, dkcStreamProcess(), dkcStreamWrite64(), FWS_CALLBACK_SEND, dkc_FileWithSignature::mStream, FileWithSigCallBackSend::psig, FileWithSigCallBackSend::readsize, と WriteCallback().
00501 {
00502 FWS_CALLBACK_SEND send;
00503 send.callback = dkcStreamWrite64;
00504 send.psig = p;
00505 send.readsize = 0;
00506 return dkcStreamProcess(p->mStream,(void *)data,size,WriteCallback,&send);
00507 //return FileWithSignatureWriteLogic(p,data,size,dkcStreamWrite64);
00508 }
|
|
||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||
|
dkcSafeFileSystem.c の 113 行で定義されています。 参照先 BOOL, BYTE, DKC_BUFFER, DKC_FILE_HEADER_FILE_WITH_SIGNATURE, DKC_FILE_WITH_SIGNATURE, DKC_SHA1, DKC_STREAM, dkcAllocate(), dkcAllocBuffer(), dkcAllocSHA1(), dkcAllocStreamFileType(), dkcFree(), dkcFreeSHA1(), dkcFreeStream(), dkcIsLittleEndian(), dkcSHA1Load(), dkcStreamSeek(), dkcStreamWrite(), DKUTIL_FAILED, DKUTIL_FLAG_DOWN, DKUTIL_FLAG_UP, edkcStreamBigEndian, edkcStreamInitFile, edkcStreamInitMemory, edkcStreamLittleEndian, edkcStreamProcessAsOrdered, edkcStreamProcessDefault, edkcStreamSeekSet, FALSE, GetHeader(), dkc_FileHeader_FileWithSignature::little_endian, dkc_Stream::mChangeEndian, dkc_FileWithSignature::mDustbin, dkc_FileWithSignature::mFileHeader, dkc_FileWithSignature::mSHA1, dkc_FileWithSignature::mStream, dkc_FileWithSignature::mWriteMode, NULL, dkc_FileHeader_FileWithSignature::sig, と TRUE.
00124 {
00125 DKC_STREAM *sp = NULL;
00126 void *tp = NULL;
00127 DKC_BUFFER *mbp = NULL;
00128 DKC_FILE_WITH_SIGNATURE *p = NULL;
00129
00130 DKC_FILE_HEADER_FILE_WITH_SIGNATURE header;
00131
00132 BOOL isWrite = FALSE;
00133 BYTE isLE = (BYTE)dkcIsLittleEndian();
00134
00135 //UINT stream_flag = edkcStreamInitFile;
00136
00137 //フラグの変更
00138 stream_flag |= edkcStreamInitFile;
00139
00140 DKUTIL_FLAG_DOWN(stream_flag,edkcStreamInitMemory);
00141
00142 DKUTIL_FLAG_DOWN(stream_flag,edkcStreamProcessDefault);
00143
00144 DKUTIL_FLAG_UP(stream_flag,edkcStreamProcessAsOrdered);
00145
00146 //size_t stream_size;
00147
00148
00149 //エラーチェック
00150 if(NULL==dustbin || 0 == dustbin_size){
00151 return NULL;
00152 }
00153
00154 if(NULL==mode || NULL==filename){
00155 return NULL;
00156 }
00157 if(NULL != strchr(mode,'a')){//共通モードでは開けない
00158 return NULL;
00159 }
00160 if(NULL != strchr(mode,'t')){//テキストモードでは開けない。
00161 return NULL;
00162 }
00163
00164
00165 //領域取得
00166
00167 p = dkcAllocate(sizeof(DKC_FILE_WITH_SIGNATURE));
00168 if(NULL==p){
00169 return NULL;
00170 }
00171 tp = (DKC_SHA1 *)dkcAllocSHA1();
00172 if(NULL==tp){
00173 goto Error;
00174 }
00175
00176 //ライトモードかどうか。
00177 isWrite = (NULL==strchr(mode,'r'));
00178
00179 if(isWrite){
00180 //書き込みモードの時
00181 p->mWriteMode = TRUE;
00182 }else{
00183 if(DKUTIL_FAILED(GetHeader(&header,filename))){
00184 goto Error;
00185 }
00186
00187 if(header.little_endian){
00188 stream_flag |= edkcStreamLittleEndian;
00189 }else{
00190 stream_flag |= edkcStreamBigEndian;
00191 }
00192
00193 p->mWriteMode = FALSE;
00194 //とりあえず、コピーしておかないと支障が出る。
00195 memcpy(&(p->mFileHeader),&header,sizeof(header));
00196 }
00197
00198
00199 sp = dkcAllocStreamFileType( stream_flag,filename,mode);
00200 if(NULL==sp){
00201 goto Error;
00202 }
00203 //update
00204 p->mStream = sp;
00205
00206 if(isWrite){
00207 //ヘッダ分を書き込んでおく。
00208 memset(&header,0,sizeof(header));
00209 dkcStreamWrite(sp,&header,sizeof(header));
00210
00211
00212 //ヘッダの設定
00213
00214 //エンディアン設定
00215 if(isLE){
00216 if(FALSE==p->mStream->mChangeEndian){
00217 p->mFileHeader.little_endian = TRUE;
00218 }else{
00219 p->mFileHeader.little_endian = FALSE;
00220 }
00221 }else{
00222 if(TRUE==p->mStream->mChangeEndian){
00223 p->mFileHeader.little_endian = TRUE;
00224 }else{
00225 p->mFileHeader.little_endian = FALSE;
00226 }
00227 }
00228 //シグネチャを設定
00229 p->mFileHeader.sig = signature;
00230 }
00231
00232 mbp = dkcAllocBuffer(dustbin,dustbin_size);
00233 if(NULL==mbp){
00234 goto Error;
00235 }
00236
00237
00238
00239 p->mSHA1 = tp;
00240 p->mDustbin = mbp;
00241
00242 //とりあえず、ゴミ値をSHA1にロード
00243 dkcSHA1Load(p->mSHA1,dustbin,dustbin_size);
00244
00245 if(isWrite==FALSE){
00246 //ストリームをデータ部にシーク
00247 dkcStreamSeek(p->mStream,sizeof(DKC_FILE_HEADER_FILE_WITH_SIGNATURE),edkcStreamSeekSet);
00248 }
00249
00250
00251 return p;
00252 Error:
00253 dkcFreeStream(&sp);
00254 dkcFreeSHA1((DKC_SHA1 **)&tp);
00255 dkcFree(&p);
00256 return NULL;
00257 }
|
1.3.6