下面开始
准备工具:OllyDbgResHackerLordPEWinXP记事本
好了可以开工了
首先是介绍一下基本思路
因为记事本是别人的东西我们要添加功能进去只能修改exe文件或者添加一个DLL来实现自己的功能.第一种方法要复杂一些因为要涉及到PE文件知识和汇编知识.我们用第二种方法,添加一个DLL文件来扩展功能这样可以无限制的扩展记事本的功能所以下一步添加一个像QQ那样的在屏幕边缘自动隐藏功能感觉比透明功能好玩
要给Windows可执行文件添加功能主要是添加消息处理.所以我们就从消息处理入手.这里的方法是看雪的一位牛人给出的:
在记事本的消息处理函数之前添加自己的消息处理函数来处理消息.而且把这个处理函数放到一个DLL里面这样记事本的功能就可以无限制的扩展了(夸张的说),要添加什么功能只要添加一个消息处理就够了而且只是在DLL里面添加可以使用自己熟悉的语言来写这个DLL使得添加功能变的更简单一些.实现以上的想法开始了首先来写这个DLL我们只要一个消息处理函数就够了所以这个DLL只要有一个导出函数:
我是用DEVC++创建的语言使用的是C语言
DevC++会自动为我们生成一个模板我们基本上不用自己怎么动手,下面是我们的消息处理函数
void_cdeclPlug(constDWORDreversed,HWNDhWnd,UINTmsg,WPARAMwParam,LPARAMlParam)
{
switch(msg){
//caseWM_CREATE:
//MessageBox(hWnd,"敏子","oo",0x40);
//break;
caseWM_COMMAND:
cmdProc(hWnd,wParam,lParam);//处理WM_COMMAND消息
break;
}
}//这个函数就是消息处理函数你可以在里面处理记事本的所有消息
voidcmdProc(HWNDhWnd,WPARAMwParam,LPARAMlParam)
{
switch(wParam)
{
case28:
if(trapos==0)
{
setlayered(hWnd);
trapos=1;
checkMenu(hWnd,28);
}
else
{
setulayered(hWnd);
trapos=0;
uncheckMenu(hWnd,28);
}
break;
//---------------------
case29:
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;
case30:
MessageBox(hWnd,"最爱敏子","嘿嘿",0x40);
break;
}
}
//这个是处理WM_COMMAND消息的函数主要用来处理我们添加的菜单项
//下面的是我们用来实现功能的功能代码就是我们要总在前面和透明功能
这两个功能要使用到的函数:
GetModuleHandle
GetProcAddress
GetWindowLong
SetWindowLong
SetLayeredWindowAttributes//该函数属于未公开函数要自己获得
CheckMenuItem
SetWindowPos
关于这几个函数的作用和功能请大家查看互联网或者MSDN这里就不做解释了
voidsetlayered(HWNDhwnd)//设置窗体透明透明度为128
{
HMODULEuser32=GetModuleHandle("USER32.DLL");//获得user32链接库的句柄
transparence=(lpfn)GetProcAddress(user32,"SetLayeredWindowAttributes");//获得SetLayeredWindowAttributes的句柄
longret=GetWindowLong(hwnd,GWL_EXSTYLE);
ret=ret|WS_EX_LAYERED;
SetWindowLong(hwnd,GWL_EXSTYLE,ret);
transparence(hwnd,0,128,2);
}
voidsetulayered(HWNDhwnd)//取消透明
{
longret=GetWindowLong(hwnd,GWL_EXSTYLE);
ret=ret&EX_STYLE;
SetWindowLong(hwnd,GWL_EXSTYLE,ret);
}
voidcheckMenu(HWNDhwnd,intID)//设置菜单的check标记
{
HWNDmenu=GetMenu(hwnd);
HWNDpopMenu=GetSubMenu(menu,3);
CheckMenuItem(popMenu,ID,MF_CHECKED);
}
voiduncheckMenu(HWNDhwnd,intID)//取消菜单的check标记
{
HWNDmenu=GetMenu(hwnd);
HWNDpopMenu=GetSubMenu(menu,3);
CheckMenuItem(popMenu,ID,MF_UNCHECKED);
}
//在dll.h头文件里面添加一个导出函数
DLLIMPORTvoid_cdeclPlug(DWORD,HWND,UINT,WPARAM,LPARAM);
然后编译生成这个DLL就可以开始下面的工作了
//首先用LoadPE把这个DLL给记事本添加进去使用loadPE很方便的用load打开记事本然后选择导入表然后在出来的选项中添加DLL的名字是Plug.dll(就是你编译生成的DLL名称)要导入的函数名字是Plug(你在DLL里面用的消息处理函数名字)
这里的就说这么多不懂的可以问或者查下资料
添加后这个函数的地址1013010
这个地址就不介绍怎么找到很简单
下一步是找到windows的消息处理函数地址
命令行下断
bpRegisterClassExW
确定然后F9断了下来查看堆栈会看到
call到RegisterClassExW来自01004550
向下看他的参数
01003429
这个就是我们要的
在这里回车然后就来到了01003429
在这里我们要用一个call语句
在01003424这里点汇编然后输入一句
calldwordptr[01013010]
占用三个字节后面自动补了一个nop
这样还没有好我们还要找到WndClass结构然后修改那里的消息处理函数这个比较好找
call到RegisterClassExW来自01004550
这句话最后的那个地址就是线索转到这里吧
向上找参数看到01003429就是修改他了这个是原来的消息处理地址现在要换成我们的就是01003424
修改好后在OD里面点右键选择保存到可执行文件-->选择全部-->然后右键保存就可以了关闭OD运行一下你的NOTEPAD吧
忘记写了菜单是用ResourceHack添加进去的注意ID不能和原来的重复透明菜单用的ID是28置顶菜单用的是29最后的关于菜单用的是30
本想一张一张配图的哈哈论坛不能一个一个上传没有办法只能这样传了
分享到:
相关推荐
在本文中,我们将深入探讨如何使用DELPHI编程语言来模仿经典的Windows XP记事本应用程序。DELPHI,全称Borland Delphi,是一种基于Object Pascal语言的集成开发环境,以其高效、快速的编译能力和强大的VCL(Visual ...
windows xp 记事本 Notepad2,比系统自带的功能强大,使用方法:1、关闭系统文件保护功能,可以执行“关闭系统文件保护.reg”进行关闭。2、把Notepad.exe复制到c:\windows和c:\windows\system32两个目录下,覆盖现有...
总的来说,通过对XP记事本C++源码的学习,我们可以了解到Windows编程的基本框架,掌握如何使用C++与Windows API进行交互,以及如何构建一个简单的GUI应用程序。这不仅有助于我们理解操作系统级别的程序设计,也为...
《C#高仿Windows记事本程序:深入解析与实现》 在编程世界里,创建一个类似Windows记事本的应用程序是一项基础而重要的任务,它能够帮助开发者掌握基础的GUI编程技巧。本篇文章将深入探讨如何使用C#语言来创建一个...
Java实现的模仿XP记事本项目是一个典型的GUI(图形用户界面)编程实例,它通过Java Swing库构建了一个功能丰富的文本编辑器,旨在提供与Windows XP系统内置记事本相似的用户体验。下面将详细介绍这个项目的相关知识...
【标题】"仿Windows的记事本(notebook)程序"是基于MFC框架开发的一款应用程序,它旨在模仿Windows操作系统中内置的记事本工具,为用户提供文本编辑的基本功能。这款程序不仅外观与Windows记事本相似,而且在功能上...
1.记事本创作于2015年11月,累计时间在一周左右,总代码量1000+。" 2.记事本仿自windows原生记事本,无论感官还是功能都与其相近。
在IT领域,操作系统是计算机硬件与用户之间交互的桥梁,Windows XP是一款由微软公司开发的广泛应用的操作系统。针对中文用户,Windows XP提供了多种语言包,以便用户能够在不同的语言环境中进行操作。本文将深入探讨...
【标题】"C# Windows 记事本 源代码" 涉及到的是使用C#编程语言在Microsoft Visual Studio 2010环境下开发的一款简易文本编辑器,类似于我们常见的Windows操作系统自带的“记事本”程序。C#是一种面向对象的、类型...
Notepad3 v5.21.227.1.7z替换windows原生记事本
在Windows操作系统中,记事本是一款非常基础且实用的文本编辑工具。虽然它的功能相对简单,但对初学者和开发者来说,它仍然是一个快速编辑文本的好选择。在最新的版本中,Windows记事本引入了“语法高亮”这一特性,...
标题中的“记事本(vb6.0仿windows自带记事本设计,含源码)”指的是使用Visual Basic 6.0(VB6.0)编程语言开发的一个应用程序,该程序模仿了Windows操作系统中内置的记事本功能。这个项目不仅提供了一个功能完备的...
标题“Windows 98记事本”所提及的是微软在1998年推出的操作系统Windows 98中内置的一个简单文本编辑器。记事本是一款轻量级的应用程序,允许用户创建、查看和编辑纯文本文件。在那个时代,它是个人计算机用户处理...
Windows XP Horror.exe
【标题】:“java记事本(与windows的记事本一样的功能)” 【知识点详解】: 1. **Java编程语言**:Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems开发,现由Oracle公司维护。它以其“一次编写,...
★如果你的系统是window XP或者windows 2000,那么请先关闭你的系统文件保护,到c:\windows\system32\dllcache 把notepad.exe删除, 然后把Notepad2.exe改名为notepad.exe,分别拷贝到c:\windows 和c:\windows\...
在Windows XP系统中,MBR扮演着至关重要的角色,因为它包含了系统的启动信息和一个小小的引导程序,这个程序负责加载操作系统的核心部分。当您在运行Windows XP的计算机上安装Linux系统时,Linux通常会将自己的引导...
2.5 Windows XP的附件程序中,包含了记事本、画图、写字板、计算器、录音机等实用工具,还有PowerPoint,这是微软Office套件的一部分,用于创建和编辑演示文稿。PowerPoint提供了丰富的模板、动画和过渡效果,让非...
总结来说,通过C#开发一个仿XP记事本程序,不仅需要掌握C#语言基础,还要熟悉Windows Forms控件和事件处理,以及文件I/O操作。这不仅可以加深对C#的理解,也有助于提升实际编程技能。在实践中,我们应注重代码的...
在Windows XP系统中,右键菜单是我们经常使用...总的来说,通过导入注册表文件“右键添加记事本.reg”,用户可以在Windows XP系统中轻松实现右键菜单的个性化定制,为日常使用提供便利。但务必谨慎操作,遵循安全规范。