posts - 26, comments - 18, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

QQ2007II显示物理IP辅助程序之Loader

Posted on 2008-08-14 19:05 Jerson Ju 阅读(80) 评论(0)  编辑 收藏 网摘 所属分类: c/c++

/****************************************************************


*功能描叙:QQ2007II显示物理IP辅助程序之Loader,负责注入MyDll.dll
           主程序
*作者:朱剑                                                        
*创建日期:2007年12月23号                                                                
*说明:此程序只能用于QQ原理研究,不得用于商业用途,否则后果自负。                                                                
*      本程序是基于黑盒原理分析,符合计算机法规定。并且是基于插件式
*      的方式编写的,没有修改QQ原程序.

*语言:采用C语言+嵌入汇编的方式                                                                

 

*****************************************************************/

 


#include 
"stdafx.h"

#include 
<Tlhelp32.h>
#include
<string>

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     
int       nCmdShow)
{

    STARTUPINFO sinfo;
    PROCESS_INFORMATION processInfo;
    GetStartupInfo(
&sinfo);
    
bool b = CreateProcess("../qq.exe",lpCmdLine,NULL,NULL,false,CREATE_SUSPENDED,NULL,NULL,&sinfo,&processInfo);

          
const DWORD THREADSIZE=1024*4;
        HANDLE pRemoteThread,hRemoteProcess;
        PTHREAD_START_ROUTINE pfnAddr;
        DWORD pId;
        
void *pFileRemote;
        
        PROCESSENTRY32 processEntry
={0};
        
        HANDLE hProcessSnap
=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
        
if(hProcessSnap==INVALID_HANDLE_VALUE)
            
return 0;
        processEntry.dwSize
=sizeof(PROCESSENTRY32);
    
        BOOL bRet
=Process32First(hProcessSnap,&processEntry);
        DWORD qqprocessId 
= 0 ;
        
while(bRet)
        {
            
if(lstrcmpiA(processEntry.szExeFile,"QQ.EXE")== 0)
            {
                qqprocessId 
= processEntry.th32ProcessID;
            }
            bRet
=Process32Next(hProcessSnap,&processEntry);
            
        }
        CloseHandle(hProcessSnap);
        
        
        
if(!qqprocessId)
        {
            MessageBox(NULL,
"不能找QQ!","提示",MB_OK);
            
return 0;
        }
        
else
        {
            hRemoteProcess
=::OpenProcess(PROCESS_ALL_ACCESS,false,qqprocessId);
            pFileRemote
=::VirtualAllocEx(hRemoteProcess,0,THREADSIZE, MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);
            
char szFilePath[MAX_PATH + 1];
            GetModuleFileName(NULL,szFilePath,MAX_PATH);

            
char * flatAddr=strrchr(szFilePath,'\\');
            
char strFile[255]={0};
            memcpy(strFile,szFilePath,flatAddr 
- szFilePath);
            strcat(strFile,
"\\myDll.dll");
            
char   *pchar;  
            pchar
=strFile;  
            
if(!::WriteProcessMemory(hRemoteProcess,pFileRemote,pchar,THREADSIZE,NULL))
            {
                MessageBox(NULL,
"写内存失败","提示",MB_OK);
                
return 0;
            }
            pfnAddr
=(PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")),"LoadLibraryA");
            pRemoteThread
=::CreateRemoteThread(hRemoteProcess,NULL,0,pfnAddr,pFileRemote,0,NULL);
            ResumeThread(processInfo.hThread);
        }

    
return 0;
}

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索

相关文章:

相关链接: