HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0723
beryDLLインジェクションについて5解決


bery

リンク

2017/7/23(Sun) 21:36:56|NO.80693

HSPでのDLLインジェクトは可能でしょうか?
もし分かる方いらっしゃれば教えてください。



この記事に返信する


lp

リンク

2017/7/24(Mon) 13:17:34|NO.80696

インジェクトはできる(当たり前だけど)
インジェクトされるDLLはCとかで書くか、もしくはこういうの
http://dev.onionsoft.net/seed/info.ax?id=1317
を使うか



lp

リンク

2017/7/24(Mon) 13:19:29|NO.80697

ああでもhspは32ビットだから、64ビットプロセスには入れられないか



bery

リンク

2017/7/24(Mon) 20:21:18|NO.80699

DLLは作成してあります。
ちなみに http://cats.genin.jp/code/sys.html
ここのサイトに書いてあるインジェクト方法なのですが
いまいちよくわかりません。
もしtest.exeにtest.dllをインジェクトするならばどうすればよいでしょう?



lp

リンク

2017/7/24(Mon) 21:54:50|NO.80700

説明してみます。わからないところがあったら言ってください。

まず、プロセスを開いて(OpenProcess)、そのプロセス(以下リモートプロセス)のメモリ内にDLLのパスを書き込みます。
(VirtualAllocExでリモートプロセスにおけるメモリを確保、WriteProcessMemoryで書き込む)
さて、ここでリモートプロセスにスレッドを作成(CreateRemoteThread)するわけですが、CreateRemoteThread
で指定するスレッドの関数はリモートプロセス内に存在しなければいけません。
示されたサイトを見てみると、スレッドの関数には自分のプロセスにあるLoadLibraryA関数のアドレスが指定されています。
これがどういうことかというと、kernel32.dllは特別なDLLで、すべてのプロセスに必ず読み込まれ、かつ
その読み込まれるアドレスはすべてのプロセスで同じなのです。
このため、自分のプロセスのLoadLibraryA関数とリモートプロセスのLoadLibraryA関数のアドレスが同じであるため、
CreateRemoteProcessは成功し、リモートプロセスに新しくスレッドを作成し、LoadLibraryAを呼び出すということです。
このとき、LoadLibraryに渡される引数はCreateRemoteProcessの5番目の引数に指定された値、すなわちDllのパスへのポインタとなるわけです。



bery

リンク

2017/7/25(Tue) 08:27:47|NO.80703

ありがとうございます!



ONION software Copyright 1997-2021(c) All rights reserved.