找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3105|回复: 0
打印 上一主题 下一主题
收起左侧

独占式强锁文件 - K掉易游强制锁定广告主页

[复制链接]
跳转到指定楼层
楼主
ID:71922 发表于 2015-1-10 23:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       今天帮我的朋友设计了一个小程序。是解决易游强制锁定IE的广告主页。他是几家连锁的中型网吧技术负责人,所以通过推广广告主页赚点外快。。。嘿嘿。。。

        根据他解释,无论怎么设置主页,打开IE浏览器后总会被强制跳转到易游自己的百度推广主页,所以很奸诈。他仔细研究了下,这次易游是在C:\windows\system32\ 目录下 随机寻找一个文件夹,然后再在那个文件夹里面建立一个随机命名的文件夹,在这个随机命名的文件夹中生成两个随机命名的DLL和一个固定名字EyooSecSet.dll的DLL文件。他给出的思路是以EyooSecSet.dll为突破点,遍历System32文件下所有文件,找到这个EyooSecSet.dll就表示找到该文件夹,然后设置拒绝控制的权限,使那这些DLL文件无法被加载到IE浏览器中。据我粗略观察,其中起作用的是两个随机命名DLL文件中的其中一个被注入到IE里面(可能不是注入而是利用了消息钩子)。这次他找出问题所在并且也有思路,所以这次从设计到成品时间很短。由于在VC中设置文件夹权限比较复杂点,所以想起当年自己设计木马的时候防止360上传时利用CreateFile独占方式打开文件,让360无法读取文件。这招在当时,360还无法粉碎呢,嘎嘎。。。 觉得反正能达到目的那就从简开始。给出代码。方便以后自己复习用。

    我自己的设计思路是利用杀毒软件的特征码技术来确定那是三个DLL,因为DLL的名字或许会变更。后来想想,一般都不会变吧。。到时候变了再说。。。

    [color=#060df9,strength=3);COLOR:white;text-shadow:1px][color=#060df9,strength=3);COLOR:white;text-shadow:1px]以前设计的程序没有给出源码的都会陆续给出。)

==================================================================================
///************************************************************************/
/* 设计者:【L、】QQ:1007566569                               */
/************************************************************************/
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
// 遍历文件代码
int viewfiles(char *directory);
// 锁定文件
BOOL OccupyFile( LPCTSTR lpFileName );
BOOL EXIT = TRUE;
// 提升权限

void RaiseToDebugP()
{
    HANDLE hToken;
    HANDLE hProcess = GetCurrentProcess();
    if ( OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken) )
    {
        TOKEN_PRIVILEGES tkp;
        if ( LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid) )
        {
            tkp.PrivilegeCount = 1;
            tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
            
            BOOL bREt = AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0) ;
        }
        CloseHandle(hToken);
    }   
}

// 这个函数是为了把文件句柄复制到 System 进程 这样本程序即使退出 被锁定的文件也不会失效
BOOL OccupyFile( LPCTSTR lpFileName )
{
    BOOL    bRet;
   
    RaiseToDebugP();

// 打开System进程
    HANDLE hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, 4);    // 4为system进程号

    if ( hProcess == NULL )
    {
        hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, 8);        
        
        if ( hProcess == NULL )
            return FALSE;
    }

    HANDLE hFile;
    HANDLE hTargetHandle;
// 独占方式打开文件 网上的不是打开
hFile =CreateFile(lpFileName,GENERIC_READ,0,NULL,OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS,0);

    if ( hFile == INVALID_HANDLE_VALUE )
    {
        CloseHandle( hProcess );
        return FALSE;
    }

    // 禁止内核关闭该句柄 一般情况下如果在内核关闭该句柄会蓝屏
    SetHandleInformation(hFile,HANDLE_FLAG_PROTECT_FROM_CLOSE,HANDLE_FLAG_PROTECT_FROM_CLOSE);
