^ǒ^冬瓜的专栏(子曰:德不孤必有邻)

我总是在不停的奔跑^^^^

东东ID:dedodong
[修改头像]
52448次访问,排名1811好友0人,关注者2
dedodong的文章
原创 36 篇
翻译 1 篇
转载 3 篇
评论 15 篇
^ǒ^冬瓜的公告
子曰:德不孤必有邻
最近评论
dedodong:我会继续开发新功能和完善,增强现有版本,我觉得需要做的还很多很多。。谢谢你的关注。
Dawii:支持一下,不知道接下来的计划是什么?
dedodong:你好lonelygo,我看见你加好友信息了,但不熟悉csdn的好友操作,所以一直没有回复,请见谅。。

我的配置和编译都是基于pc的(也就是在修改输出驱动后,直接configure make),如果不做程序优化的话,和开发板上的交叉编译差别不大(我也不会优化mplayer性能的)。

timer我是使用minigui的timer来定时刷新界面的。。
lonelygo:老兄,我一星期前就发信加你好友了。我最近也在做mplayer在minigui上的移植。可以说一下你配置、编译、移植稍详细点的过程吗?比如还有timer、codec方面,还有就是gui方面。我打算在win32的gui基础上改改,不过感觉难度还是很大的。
dedodong:昨天晚上已发布了,你可以在
http://www.macgood.com/thread-14975-1-1.html
下载,谢谢你的关注.
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes
文章分类
收藏
    相册
    浏览器
    我们网恋吧~~~~~
    存档

    原创 360安全卫士程序员志愿者

    新一篇: 我给同学们课堂上讲CVS在linux上的配置使用的PPT

    9月初,偶然用了360安全卫士,觉得很不错。
    以前自己也有这个想法写个小程序来除去这些可恶的流氓软件。
    现在看到有了
    360安全卫士,心里觉得很爽,所以就去申请加入他们的程序员志愿者。
    并且很荣幸的成为了他们中的一员

    下面是他们发给我的考核题目和我的解答,希望能给大家编程上一些帮助。


    ================================================================

        编写一个程序,在此程序中运行a.exe,并使得a.exe认为是由explorer.exe运行它的。

            ================================================================

     
     
    假设我写的程序名为ddd.exe
     
    在这里,我将使用CreateProcess函数来启动 a.exe ,
     
    如果不进行任何操作而直接使用CreateProcess函数来运行 a.exe的话,
    它默认的父进程将为ddd.exe.
     
    在XP/NT系统中CreateProcess函数的调用过程为
    1:CreateProcessInternalW
    2:NtCreateProcessEx/NtCreateProcess 
    3:PspCreateProcess
     
    其中NtCreateProcessEx/NtCreateProcess函数
    参数ParentProcess的handle指明谁是父进程
    所以我要做的就是 在函数CreateProcess函数的调用NtCreateProcessEX/NtCreatProcess时拦截它,
    并且把CreateProcess函数传递的ParentProcess参数值 改为explorer.exe的句柄 既可实现目的。
     
    步骤1:使用HOOK拦截NtCreateProcess函数
    步骤2:取得进程explorer.exe的句柄 更换ParentProcess参数值后,
           继续调用NtCreateProcess函数
     
    关键代码段1:取进程explorer.exe的句柄
     
    HANDLE hExplorer; //保存explorer.exe的句柄变量
    ......
    ......
    //取所有系统进程
    BOOL Status=Process32First(SnapShot,&ProcessInfo);
    int m_nProcess=0;
    while(Status)
    {
     CString str1;
     str1.Format("%s",ProcessInfo.szExeFile);
     ProcessID[m_nProcess]=ProcessInfo.th32ProcessID;
     
     if(str1=="explorer.exe")  //表明匹配到explorer.exe
     {  
      hExplorer=OpenProcess (PROCESS_ALL_ACCESS,FALSE,ProcessID[m_nProcess]);
      //保存explorer.exe句柄到hExplorer
      break;   //跳出while 
     }
     Status=Process32Next(SnapShot,&ProcessInfo);
     m_nProcess++;
    }  // end while
    ......
    ......
     
     
    关键代码段2:拦截NtCreateProcess函数,并处理
     
    dll关键代码:(注:......为代码省略)
    //替换函数定义申明
    int _stdcall hook_NtCreateProcess( PHANDLE ProcessHandle,
              ACCESS_MASK DesiredAccess,
              POBJECT_ATTRIBUTES ObjectAttributes,
              HANDLE ParentProcess, //就修改这个参数值
              BOOLEAN InheritHandles,
              HANDLE SectionHandle,
              HANDLE DebugPort,
              HANDLE ExceptionPort
              )
             
    {
         ......
      ......   //这里为关键代码段1:取进程explorer.exe的句柄并保存给hExplorer
      ......     
      NtCreateProcess(ProcessHandle,DesiredAccess,ObjectAttributes, 
                       hExplorer,  // hExplorer为explorer.exe的句柄
                       InheritHandles,SectionHandle,DebugPort,ExceptionPort);
         ......
      ......
      ......
    }
     
    //DLLMain 函数中关键代码
     
      HMODULE m_hNtCP = LoadLibrary( "ntdll.dll" );
      g_pNtCP = ( DWORD )GetProcAddress( m_hNtCP, "NtCreateProcess" );
      
      ReadProcessMemory( INVALID_HANDLE_VALUE, ( void * )g_pNtCP,
              ( void * )g_dwOldBytes[0], sizeof( DWORD )*2, NULL );
      //将00400000改写为我们函数的地址
      *( DWORD* )( g_btNewBytes + 1 ) = ( DWORD )hook_NtCreateProcess;
      WriteProcessMemory( INVALID_HANDLE_VALUE, ( void * )g_pNtCP,
            ( void * )g_btNewBytes, sizeof( DWORD )*2, NULL );
     

    发表于 @ 2006年10月07日 02:06:00|评论(loading...)|编辑

    旧一篇:  做QQ桌球游戏外挂——求游戏中的彩球圆心坐标

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © ^ǒ^冬瓜