游客:  注册 | 登录 | 帮助 返回Whitecell


发表新主题   回复主题
作者
Ploymorphours 大大请进(关于绕过防火墙反向连接报警的问题) 上一主题 | 下一主题
lost33


发贴 1
注册 2005-12-26
状态 离线
Ploymorphours 大大请进(关于绕过防火墙反向连接报警的问题)

我找到您的代码,但是编译不通过
我是2000的系统,安装了win2kDDK,
错误如下:
首先是找不到 ntdll.lib   
添加后,报 找不到 ntddk.h
然后添加 ntddk.h   报找不到 ntdef.h
添加 ntdef.h 后就出现了一大堆的乱七八糟的错误,
您能将您的完整的代码,发给我看看吗? 不甚感激

[ Last edited by lost33 on 2009-4-3 at 09:25 AM ]
2005-12-26 05:48 PM
[1 楼]  资料  邮件  搜索  消息  编辑  引用
Polymorphours
Administrator

发贴 33
注册 2005-11-17
状态 离线
哪个代码只是用了一下ddk2K里面ntdll.lib,你把ntdll.lib拷贝到原代码目录下就可以了,包含头文件stdio.h
windows.h,这个程序不是驱动.
2005-12-27 02:47 PM
[2 楼]  资料  邮件  搜索  消息  编辑  引用
ophu


发贴 23
注册 2005-11-21
状态 离线
能否把代码作为附件发上来,或者给个连接,谢谢!
2005-12-27 11:53 PM
[3 楼]  资料  邮件  搜索  消息  编辑  引用
xyzreg


发贴 18
注册 2005-11-20
状态 离线
动态调用ntdll.dll得了~
2005-12-28 04:08 AM
[4 楼]  资料  邮件  主页  搜索  消息  编辑  引用
pomelo


发贴 3
注册 2005-12-9
状态 离线
to Polymorphours:
我试了一下你的代码,在IE进程里插入了自己的一段代码,该代码的作用是监听80端口。
现在的问题是当有连接的时候,cpu占用率会飙升到99% 。不知如何解决,请指教。
代码片断:
int main(void)
{


        if (InjectProcess() )
        {
                MessageBox(NULL,"local","Text",MB_OK);
        }
        else
        {
               
                //MessageBox(NULL,"进程插入完成","Text",MB_OK);
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
        printf("error!WSAStartup failed!\n");
        return -1;
}
saddr.sin_family = AF_INET;

if( gethostname ( name, sizeof(name)) == 0)
{
        if((hostinfo = gethostbyname(name)) != NULL)
        {
                ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
        }
}


saddr.sin_addr.s_addr = inet_addr(ip);     
saddr.sin_port = htons(80);
if((s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==SOCKET_ERROR)
{
        printf("error!socket failed!\n");
        return -1;
}
val = TRUE;

if(setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&val,sizeof(val))!=0)
{
        printf("error!setsockopt failed!\n");
        return -1;
}
if(bind(s,(SOCKADDR *)&saddr,sizeof(saddr))==SOCKET_ERROR)
{
        ret=GetLastError();
        printf("error!bind failed!\n");
        return -1;
}
listen(s,2);   
while(1)
{
        caddsize = sizeof(scaddr);
        sc = accept(s,(struct sockaddr *)&scaddr,&caddsize);
        if(sc!=INVALID_SOCKET)
        {
                mt = CreateThread(NULL,0,ClientThread,(LPVOID)sc,0,&tid);
                if(mt==NULL)
                {
                        printf("Thread Creat Failed!\n");
                        break;
                }
        }
        CloseHandle(mt);
}
closesocket(s);
WSACleanup();
        }

        return 0;
}

[ Last edited by pomelo on 2006-1-13 at 10:27 AM ]
2006-1-13 10:25 AM
[5 楼]  资料  邮件  搜索  消息  编辑  引用
Polymorphours
Administrator

发贴 33
注册 2005-11-17
状态 离线
上面的代码并没有说清楚你的连接后,又做了什么(只看到创建一个Thread),能否贴全一下,也好让我有个参考
2006-1-13 10:36 AM
[6 楼]  资料  邮件  搜索  消息  编辑  引用
pomelo


发贴 3
注册 2005-12-9
状态 离线
嗯 那个ClientThread就是对连接过来的请求进行处理,里面有个while(1)循环进行端口数据转发:
DWORD WINAPI ClientThread(LPVOID lpParam)
{       
  saddr.sin_family = AF_INET;
  saddr.sin_addr.s_addr = inet_addr("127.0.0.1");
  saddr.sin_port = htons(80);
       
    if((sc_http=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==SOCKET_ERROR)
    {
        printf("error!socket failed!\n");
        return -1;
    }
    val = 100;
    if(setsockopt(sc_http,SOL_SOCKET,SO_RCVTIMEO,(char *)&val,sizeof(val))!=0)
    {
        ret = GetLastError();
        return -1;
    }
    if(setsockopt(ss,SOL_SOCKET,SO_RCVTIMEO,(char *)&val,sizeof(val))!=0)
    {
        ret = GetLastError();
        return -1;
    }
       
    if(connect(sc_http,(SOCKADDR *)&saddr,sizeof(saddr))!=0)
    {
        printf("error!socket connect failed!\n");
               
                closesocket(sc_http);
                closesocket(ss);
                return -1;
    }
           while(1)
           {
                   //Sleep(1);
                   num = recv(ss,buf,4096,0);

                           if(num>0)
                                   send(sc_http,buf,num,0);
                           else if(num==0)
                                   break;      
                           num = recv(sc_http,buf,4096,0);
                           if(num>0)
                                   send(ss,buf,num,0);
                           else if(num==0)
                                   break;
                                    
           }
           closesocket(sc_http);
           closesocket(sc_terminal);
           return 0 ;
}
并且这样还不能debug调试,F5运行的话,IE会报错。
2006-1-13 03:22 PM
[7 楼]  资料  邮件  搜索  消息  编辑  引用
pomelo


发贴 3
注册 2005-12-9
状态 离线
http://community.csdn.net/Expert/topic/4272/4272310.xml?temp=.4642298
你看看这个链接 我试了一下里面的方法, 在while()中加sleep(1)的话 会变得很慢... 郁闷啊....
2006-1-13 03:24 PM
[8 楼]  资料  邮件  搜索  消息  编辑  引用
发表新主题   回复主题
可打印版本 | 订阅主题 | 收藏主题
论坛跳转:


[ Script Execution time: 0.009744 ]   [ 9 queries used ]   [ GZIP Enabled ]
 

Powered by Discuz! © 2001-05