久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4436|回復: 2
打印 上一主題 下一主題
收起左側

屏蔽易游的強制推送廣告

[復制鏈接]
跳轉到指定樓層
樓主
ID:56155 發表于 2013-10-20 23:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  好久沒寫代碼了,花了幾個小時寫了這個程序。因為易游強制推送廣告方面更新了,朋友找我更新一下之前那個程序。這次易游生成的路徑規則改變了,負責廣告推送的DLL沒變,只是隨機路徑,隨機文件夾,隨機文件名。雖然有個文件夾文件名最后有tmp三個字母是確定,但是為了防止它再次更新文件生成的方式,導致程序失效,這次利用了殺毒軟件的特征碼查殺機制,去定位該文件。這樣即使以后易游再次改變路徑規則也一樣能找到。這方式有個缺點就是若日后易游出現大幅度更新該DLL(修改瀏覽器主頁的DLL)就會導致特征碼不匹配。現在這個程序是應急的,下次若是有時間,就改成把特征碼外置到配置文件中,在配置文件中可以修改掃描路徑、修改特征碼等關鍵參數,這樣即使易更新了DLL,那就只需要重新提取特征碼(幾分鐘的事)就能讓程序根據新的特征碼鎖定新的文件,至于鎖定機制還是和以前一樣,采用獨占方式打開文件的方法來鎖定該文件,讓其無法被加載。

這和殺毒軟件與病毒變種之間的對抗很像啊。。。好懷念和小凡以前與殺毒軟件對抗的日子,哈哈。。。

個人最討厭強制推送廣告了,給出完整的源碼,以供日后復習,這次寫的代碼不是很滿意,還有很多地方可以提升性能,初步估計,預計至少速度上能提升50%,其實現在不慢了,不過明天要上班了,朋友又急用,就暫時這樣吧。

// KEyoo.cpp : Defines the entry point for the console application.

//

//
/************************************************************************/
/* 設計者:【L、】QQ:1007566569 */
/************************************************************************/
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>


// 特征碼地址
int TZM_Addr[9] =        {0x00014C49,
0x00014D65,
0x00014EB2,
0x0001511E,
0x000151CA,
0x000153DA,
0x000155F5,
0x000157F8,
0x00016E10};

// 特征碼 考慮到網吧文件的多樣性,這里取9處特征碼 均取該DLL 相關HOOK代碼
unsigned char TZM_Code_0[] = {0x68,  0x44,  0xE3,  0x03,  0x10,  0xE8,  0xBD,  0x21,  0x00,  0x00};
unsigned char TZM_Code_1[] = {0x68,  0x68,  0xE3,  0x03,  0x10,  0xE8,  0xA1,  0x20,  0x00,  0x00};
unsigned char TZM_Code_2[] = {0x51,  0x68,  0x84,  0xE3,  0x03,  0x10,  0xE8,  0x53,  0x1F,  0x00};
unsigned char TZM_Code_3[] = {0x68,  0x98,  0xE3,  0x03,  0x10,  0xE8,  0xE8,  0x1C,  0x00,  0x00};
unsigned char TZM_Code_4[] = {0x68,  0xAC,  0xE3,  0x03,  0x10,  0xE8,  0x3C,  0x1C,  0x00,  0x00};
unsigned char TZM_Code_5[] = {0x68,  0xF8,  0xE3,  0x03,  0x10,  0xE8,  0x2C,  0x1A,  0x00,  0x00};
unsigned char TZM_Code_6[] = {0x68,  0xC4,  0xE3,  0x03,  0x10,  0xE8,  0x11,  0x18,  0x00,  0x00};
unsigned char TZM_Code_7[] = {0x68,  0x4C,  0xE4,  0x03,  0x10,  0xE8,  0x0E,  0x16,  0x00,  0x00};
unsigned char TZM_Code_8[] = {0x55,  0x8B,  0xEC,  0xB8,  0x01,  0x00,  0x00,  0x00,  0x5D,  0xC3};

// 指針,將所有特征碼關聯在一起 方便比對
unsigned char *TZM_Code[9];

// 鎖定文件
BOOL OccupyFile( LPCTSTR lpFileName );

// 鎖定文件數累加 這里只是用來判斷是否找到文件
BOOL KillFileCout = 0;

