DIY WindowsXP记事本

下面开始
准备工具:OllyDbg  ResHacker LordPE  WinXP记事本
好了可以开工了 
首先是介绍一下基本思路
因为记事本是别人的东西我们要添加功能进去只能修改exe文件或者添加一个DLL来实现自己的功能.第一种方法 要复杂一些因为要涉及到PE文件知识和汇编知识.我们用第二种方法,添加一个DLL文件来扩展功能这样可以无限制的扩展记事本的功能 所以 下一步添加一个像QQ那样的 在屏幕边缘自动隐藏功能 感觉比透明功能好玩
要给Windows可执行文件添加功能主要是添加消息处理.所以我们就从消息处理入手.这里的方法是看雪的一位牛人给出的:
在记事本的消息处理函数之前添加自己的消息处理函数来处理消息.而且把这个处理函数放到一个DLL里面 这样记事本的功能就可以无限制的扩展了(夸张的说),要添加什么功能只要添加一个消息处理就够了而且只是在DLL里面添加 可以使用自己熟悉的语言来写这个DLL使得添加功能变的更简单一些.实现以上的想法开始了 首先来写这个DLL我们只要一个消息处理函数就够了 所以这个DLL只要有一个导出函数:
我是用DEVC++创建的 语言使用的是C语言
DevC++会自动为我们生成一个模板我们基本上不用自己怎么动手,下面是我们的消息处理函数

void _cdecl Plug(const DWORD reversed,HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
     switch(msg){
                 //case WM_CREATE:
                 //     MessageBox(hWnd,"敏子","oo",0x40);
                 //     break;
                 case WM_COMMAND:
                      cmdProc( hWnd,wParam,lParam); //处理WM_COMMAND消息 
                      break;
                 }
                
} //这个函数就是消息处理函数 你可以在里面处理记事本的所有消息

void cmdProc(HWND hWnd,WPARAM wParam,LPARAM lParam)
     {
          switch(wParam) 
          {
              case 28:           
                if (trapos==0) 
                  {   
                 setlayered(hWnd);
                 trapos=1;
                 checkMenu(hWnd,28);
                  }
                 else
                 {
                     setulayered(hWnd);
                     trapos=0;
                     uncheckMenu(hWnd,28);
                 }
                 break; 
                 //---------------------
              case 29:
                   if (toppos==0)
                   {
                   SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS) ;          
                   toppos=1;
                   checkMenu(hWnd,29);
                   }  
                   else
                   {
                   SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS) ;
                   toppos=0;
                   uncheckMenu(hWnd,29);
                   }  
                   break; 
               case 30:
                    
                    MessageBox(hWnd,"最爱敏子","嘿嘿",0x40); 
                    break;         
                         }    
               
     }
//这个是处理WM_COMMAND消息的函数主要用来处理我们添加的菜单项


//下面的是我们用来实现功能的功能代码就是我们要总在前面和透明功能
这两个功能要使用到的函数:
GetModuleHandle
GetProcAddress
GetWindowLong
SetWindowLong
SetLayeredWindowAttributes    //该函数属于未公开函数要自己获得
CheckMenuItem
SetWindowPos
关于这几个函数的作用和功能请大家查看互联网或者MSDN这里就不做解释了
void setlayered(HWND hwnd)   //设置窗体透明 透明度为128 
{
  
  HMODULE user32=GetModuleHandle("USER32.DLL"); //获得user32链接库的句柄 
  
  transparence=(lpfn)GetProcAddress(user32,"SetLayeredWindowAttributes");  //获得SetLayeredWindowAttributes的句柄 
  
   long ret=GetWindowLong(hwnd,GWL_EXSTYLE);
   
   ret=ret|WS_EX_LAYERED ;
  
   SetWindowLong(hwnd, GWL_EXSTYLE, ret);
  
   transparence(hwnd, 0,128,2);
  
  }  
void setulayered(HWND hwnd)  //取消透明 
{
    long ret=GetWindowLong(hwnd,GWL_EXSTYLE);
    ret=ret&EX_STYLE;
    SetWindowLong(hwnd, GWL_EXSTYLE, ret);

void checkMenu(HWND hwnd,int ID)  //设置菜单的check标记 
{
      HWND menu=GetMenu(hwnd);
      HWND popMenu=GetSubMenu(menu,3);
      CheckMenuItem(popMenu,ID, MF_CHECKED);
}
  void uncheckMenu(HWND hwnd,int ID)  //取消菜单的check标记 
{
      HWND menu=GetMenu(hwnd);
      HWND popMenu=GetSubMenu(menu,3);
      CheckMenuItem(popMenu,ID, MF_UNCHECKED);
}
  

//在dll.h头文件里面添加一个导出函数
DLLIMPORT void _cdecl Plug ( DWORD,HWND ,UINT ,WPARAM ,LPARAM );

然后编译生成这个DLL就可以开始下面的工作了

//首先用Load PE把这个DLL给记事本添加进去 使用load PE很方便的 用load打开记事本 然后选择导入表 然后 在出来的选项中添加DLL的名字是Plug.dll(就是你编译生成的DLL名称) 要导入的函数名字是 Plug(你在DLL里面用的消息处理函数名字)

这里的就说这么多 不懂的可以问 或者查下资料
添加后这个函数的地址1013010
这个地址就不介绍怎么找到很简单
下一步是找到windows的消息处理函数地址
命令行下断
bp RegisterClassExW
确定 然后F9 断了下来 查看堆栈会看到
call到RegisterClassExW来自 01004550
向下看他的参数
01003429  
这个就是我们要的
在这里回车 然后就来到了01003429
在这里我们要用一个call语句 
在01003424这里点汇编 然后输入一句
call dword ptr[01013010]
占用三个字节 后面自动补了一个nop
这样 还没有好 我们还要找到WndClass结构然后修改那里的消息处理函数这个比较好找 
call到RegisterClassExW来自 01004550
这句话最后的那个地址就是线索 转到这里吧
向上找参数 看到01003429 就是修改他了 这个是原来的消息处理地址 现在要换成我们的就是01003424
修改好后 在OD里面点右键 选择保存到可执行文件-->选择全部-->然后右键保存 就可以了 关闭OD运行一下你的NOTEPAD吧
忘记写了 菜单是用ResourceHack 添加进去的 注意ID不能和原来的重复  透明菜单用的ID是28 置顶菜单用的是29 最后的关于菜单用的是30     
本想一张一张配图的 哈哈 论坛不能一个一个上传 没有办法  只能这样传了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值