問題タブ [dll-injection]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
dll-injection - Dll インジェクション - 何が可能ですか?
Dll インジェクションに出くわしたとき、私は最近インターネットを閲覧していました。
面白い題材だと思いますが、その目的が何なのかわかりません。
ゲームやソフトウェアのクラッキング/ハッキングに使用できると読みましたが、何かポジティブなことをすることも可能ですか?
もしそうなら、それは何に使用できますか?
そして、どの言語がこれをサポートしていますか?
記録のために、私は得た知識でゲームをクラック/ハッキングしようとするつもりはありません。違法なことをするつもりはありません!
時間をありがとう、
エメリオン
ps: この件に関するウェブサイトや本を教えていただければ幸いです。
dll - dll を挿入する必要がある場合
こんにちは、dll を別のプロセスに注入する方法を学びました
いつ使用するか、または使用する理由
ロードマップを教えてください
c# - 挿入されたDLLから関数を呼び出す
まず、私はゲームをハックしようとしているのではないということを言いたいと思います。私は実際に、私が注入しようとしているプロセスの会社に雇用されています。:)
すでに挿入されているDLLから関数を呼び出す方法を知りたいです。
そのため、CreateRemoteThread()を使用して、DLLをターゲットに正常に挿入してロードしました。以下に、インジェクションのスニペットを示します。
注:エラーの確認とリソースの解放は簡潔にするために削除されましたが、すべてのポインターを確認してリソースを解放しますのでご安心ください。
上記の関数が終了した後、LoadLibraryから返されるDLLへのゼロ以外のモジュールハンドルがhLibModuleあります。これは、DLLが正しくロードされたことを意味します。
私のDLLは、(テスト用の)メッセージボックスを表示することを目的としたC#クラスライブラリです。関数をテストしてみましたが、メッセージボックスが表示されます。次のようになります。
Visual Studioからコンパイルすると、DLLがDebugフォルダーに表示されます。次に、DLLのフルパスをインジェクターに渡します。ターゲットプロセスに挿入した後、挿入されたDLLから
自分を呼び出す方法がわからないため、実行されません。
プロセスが終了しているため使用できません。そのため、答えはCreateRemoteThread()を何らかの方法で呼び出すことにあるはずです。また、DllMainは.NET DLLに対して許可されなくなったため、その方法でも自由に実行することはできません。
インジェクションされたDLLから関数を呼び出す方法を知っている人はいますか?
前もって感謝します。 ThreadFuncGetProcAddress(hLibModule,"ThreadFunc")
c# - 挿入されたWPFWindows
DLLインジェクションとリモートCLRホスティングを介して、別のプロセス内からWPFウィンドウを表示しようとしています。ICLRRuntimeHost :: ExecuteInDefaultAppDomain();を使用してリモートプロセス内からMessageBox()を作成できるため、CLRが正しくホストされ、コードを実行できることを知っています。
ただし、WPFウィンドウ(クラスライブラリにコンパイルされている)を表示しようとしても、何も起こりません。私は次の方法を試しました:
そしてまた:
私のApp.xamlとMainWindow.xaml:
上記のいずれの方法でも、ウィンドウは表示されません。私はWPFを初めて使用しますが、何か足りないものがあると確信しています。
c# - アプリケーション i C# / .NET を実行する前に、DLL が本物か正しいかを確認してください
こんにちは、提供された DLL が正しいものであることを確認する方法を見つけようとしています。その理由は、私たちの分散ソリューションは、それぞれがアプリケーションの特定の部分を含む多数の小さな DLL で構築されており、これらのいくつかの新しいバージョンを展開する場合があるためです。
これは「更新の問題」ではありませんが、次のことを確認するにはどうすればよいですか。
その正しいバイナリ/アセンブル
顧客/クライアントがファイルを改ざんし、おそらく同じ名前のファイルに置き換えて、同様の関数を使用して悪い値を返しましたか?
複数の理由
これは、コピー防止/ライセンス テストまたはその他の重要な検証問題に使用できるので、MD5 チェックサム + ある種のアセンブル情報で十分かどうかを判断しようとしています。(そうであれば、アセンブリの詳細などにアクセスするにはどうすればよいですか?)
なぜなら、.NET DLL を逆コンパイルできる場合、フェイルセーフは何もありませんが、まさにそのため、関数リストを単に逆コンパイルして、「非常に重要な」DLL の独自の置換 DLL を書き込むことがないようにしたいのです。
私たちの理由は、エラーまたは目的でこれらを破壊した顧客を獲得したときに、デバッグ/サポートに必要なトラブルの量です (理由は気にしません。考えられるエラーのほとんどを防止しようとします)。
c# - Reflection は、インジェクトされた DLL で関数を呼び出すのに役立ちますか?
マネージド .NET DLL を .NET プロセスに挿入しました。
ここ StackOverflow で、リフレクションを使用して、挿入された DLL の関数を呼び出すことができると言っている人を見てきました。これは明らかにスヌープが使用するテクニックです。
これは正しいです?もしそうなら、正確にどのようにそれを行うことができますか?
前もって感謝します。
c++ - 別のプロセス アドレス空間で、DLL 内の関数を呼び出す方法
わかりましたので、ターゲット プロセスのアドレス空間に dll を挿入しました。ターゲット プロセスが使用している dll によって提供される関数のリストを返すにはどうすればよいですか。次に、user32.dll に (int test1(str 1, str 2)) という関数が含まれているとしましょう (そうではないことはわかっています)。その関数を呼び出したいのですが、どうすればよいでしょうか?
ありがとう。
assembly - アセンブリ、マシンコードで文字列アドレスをスタックにプッシュする方法
コード インジェクションの仕組みを理解するために、minesweeper.exe を変更しています。簡単に言えば、マインスイーパが開始する前にメッセージ ボックスを表示するようにしたいのです。したがって、実行可能ファイルで「洞窟」を見つけて、メッセージボックスに表示する文字列を定義し、メッセージボックスを呼び出します。さらに、もちろん、実行可能ファイルのモジュール エントリ ポイントで値を変更し、最初にそれを追加のコードに送信してから、独自のコードを続行する必要があります。だから私は洞窟で何をしますか。
ここで、実行ファイル内のコードのメモリアドレスは、メモリにロードされるたびに変化するため、MessageBoxW 関数を呼び出すために、Import Address Table で MessageBoxW が定義されているアドレスのオフセットを与えます。たとえば、がIATMessageBoxWのアドレス 1 に定義されていて、直後の命令が を書き込む
代わりにアドレス 2 にある場合、私は を書き込みます。call MessageBoxWcall MessageBoxWcall address2 - address1
だから私の質問は、文字列のアドレスをスタックにプッシュするにはどうすればよいですか? たとえば、ollydbg を介してこれらの変更を行う場合、プッシュ用に「hello starbuck」の直接アドレスを指定すると、機能します。ただし、実行可能ファイルをリロードするか、ollydbg の外部で開始すると、直接のアドレスが変更されるため、当然失敗します。
前もってありがとう、イギット。
編集:exeが開かれるたびにモジュールエントリポイントの上位ワードが変更されるため、この問題が発生します。したがって、他の文字列がスタックにプッシュされる方法を確認するために、次のようにしました。
コード内に「Destroy Canvas」という文字列が見つかりました。アドレス: 00403E44 にあります。アドレス 0042878E にはPUSH 00403E44、文字列へのポインタがスタックにプッシュされることを意味する命令 (68 44 3E 40 00) があります。次に、UltraEdit で exe を開くと、対応するアドレスが 00027D8E であることがわかりました。そこには、「68 44 3E 40 00」の代わりに「68 44 3E 00 01」と書かれています。これは、OllyDbg が exe をロードするときに、これらのコードを更新することを意味します。00 01 から 40 00 まで。他の文字列を見てみましたが、プッシュ命令も同様です。それで、文字列をプッシュするためにUltraEditで「68 DA 9A 40 00」の代わりに「68 DA 9A 00 01」と書くと、それも更新されるのではないかと思いました。しかし、そうではありません。この後OllyDbgでexeを開くと、プッシュするアドレスが「01009ADA」のまま。
したがって、これらの「コードの更新」手順を整理する何かがあるに違いないと思います。再配置テーブルと関係があるのかもしれませんが、わかりません。
別の質問としてこれを尋ねるべきだと思いますか?
c++ - CreateToolHelp32Snapshot を使用してロードされた dll を検索し、dll 内の関数を検索して呼び出し、GetProcAddress
.dll 内の関数へのハンドルを取得しようとしています。私は CreateToolHelp32Snapshot を作成してから、必要なモジュールが見つかるまでモジュールを列挙しています。その .dll から、特定の関数を見つけたいと考えています。GetProcAddress() を正しく呼び出して、実行中の別のインスタンスではなく「その」.dll 内の関数を取得するにはどうすればよいですか?
上記の質問からの続きは、わかりましたので、関数へのハンドルを持っています。実際にどのように呼び出すのですか?
編集:すでに指摘されているように。私はすでにサードパーティのアプリのアドレス空間にいます。getprocaddress が機能しない場合、readprocessmemory と必要なオフセットを使用して関数のエントリ ポイントを取得するにはどうすればよいですか?
ありがとう。
グレッグ、なぜこれが間違っているのか知りたいですか? エラーはスローされませんが、機能しません。
関数プロトタイプ:
それを呼び出す私の試み:
c - Cを使用したdllインジェクション
ねえ、ハッシュを取得するために lsass.exe などのプロセスに dll を挿入しようとしています。少しハックですが、私のプロジェクトを助けることはできません。dll インジェクションのコードがありますが、Visual C++ では次のようなエラーが発生します。
at TEXT("LoadLibraryA"))))---->>> 引数 const wchar は LPCSTR と互換性がありません
lpFuncAddr で ----------->>> 引数の型「LPVOID」は、パラメーターの型「LPTHREAD_START ROUTINE」と互換性がありません
コード:
dllやwindowsプログラミングの初心者ですので、よろしくお願いします。