// 遍歷文件
int viewfiles(char *directory);


// 特征碼匹配
DWORD WINAPI ScanKill_ttsB( LPVOID lpParam )
{
char *File = new char[MAX_PATH];
strcpy(File, (char*)lpParam);// 盡早取出參數

char Code[10] = {0};

FILE *fhand = fopen(File, "rb");

if (fhand == NULL)// 如果無法打開文件則退出
return 1;

// 特征碼一一匹配
for (int i=0; i<9; i++)
{
fseek(fhand, (long)TZM_Addr[i], SEEK_SET);// 移動文件指針到指定位置
fread(Code, 1, 10, fhand);// 取10字節

// 比較
if (memcmp(TZM_Code[i], Code, 10) == 0)
continue;
else
break;// 如果不同則跳出
}
fclose(fhand);

if (i==9)// 如果已經完成了9次比對 說明該文件就是自己要尋找文件。
{
OccupyFile(File);// 將文件鎖定
KillFileCout++;// 累計
}

delete []File;
return 1;
}

// 權限提升
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;
}

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

DWORD FileSize ;

    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 if (strstr(filename, ".dll"))// 第一次過濾 簡單從文件中判斷是否為DLL
{
hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL,OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
FileSize = GetFileSize(hFile, NULL);
CloseHandle(hFile);
if (FileSize > 340000 && FileSize < 350000)// 第二次過濾 只要指定文件大小范圍的DLL文件
{
CreateThread(NULL, NULL, ScanKill_ttsB, (LPVOID)filename, NULL, NULL);
Sleep(10);  // 保證線程參數傳遞完畢  其實應該采用互斥量的形式,這樣能提升性能和穩定性
}
}

delete[] filename;
}
done=FindNextFile(hFind,&fdFindData);
    }
    FindClose(hFind);
    return(count);
}

void Scan()
{
while(1)
{
viewfiles("C:");// 掃描C盤
Sleep(1000);
if (KillFileCout)// 如果已經鎖定了文件則退出
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.9.21 更新    【L、】1007566569\n");

// 將所有特征碼關聯
TZM_Code[0] = TZM_Code_0;
TZM_Code[1] = TZM_Code_1;
TZM_Code[2] = TZM_Code_2;
TZM_Code[3] = TZM_Code_3;
TZM_Code[4] = TZM_Code_4;
TZM_Code[5] = TZM_Code_5;
TZM_Code[6] = TZM_Code_6;
TZM_Code[7] = TZM_Code_7;
TZM_Code[8] = TZM_Code_8;

// 以線程的形式去掃描
CreateThread(NULL, NULL,(LPTHREAD_START_ROUTINE)Scan, NULL, NULL, NULL);
Sleep(120000); // 如果 兩分鐘后還沒有找到文件 那么就退出
return 0;
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:7485 發表于 2013-10-21 08:28 | 只看該作者
高手中的高手!!!!!精英級的!
回復

使用道具 舉報

板凳
ID:1086290 發表于 2024-9-12 11:14 | 只看該作者
這是教嗎?什么意思呢?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久综合伊人77777蜜臀 | 亚洲黄色在线 | 国产成人精品网站 | 日韩一区在线播放 | 精品一区二区三区免费毛片 | 午夜一级视频 | 国产成人影视 | 四虎永久网址 | 国产在线资源 | 欧美一区二区在线 | av网址在线播放 | 日本人の夫妇交换 | 国产成人免费 | 91久久久久国产一区二区 | 黄视频在线播放 | 国产一区二区福利 | 国产调教视频 | 精品久久网站 | 黑人精品xxx一区一二区 | 日韩亚洲欧美在线 | 国产aaaaaa| 91女人18毛片水多国产 | 88av视频| 99视频| 国产欧美视频在线观看 | 国产一级一片免费播放放a 男男成人高潮片免费网站 精品视频在线观看 | 在线免费观看毛片 | 97在线免费视频 | 久久日韩精品 | 手机在线免费看av | 九色在线视频 | 免费毛片在线 | 影音先锋国产精品 | 日韩色av| 夜夜嗨av一区二区三区 | 国产a精品 | 九九热精品视频 | 伊人久久av | 天堂在线免费观看 | 午夜影院黄 | 四虎久久久 |