趣味として、私はバイナリについて学ぶことに時間を費やしています。Ollydbg が行うことのほとんどを行うプログラムを作成しています。このような大きなプロジェクトに取り組むことで、私が PE について知りたいことをすべて教えてくれると思います。現在、Ollydbg のメモリ マップに似たダイアログに取り組んでおり、各モジュールに関連付けられているヒープとセクションを一覧表示しますが、システム モジュールへのアクセス権に関していくつかの問題が発生しています。まず、ファイルを開いてデバッグ対象として実行します。そして私は・・・それから私は
invoke OpenProcess,PROCESS_VM_READ,FALSE,AttachedPID
invoke ReadProcessMemory,eax,MemMapBaseAddress,offset MemMapMappingBuffer,1024h,offset MemMapNumberOfBytesWritten
invoke GetLastError
これは、私が読み込もうとしたモジュールの約 30% で機能します。残りは 12B エラー、ReadProcessMemory または WriteProcessMemory 要求の一部のみが完了しました。このエラーが発生するモジュールの 1 つは ntdll です。そのため、調査を行ったところ、アクセスしようとしていたメモリ内のセクションへのアクセス許可がない可能性が高いことがわかりました。だから私はそのメモリのビットの保護を変更しようとしました
invoke OpenProcess,PROCESS_VM_READ,FALSE,AttachedPID
push eax
invoke VirtualProtectEx,eax,offset MemMapBaseAddress,1024h,PAGE_READWRITE,offset OldProtect
invoke GetLastError
pop eax
invoke ReadProcessMemory,eax,MemMapBaseAddress,offset MemMapMappingBuffer,1024h,offset MemMapNumberOfBytesWritten
invoke GetLastError
そして、VirtualProtectEx に対してエラー 5、アクセスが拒否されました。管理者としてもプログラムを実行しようとしましたが、同じ結果が得られました。デバッグ対象としてロードされたモジュールの PE ヘッダーを読み取れない理由について何か考えはありますか?