找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2667|回复: 0

捕获FileProtocolHandler

[复制链接]
发表于 2014-3-2 13:09:05 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
  1. #include <windows.h>
  2. #include <wininet.h>
  3. #include <shlwapi.h>
  4. #include <shellapi.h>
  5. #pragma comment(lib,"shlwapi.lib")

  6. HMODULE hURL=NULL;

  7. BOOL APIENTRY DllMain( HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)
  8. {
  9.         if(!hURL)
  10.         {
  11.                 hURL=LoadLibraryA("url_origin.dll");
  12.                 if(hURL)
  13.                         MessageBox(NULL,"loadsuccess","ok",MB_OK);
  14.                 else
  15.                         MessageBox(NULL,"loadfailed","ok",MB_OK);
  16.         }
  17.         switch (ul_reason_for_call)
  18.         {
  19.                 case DLL_PROCESS_ATTACH:
  20.                 case DLL_THREAD_ATTACH:
  21.                 case DLL_THREAD_DETACH:
  22.                 case DLL_PROCESS_DETACH:
  23.                         break;
  24.         }
  25.         return TRUE;
  26. }

  27. //101
  28. BOOL WINAPI Ordinal101(BOOL setflag)
  29. {
  30.         FARPROC func=GetProcAddress(hURL,(LPCSTR)MAKELONG(0,101));
  31.         if(func)
  32.         {
  33.                 _asm
  34.                 {
  35.                         push setflag;
  36.                         call func;
  37.                 }
  38.         }
  39.         return setflag;
  40. }

  41. //102
  42. HRESULT WINAPI AddMIMEFileTypesPS(DWORD a1,DWORD a2)
  43. {
  44.         FARPROC func=GetProcAddress(hURL,"AddMIMEFileTypesPS");
  45.         HRESULT retv;
  46.         if(func)
  47.         {
  48.                 _asm
  49.                 {
  50.                         push a2;
  51.                         push a1;
  52.                         call func;
  53.                         mov retv,eax;
  54.                 }
  55.         }
  56.         return retv;
  57. }

  58. //103
  59. VOID WINAPI AutodialHookCallback()
  60. {
  61.         HMODULE hmod=LoadLibraryA("wininet.dll");
  62.         FARPROC proc=GetProcAddress(hmod,"InternetAutodialCallback");
  63.         ((VOID (*)())proc)();
  64. }

  65. //104 105
  66. VOID CALLBACK FileProtocolHandler(HWND hwnd,HINSTANCE hinst,LPSTR lpFile,INT nCmdShow)
  67. {
  68.         LPSTR ptr=lpFile;
  69.         DWORD pcchPath=260;
  70.         MessageBox(NULL,lpFile,"FileProtocolHandler",MB_OK);
  71.         FARPROC func=GetProcAddress(hURL,"FileProtocolHandler");
  72.         if(func)
  73.         {
  74.                 _asm
  75.                 {
  76.                         push nCmdShow;
  77.                         push lpFile;
  78.                         push hinst;
  79.                         push hwnd;
  80.                         call func;
  81.                 }
  82.         }
  83. }

  84. //106
  85. BOOL WINAPI InetIsOffline(DWORD dwFlags)
  86. {
  87.         FARPROC func=GetProcAddress(hURL,"InetIsOffline");
  88.         BOOL retv;
  89.         if(func)
  90.         {
  91.                 _asm
  92.                 {
  93.                         push dwFlags;
  94.                         call func;
  95.                         mov retv,eax;
  96.                 }
  97.         }
  98.         return retv;
  99. }

  100. //107 108 117 118
  101. HRESULT WINAPI URLAssociationDialogA(HWND hwndParent, DWORD dwInFlags, PCSTR pcszFile, PCSTR pcszURL, PSTR pszAppBuf, UINT ucAppBufLen)
  102. {
  103.         SetLastError(ERROR_NOT_SUPPORTED );
  104.         return E_NOTIMPL;
  105. }

  106. //109 110
  107. VOID WINAPI MailToProtocolHandler(HWND hwnd,HINSTANCE hinst, LPSTR lpCmdLine,INT nCmdShow)
  108. {
  109.         MessageBox(NULL,lpCmdLine,"MailToProtocolHandler",MB_OK);
  110.         FARPROC func=GetProcAddress(hURL,"MailToProtocolHandler");
  111.         if(func)
  112.         {
  113.                 _asm
  114.                 {
  115.                         push nCmdShow;
  116.                         push lpCmdLine;
  117.                         push hinst;
  118.                         push hwnd
  119.                                 call func;
  120.                 }
  121.         }
  122. }

  123. //111 112
  124. VOID WINAPI OpenURL(HWND hwnd, HINSTANCE hinst, LPSTR lpCmdLine, INT nCmdShow)
  125. {
  126.         MessageBox(NULL,lpCmdLine,"OpenURL",MB_OK);
  127.         ShellExecute(hwnd,NULL,lpCmdLine,NULL,NULL,nCmdShow);
  128. }

  129. //113 114
  130. VOID TelnetProtocolHandler(HWND hwnd, HINSTANCE hinst, LPSTR lpCmdLine, INT nCmdShow)
  131. {
  132.         MessageBox(NULL,lpCmdLine,"TelnetProtocolHandler",MB_OK);
  133.         FARPROC func=GetProcAddress(hURL,"TelnetProtocolHandler");
  134.         if(func)
  135.         {
  136.                 _asm
  137.                 {
  138.                         push nCmdShow;
  139.                         push lpCmdLine;
  140.                         push hinst;
  141.                         push hwnd
  142.                                 call func;
  143.                 }
  144.         }
  145. }

  146. HRESULT WINAPI TranslateURLA(PCSTR pcszURL, DWORD dwInFlags, PSTR *ppszTranslatedURL)
  147. {
  148.         MessageBoxA(NULL,pcszURL,"TranslateURL",MB_OK);
  149.         FARPROC func=GetProcAddress(hURL,"TranslateURLA");
  150.         HRESULT retv;
  151.         if(func)
  152.         {
  153.                 _asm
  154.                 {
  155.                         push ppszTranslatedURL;
  156.                         push dwInFlags;
  157.                         push pcszURL;
  158.                         call func;
  159.                         mov retv,eax;
  160.                 }
  161.         }
  162.         return retv;
  163. }

  164. HRESULT WINAPI TranslateURLW(PCWSTR pcszURL, DWORD dwInFlags, PWSTR *ppszTranslatedURL)
  165. {
  166.         MessageBoxW(NULL,pcszURL,L"TranslateURL",MB_OK);
  167.         FARPROC func=GetProcAddress(hURL,"TranslateURLW");
  168.         HRESULT retv;
  169.         if(func)
  170.         {
  171.                 _asm
  172.                 {
  173.                         push ppszTranslatedURL;
  174.                         push dwInFlags;
  175.                         push pcszURL;
  176.                         call func;
  177.                         mov retv,eax;
  178.                 }
  179.         }
  180.         return retv;
  181. }

