トップページ > 記事閲覧
NOT演算を解くと
名前:ゴザルニャン 日時: 2015/05/29 09:31

あらかじめNOT演算で暗号化されたリソースファイルを復元するコードです。 〜〜〜 char a='a'; void *file = &a; //初期化 int size,ghan; char b='b'; char *p = &b; //初期化 GetResourceInfo(MAKEINTRESOURCE( IMAGE ),"DATA",&file,&size); //リソースからNOT演算で暗号化されたファイルをロード p=(char*)file; for(int i=0;i<size;i++){  //NOT演算 p[i]=~p[i]; } file=p; ghan = CreateGraphFromMem( file, size ); 〜〜〜 これをコンパイルすると暗号化の復元もでき、画像も表示されるのですが、以下のエラーが出ます。 test.exe の 0x01553986 で初回の例外が発生しました: 0xC0000005: 場所 0x01e22268 に書き込み中にアクセス違反が発生しました。 test.exe の 0x01553986 で初回の例外が発生しました: 0xC0000005: 場所 0x01e23000 に書き込み中にアクセス違反が発生しました。 test.exe の 0x01553986 で初回の例外が発生しました: 0xC0000005: 場所 0x01e24000 に書き込み中にアクセス違反が発生しました。 test.exe の 0x01553986 で初回の例外が発生しました: 0xC0000005: 場所 0x01e25000 に書き込み中にアクセス違反が発生しました。 test.exe の 0x01553986 で初回の例外が発生しました: 0xC0000005: 場所 0x01e26000 に書き込み中にアクセス違反が発生しました。 test.exe の 0x01553986 で初回の例外が発生しました: 0xC0000005: 場所 0x01e27000 に書き込み中にアクセス違反が発生しました。 test.exe の 0x01553986 で初回の例外が発生しました: 0xC0000005: 場所 0x01e28000 に書き込み中にアクセス違反が発生しました。 for文の部分をコメントアウトすると起きなくなるので、ここが原因かとは思うのですが・・・。 for文の書き方が間違っているのでしょうか?
メンテ

Page: 1 |

Re: NOT演算を解くと ( No.1 )
名前:Will 日時:2015/05/29 11:17

GetResourceInfoで取得したメモリ空間は、書き込み禁止領域なのではないでしょうか?(リソース領域だし) NOT演算時に、別のメモリ空間に結果を出力するようにしたら、解決しないでしょうか。
メンテ
Re: NOT演算を解くと ( No.2 )
名前:ゴザルニャン 日時:2015/05/29 17:18

一部修正してみましたがダメでした。 char ff = 'D'; char *ffl = &ff; //初期化 for(int i=0;i<size;i++){  //NOT演算 ffl[i]=~p[i]; ffl[i]=ffl~[i]; } こうすると実行すらできず強制終了してしまいます・・・。
メンテ
Re: NOT演算を解くと ( No.3 )
名前:ゴザルニャン 日時:2015/05/29 17:20

修正 for文1行目 ffl[i]=~p[i]; でなく ffl[i] = p[i]; です。 
メンテ
Re: NOT演算を解くと ( No.4 )
名前:管理人 日時:2015/05/30 01:35

No.2 のプログラムではメモリの不正なアクセスが発生しますので、以下のようにしてみてください void *file; char *buffer; int size; GetResourceInfo(MAKEINTRESOURCE( IMAGE ),"DATA",&file,&size); //リソースからNOT演算で暗号化されたファイルをロード // ファイルサイズ分のメモリの確保 buffer=(char*)malloc( size ); p=(char*)file; for(int i=0;i<size;i++){  //NOT演算 buffer[i]=~p[i]; } ghan = CreateGraphFromMem( buffer, size ); // 確保したメモリの解放 free( buffer ); もし malloc や free が無いというエラーが発生したら、インクルードの部分に #include <malloc.h> という記述を増やしてください
メンテ
Re: NOT演算を解くと ( No.5 )
名前:ゴザルニャン(解決) 日時:2015/05/30 12:50

できました!! ありがとうございました!!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存