// 这步是关键 从当前进程复制文件句柄到System进程空间 这样本程序即使退出 但是句柄在System进程内仍有效
   bRet = DuplicateHandle( GetCurrentProcess(), hFile, hProcess, &hTargetHandle,
        0, FALSE, DUPLICATE_SAME_ACCESS|DUPLICATE_CLOSE_SOURCE);

    CloseHandle( hProcess );

    return bRet;
}

// 找到该文件夹后 遍历所有文件 并且锁定
DWORD WINAPI viewfilesLock( LPVOID lpParam )
{
char directory[MAX_PATH] = {0};
strcpy(directory, (char*)lpParam);
    WIN32_FIND_DATA fdFindData;
    HANDLE hFind;
    char *filename;
    int count=0;
    BOOL done;

    filename=new char[strlen(directory)+5];

strcpy(filename,directory);
    strcat(filename,"\\*.*");
// 这里都是普通的便利文件代码。。。
    hFind=FindFirstFile(filename,&fdFindData);
    delete[] filename;
    done=hFind!=INVALID_HANDLE_VALUE;
    while(done)
    {
  
  if(strcmp(fdFindData.cFileName,".") && strcmp(fdFindData.cFileName,".."))
  {
   filename=new char[strlen(directory)+strlen(fdFindData.cFileName)+2];
   strcpy(filename,directory);
   strcat(filename,"\\");
   strcat(filename,fdFindData.cFileName);
   if((fdFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY )
   {
    viewfiles(filename);
   }
   else
   {
    // 凡是文件 都将被锁定
    printf("文件路径:%s\n",filename);
    OccupyFile(filename);
   }
   delete[] filename;
  }
  done=FindNextFile(hFind,&fdFindData);
    }
    FindClose(hFind);
EXIT = FALSE;  // 标记可以退出
    return(count);
}

// 遍历指定文件夹
int viewfiles(char *directory)
{
    WIN32_FIND_DATA fdFindData;
    HANDLE hFind;
    char *filename;
    int count=0;
    BOOL done;

    filename=new char[strlen(directory)+5];

strcpy(filename,directory);
    strcat(filename,"\\*.*");
    hFind=FindFirstFile(filename,&fdFindData);
    delete[] filename;
    done=hFind!=INVALID_HANDLE_VALUE;
    while(done)
    {
  
  if(strcmp(fdFindData.cFileName,".") && strcmp(fdFindData.cFileName,".."))
  {
   filename=new char[strlen(directory)+strlen(fdFindData.cFileName)+2];
   strcpy(filename,directory);
   strcat(filename,"\\");
   strcat(filename,fdFindData.cFileName);
   if((fdFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY )
   {
    viewfiles(filename);
   }// 如果文件名为 EyooSecSet.dll 这步之所以用 strstr是为了省时间。不想重新处理文件路径。正确的应该先处理文件路径获取文件名再比较
   else if (strstr(filename, "EyooSecSet.dll"))
   {
    char DllFile[MAX_PATH] = {0};
    strcpy(DllFile, filename);
    *strrchr(DllFile, '\\') = '\0';
    // 创建线程去锁定包含了 EyooSecSet.dll 文件的文件夹下所有文件
    CreateThread(NULL, NULL, viewfilesLock, (LPVOID)DllFile, NULL, NULL);
    Sleep(500);  // 保证线程参数传递完毕
   }
        
   delete[] filename;
  }
  done=FindNextFile(hFind,&fdFindData);
    }
    FindClose(hFind);
    return(count);
}
void Scan()
{
while(EXIT)
{
  viewfiles("C:\\windows\\system32");
  Sleep(1000);
}
exit(1); // 如果找到了这些文件 就退出
}


int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
// 运行时 去除鼠标指针漏斗
GetInputState();
PostThreadMessage(GetCurrentThreadId(), NULL, NULL, NULL);
MSG msg;
GetMessage(&msg, NULL, NULL, NULL);
printf("用于解决易游锁定IE广告主页 2013.3.29    【L、】1007566569");
CreateThread(NULL, NULL,(LPTHREAD_START_ROUTINE)Scan, NULL, NULL, NULL);
Sleep(120000); // 如果 两分钟后还没有找到文件 那么就退出
return 0;
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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