freshbug's notes

freshbug的代码人生

bekilledlzyID:bekilledlzy
[修改头像]
11883次访问,排名8272(-5)好友0人,关注者0
bekilledlzy的文章
原创 17 篇
翻译 0 篇
转载 32 篇
评论 6 篇
freshbug的公告
访问www.freshbug.com
自2007年10月16日
freshbug的联系方式:
freshbug@gmail.com
最近评论
loadend:你好,我想问一下,那注册google ad帐户的时候不是要填网址嘛,填什么呢?是不是填http://blog.csdn.net/用户名/??
freshbug:stl里面有一些静态变量 不能跨dll vector有时候能跨dll是因为连续的内存分布

跨模块传输数据最好是能用C风格的结构 用C++类很容易出问题
wang:我是向dll中传一个map指针,结果也是it++之后就内存泄漏
wang:我也遇到了类似问题。
远离尘嚣:老大,能把你的Uft8ToAnsi是自定义的转码函数共享一下嘛?万分感谢!
文章分类
收藏
    相册
    who's freshbug?
    技术站点
    老牛们的blog
    咨讯
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 封装好的DLL远程注入函数

    新一篇: 移除dll并保持正常运行

    函数名称: CreateRemoteDll()

    返加类型:BOOL

    接受参数: DLL路径,注入进程ID

    其完整代码如下:

     

    BOOL CreateRemoteDll(const char *DllFullPath, const DWORD dwRemoteProcessId)
    {


        HANDLE hToken;
        
    if ( OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken) )
        
    {
            TOKEN_PRIVILEGES tkp;
            
            LookupPrivilegeValue( NULL,SE_DEBUG_NAME,
    &tkp.Privileges[0].Luid );//修改进程权限
            tkp.PrivilegeCount=1;
            tkp.Privileges[
    0].Attributes=SE_PRIVILEGE_ENABLED;
            AdjustTokenPrivileges( hToken,FALSE,
    &tkp,sizeof tkp,NULL,NULL );//通知系统修改进程权限
            
        }



        HANDLE hRemoteProcess;

        
    //打开远程线程
        if( (hRemoteProcess = OpenProcess( PROCESS_CREATE_THREAD |    //允许远程创建线程
                                PROCESS_VM_OPERATION |                //允许远程VM操作
                                PROCESS_VM_WRITE,                    //允许远程VM写
                                FALSE, dwRemoteProcessId ) )== NULL )
        
    {
            AfxMessageBox(
    "OpenProcess Error!");
            
    return FALSE;
        }


        
    char *pszLibFileRemote;
        
    //在远程进程的内存地址空间分配DLL文件名缓冲区
        pszLibFileRemote = (char *) VirtualAllocEx( hRemoteProcess, NULL, lstrlen(DllFullPath)+1
                                MEM_COMMIT, PAGE_READWRITE);
        
    if(pszLibFileRemote == NULL)
        
    {
            AfxMessageBox(
    "VirtualAllocEx error! ");
            
    return FALSE;
        }


        
    //将DLL的路径名复制到远程进程的内存空间
        if( WriteProcessMemory(hRemoteProcess,
                    pszLibFileRemote, (
    void *) DllFullPath, lstrlen(DllFullPath)+1, NULL) == 0)
        
    {
            AfxMessageBox(
    "WriteProcessMemory Error");
            
    return FALSE;
        }


        
    //计算LoadLibraryA的入口地址
        PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)
                GetProcAddress(GetModuleHandle(TEXT(
    "Kernel32")), "LoadLibraryA");

        
    if(pfnStartAddr == NULL)
        
    {
            AfxMessageBox(
    "GetProcAddress Error");
            
    return FALSE;
        }


        HANDLE hRemoteThread;
        
    if( (hRemoteThread = CreateRemoteThread( hRemoteProcess, NULL, 0
                    pfnStartAddr, pszLibFileRemote, 
    0, NULL) ) == NULL)
        
    {
            AfxMessageBox(
    "CreateRemoteThread Error");
            
    return FALSE;
        }


        
    return TRUE;
    }
     
     

    发表于 @ 2007年10月17日 10:52:00|评论(loading...)|编辑

    旧一篇: 用SecureCRT来上传和下载数据

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © freshbug