- Win32API質問箱 Build123©2ch.net
324 :デフォルトの名無しさん[age]:2016/12/30(金) 13:34:08.58 ID:qor2kyvR - winsockの関数フックしたいんですけどインポートアドレステーブル上の
ws2_32.dllの関数だけ取得できません。どうしたら? ttp://up2.cache.kouploader.jp/koups19399.txt このコードは 自身のロードしたDLLの関数名を列挙するだけのシンプルなものですが、 やはりwinsockの関数名だけ取得できないです。 ImageDirectoryEntryToData()の第3引数を IMAGE_DIRECTORY_ENTRY_IATや IMAGE_DIRECTORY_ENTRY_DELAY_IMPORTに変えても取得できませんでした(そもそも関数がnull返してくる
|
- Win32API質問箱 Build123©2ch.net
328 :324[sage]:2016/12/30(金) 14:41:23.26 ID:qor2kyvR - >>325
成功しているようです >>326 関数名が名無しということですか? >>327 どのタイミングでですか? if(IMAGE_SNAP_BY_ORDINAL(pThunkData->u1.Ordinal)) winsockの関数だけこのif文が真になります。 ttp://i.imgur.com/jWNmlgm.png デバッガでIAT覗くと、正しい関数名ではないが、2つの関数らしきもの?が表示されていて これがWSAStartup()/WSACleanup()に対応するものだと思われます 他のDLLでは関数名が正しく表示されます。 これが、関数名が名無しということならどう対処するのかご教示頂きたいです。 海外のフォーラムの似たような質問では ImageDirectoryEntryToData()の第3引数を IMAGE_DIRECTORY_ENTRY_DELAY_IMPORTに変えて成功したと書かれていたんですけどね、成功しませんでした。
|
- Win32API質問箱 Build123©2ch.net
332 :デフォルトの名無しさん[sage]:2016/12/30(金) 19:08:50.21 ID:qor2kyvR - >>331
ヒントありがとうございました。解決しました PIMAGE_THUNK_DATA pThunkData = (PIMAGE_THUNK_DATA)((PBYTE)hmodCaller + pImportDesc->OriginalFirstThunk); PIMAGE_THUNK_DATA pRealThunk = (PIMAGE_THUNK_DATA)((PBYTE)hmodCaller + pImportDesc->FirstThunk); while(pThunkData->u1.Function){ FARPROC pfnImportedFunc = (FARPROC)(pRealThunk->u1.Function); ・・・ 上記のIAT上の関数アドレスと、 LoadLibrary()&GetProcAddress()で取得したwinsock関数のアドレス を比較し一致したものを書き換えたら成功しました。 ttp://blog.techlab-xe.net/wp-content/uploads/2014/05/pe-format-import-func-list.png これそもそも 文字列比較より アドレス比較を用いる方法のほうが正確なやりかたですよね?
|