复制代码



  1. LIBRARY url
  2. EXPORTS
  3.         Ordinal101                                        @101
  4.         AddMIMEFileTypesPS                @102
  5.         AutodialHookCallback        @103
  6.         FileProtocolHandler                @104
  7.         FileProtocolHandlerA=FileProtocolHandler                        @105
  8.         InetIsOffline                                        @106
  9.         URLAssociationDialogA        @107
  10.         URLAssociationDialogW=URLAssociationDialogA        @108
  11.         MailToProtocolHandler        @109
  12.         MailToProtocolHandlerA=MailToProtocolHandler        @110
  13.         OpenURL                                                @111
  14.         OpenURLA        =OpenURL        @112
  15.         TelnetProtocolHandler        @113
  16.         TelnetProtocolHandlerA=TelnetProtocolHandler        @114
  17.         TranslateURLA                                @115
  18.         TranslateURLW                                @116
  19.         URLAssociationDialogA=URLAssociationDialogA        @117
  20.         URLAssociationDialogW=URLAssociationDialogA        @118
复制代码


编译成dll以后,替换system32下的url.dll,将原始dll改名为url_origin.dll,即可捕获url.dll中函数的执行,如果是64位系统需要编译成64位dll

回复

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-22 18:35 , Processed in 0.033519 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表