他プロセスのメインモジュールのエントリーポイントアドレスを取得したい。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
まろん

他プロセスのメインモジュールのエントリーポイントアドレスを取得したい。

#1

投稿記事 by まろん » 8年前

初めて投稿させていただきます、よろしくお願いします。

Visual Studio2013
Windows8.1
Dxライブラリを使いつつなので#using?とかいうのが使えません。

昔自分で作ったゲームの隠しステータスをモニターしたいのですが、そのゲームのプロジェクトは既に削除していたので外部からReadProcessMemoryを使用して覗こうと考えました。

まず始めに:
VB.NETでProcessクラスを使用してメインモジュールのエントリーポイントアドレスを取得したやり方では正常に機能しました。エントリーポイントアドレス+MHSで探したアドレスを元に計算したオフセットを使用したのです。

そして、今度はC++とDxライブラリを使用して、文字ではなく画像で、ゲームの一部として作ろうと思ったのですが、Processクラスは使えず(使えるようにする#usingとやらはコンパイルできなくなる(DxライブラリとMTなんとかが競合?するので)、ReadProcessMemoryが使えてもメインモジュールのエントリーポイントアドレスが取得できないという状況です。
こちらのサイト
http://riosu.hateblo.jp/entry/2013/09/06/001208
を参考にして、まずはコピペして見ると、NtQueryInformationProcessPtrが定義されていないと出ます。

以上が状況です。
目的であるエントリーポイントアドレスを取得する方法を教えて頂きたいです。よろしくお願いします。

Math

Re: 他プロセスのメインモジュールのエントリーポイントアドレスを取得したい。

#2

投稿記事 by Math » 8年前

>Dxライブラリを使いつつなので#using?とかいうのが使えません。
何を言ってるのか”意味不明”自分でも”おかしいと思いませんか?①誰が、何が”Dxライブラリを使っているのか”主語がない。②”なので#using?とかいうのが使えません。”全く常識では考えられない言葉。自分でもわかる!?。

>昔自分で作ったゲームの隠しステータスをモニターしたいのですが、そのゲームのプロジェクトは既に削除していたので外部から
>ReadProcessMemoryを使用して覗こうと考えました。
何のこと?ゲーム見てて解らない。(隠しコマンドを見ないとわからないの?)

>まず始めに:
>VB.NETでProcessクラスを使用してメインモジュールのエントリーポイントアドレスを取得したやり方では正常に機能しました。エントリーポイ>ントアドレス+MHSで探したアドレスを元に計算したオフセッ・・・・・・
exeを逆アセブラすれば一発でわかると思うけど?

>そして、今度はC++とDxライブラリを使用して、文字ではなく画像で、ゲームの一部として作ろうと思ったのですが、Processクラスは使えず>(使えるようにする#usingとやらはコンパイルできなくなる(DxライブラリとMTなんとかが競合?するので)、ReadProcessMemoryが使えてもメ>インモジュールのエントリーポイントアドレスが取得できないという状況です。
訳が分かりませよ。他人が聞いて分かると思いますか...?。

>こちらのサイト
http://riosu.hateblo.jp/entry/2013/09/06/001208
>を参考にして、まずはコピペして見ると、NtQueryInformationProcessPtrが定義されていないと出ます。
VBは一番自信のある言語なのでコピペしたコードとエラーを載せてくださいね!

>以上が状況です。
>目的であるエントリーポイントアドレスを取得する方法を教えて頂きたいです。よろしくお願いします。
これについてはC++の機能で逆アセンブルすれば一発で分かると思うけど?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 他プロセスのメインモジュールのエントリーポイントアドレスを取得したい。

#3

投稿記事 by みけCAT » 8年前

Math さんが書きました: >以上が状況です。
>目的であるエントリーポイントアドレスを取得する方法を教えて頂きたいです。よろしくお願いします。
これについてはC++の機能で逆アセンブルすれば一発で分かると思うけど?
提示されたサイト
他プロセスのメモリを読む(C++編) - # vim /etc/blog
の最初に
メモリの読み込み自体はWin32APIのReadProcessMemoryを使えば良い。
ただし、WindowsVista以降ではASLR(Address space layout randomization)機能により、実行ファイルなどの配置アドレスがランダムになっている。そのため、まずはその実行ファイルのメインモジュールの先頭アドレスを取得し、そこからの相対位置指定でメモリを読むことにする。
と書いてあります。
Windows8.1はWinows Vista以降です。
それでも逆アセンブルだけでわかると思いますか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

まろん

Re: 他プロセスのメインモジュールのエントリーポイントアドレスを取得したい。

#4

投稿記事 by まろん » 8年前

>Mathさん

最初の部分に関してはもう貴方が読解力ないんじゃないですかね……誰がDxライブラリを使ったか?そしたら開発環境も全てに私が使ってますと書けってことですかね

別に私は喧嘩したいわけじゃないんで、そうやって嫌な言い方をする人にコメントして欲しくないです。まあこれは誰でもそうだと思いますけどね。
わからなくて、貴方みたいに質問の前提とか完璧じゃないんでこうやって書いててわかりづらくなったりするのは認めます。でもそれでわざわざ常識だとか言い始める貴方は単純に能力がないこちらを見下したいだけじゃないですか。

ゲーム見ててわからない隠しだって書いてあるのに「見てわからないの?」とか言ってるあたり、もう答える気無くて馬鹿にしたいだけですよね?答える気も失せる質問なら答えなくて良いです。わざわざこっちをイライラさせないで下さい。



質問についてはC#で作る事にしたので解決しました。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 他プロセスのメインモジュールのエントリーポイントアドレスを取得したい。

#5

投稿記事 by みけCAT » 8年前

まろん さんが書きました: こちらのサイト
http://riosu.hateblo.jp/entry/2013/09/06/001208
を参考にして、まずはコピペして見ると、NtQueryInformationProcessPtrが定義されていないと出ます。
なぜかこのサイトでは欠けているようですが、参考サイトの1つ
リモートプロセスのコマンドラインパラメータを取得する - espresso3389の日記
での定義

コード:

  typedef NTSTATUS (NTAPI* NtQueryInformationProcessPtr)(
    IN HANDLE ProcessHandle,
    IN PROCESSINFOCLASS ProcessInformationClass,
    OUT PVOID ProcessInformation,
    IN ULONG ProcessInformationLength,
    OUT PULONG ReturnLength OPTIONAL);
  
  typedef ULONG (NTAPI* RtlNtStatusToDosErrorPtr)(NTSTATUS Status);
が使えるかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

まろん

Re: 他プロセスのメインモジュールのエントリーポイントアドレスを取得したい。

#6

投稿記事 by まろん » 8年前

みけCAT さんが書きました:
まろん さんが書きました: こちらのサイト
http://riosu.hateblo.jp/entry/2013/09/06/001208
を参考にして、まずはコピペして見ると、NtQueryInformationProcessPtrが定義されていないと出ます。
なぜかこのサイトでは欠けているようですが、参考サイトの1つ
リモートプロセスのコマンドラインパラメータを取得する - espresso3389の日記
での定義

コード:

  typedef NTSTATUS (NTAPI* NtQueryInformationProcessPtr)(
    IN HANDLE ProcessHandle,
    IN PROCESSINFOCLASS ProcessInformationClass,
    OUT PVOID ProcessInformation,
    IN ULONG ProcessInformationLength,
    OUT PULONG ReturnLength OPTIONAL);
  
  typedef ULONG (NTAPI* RtlNtStatusToDosErrorPtr)(NTSTATUS Status);
が使えるかもしれません。

本当にありがとうございます!!
試させて頂きます!

Math

Re: 他プロセスのメインモジュールのエントリーポイントアドレスを取得したい。

#7

投稿記事 by Math » 8年前

"Microsoft COFF Binary File Dumper (DUMPBIN.EXE) は、COFF (Common Object File Format) 形式のバイナリ ファイルに関する情報を出力します。 DUMPBIN を使うと、COFF オブジェクト ファイル、COFF オブジェクトの標準ライブラリ、実行可能ファイル、およびダイナミック リンク ライブラリ (DLL) の内容を確認できます"

とMSDNにあるようにDUMBIN(逆アセンブラ)のオプションから必要なの情報はすべてえられるはず。
サンプルもサイトにあったはず。(メモリーマッピングが分かるのように書いたページがあったのですが)

Math

Re: 他プロセスのメインモジュールのエントリーポイントアドレスを取得したい。

#8

投稿記事 by Math » 8年前

何か勘違いしているようだけど「VB.NETでProcessクラスを使用したのを援用する」というからC++ではおかしいでしょう...。
Vistahttps://ja.wikipedia.org/wiki/Microsoft_Windows_VistaはOSに.NetFrameWorkhttps://ja.wikipedia.org/wiki/.NET_Frameworkを採用した最初の機種だからC++でプログラムするならC++/CLIだしアンマネージなプログラムとのインターフェイス(例えばエクセル)は
System.Runtime.InteropServices 名前空間にあるマーシャリング機能を使用することになるでしょう。
VBとC#は相互にソースを交換可能だし、C#とC++/CLIほとんど同じだから ”C#" で作るのが一番でしょう。
(C++/CLI は実質開発は停止しC#に取って代わられた状態です。C++/CLIでゲームを作る本があるけど(図書館などに!「実はそれで勉強した!」)

(ただしExcelは ClosedXML か NPOI を使いCOMを使わない方がいいでしょう。いまだGoogleではCOMが上位だけれど。)

閉鎖

“C言語何でも質問掲示板” へ戻る