dampee v0.3.1.6 公開
1 月 20th, 2008
v0.3.1.6[2008/01/20]
起動引数に/ejectを付けると、プロセスに注入した監視DLLを除去し、終了するようにした。
監視APIにCreateServiceA/W, LoadLibraryA/W, LoadLibraryExA/W, GetProcAddressを追加。
CreateRemoteThreadをフックし、外部プロセスにフックした関数のアドレスを実行させてエラーになるバグを修正。
色々と強化。安定度も増したんじゃないかな?
GetProcAddressとかしなアカンのは分かってたけど、後回しにしてたので今回それに手を付けた。
こことか参考にさせて頂きました。
CreateRemoteThreadは、なるほどー!!って感じで、やってみたらバグらなくなったのでびっくり。

1 月 20th, 2008 at 10:47 pm
はじめまして、egggardenと申します。
生まれて初めてトラックバックを受けたのが嬉しくて飛んできました。
記事を参考にしていただいたようで何よりです。
IATの改竄はGetProcAddressをフックしないと満足に機能しないのですが、
これをフックするとプロセス間のメモリ共有を利用しているときが面倒ですよね。
CreateRemoteThreadさえ見ておけば大体はOKなんですが、
GetProcAddressの戻り値を含む構造体をWriteProcessMemoryしている場合なんかはどうにもならなかったり。
凄いアプリを作られていますね。
dampeeのようなものは過去に作ろうとしたとはありますが、
面倒で投げてしまいました(こんなの作れるようになりたい…)。
ところで、ちょっと試したところ障害が出てたっぽいので掲示板のほうに投げておきました。
ご確認いただけると幸いです。
1 月 21st, 2008 at 10:35 am
ををををを。はじめまして!
有用な情報ありがとうございます。
俺はトラックバックしてばっかりで、まだされた事ないです笑
プロセス間のメモリ共有まで考えてなくて、なんでたまに不安定になるんだろうと考えあぐねていたところでした。
GetProcAddressの戻り値を含む構造体を別プロセスに渡すなんてことは、そうあるものなんでしょうか??
作り出したら止まらない性格なので、満足できるまでやってしまいます。笑
C++の経験は浅いのですが、作りながら勉強してます。システム関係の知識もほとんど無いので、難しかったです。
デバイスドライバも色々コピペしまくったし・・笑
egggardenさんはそこら辺強そうですね。
掲示板の報告ありがとうございます!確認させて頂きます。
1 月 21st, 2008 at 8:42 pm
>GetProcAddressの戻り値を含む構造体を別プロセスに渡すなんてことは、そうあるものなんでしょうか??
実装される頻度はあまり無いかもしれませんが、手法としては割と知られたものだと思います。
http://japan.internet.com/developer/20050830/26.html
で紹介されている3番目の実装がこのアプローチです。
1リモートスレッドで複数の処理が必要な場合もこのやり方になりますね。
ex:リモートLoadLibraryの失敗時に続けてGetLastErrorを実行させたいときとか
ではまた
1 月 21st, 2008 at 11:08 pm
なるほどー!!
CreateRemoteThreadでリモートで呼び出せる関数は、引数が一つだけのもののみと思っていましたが、二つ以上でも可能だったんですね。
ありがとうございますm(_ _)m