双击记事本自动打开文本
2013-05-08 09:38
246 查看
标 题: 【原创】双击记事本自动打开文本
作 者: Gall
时 间: 2010-07-11,10:20:50
链 接: http://bbs.pediy.com/showthread.php?t=116595
前几天看了一篇文章,关于overlay介绍的,里面说可以实现记事本打开单一文本,所以自己手痒就想试试.
我的第一步是让记事本程序在打开时,自动读取已经存在的文本文件.
大家都很清楚双击文本文件程序会自己用记事本打开,这说明这个文件名被当作参数传递给了记事本.
例如: notepad.exe C:\QQ600.txt
接下来我们要做的就是获取那个参数的位置,然后修改,实现自己的功能。
ollydbg载入程序notepad,选择菜单Debug>>Attachment,输入参数C:\QQ600.txt,提示重新载入程序,参数才会生效。[不理他,等下面设置了端点后,再重新载入]
要想获取参数的位置,必须要对程序下断点,文件读取一般会在CreateFile,ReadFile等上下断点
利用快捷键Ctrl+N,查看程序的函数,看到了CreateFileW,下面对他断点,在命令栏中输入bpx CreateFileW,Ctrl+F2重新载入程序,重新载入程序后F9运行,在01004A07处程序被断下来,查看一下寄存器与堆栈,你会发现edi中存放的值与参数值完全一致.
那么现在我们要搞清楚的就是edi在何时被赋值的
010049CE 6A 10 push 10
010049D0 FF35 30980001 push dword ptr ds:[1009830]
010049D6 FF15 A4120001 call dword ptr ds:[<&USER32.PostMessageW>; USER32.PostMessageW
010049DC E9 77010000 jmp NOTEPAD-.01004B58
010049E1 66:391F cmp word ptr ds:[edi],bx
010049E4 0F84 B1000000 je NOTEPAD-.01004A9B
010049EA 57 push edi
010049EB BF 00A90001 mov edi,NOTEPAD-.0100A900 ; UNICODE "C:\QQ600.txt"
010049F0 57 push edi
010049F1 E8 A3F5FFFF call NOTEPAD-.01003F99
010049F6 53 push ebx
010049F7 68 80000000 push 80
010049FC 6A 03 push 3
010049FE 53 push ebx
010049FF 6A 03 push 3
01004A01 68 00000080 push 80000000
01004A06 57 push edi
01004A07 FF15 04110001 call dword ptr ds:[<&KERNEL32.CreateFile>; kernel32.CreateFileW
大家看到了吗?在010049EB处对edi赋值,edi的值来源于0100A900处
010049EB BF 00A90001 mov edi,NOTEPAD-.0100A900 ; UNICODE "C:\QQ600.txt"
也许大家已经想到了将0100A900处的数据改为自己的数据,但是修改完了你会发现数据无法保存,在这里我就不介绍怎么保存数据了.
0100A900处修改后无法保存,那么我们就将0100A900的地址指到其他可以保存数据的位置.例如0100874E
010049EB BF 00A90001 mov edi,NOTEPAD-.0100A900 ; UNICODE "C:\QQ600.txt"
修改后
010049EB BF 4E870001 mov edi,NOTEPAD-.0100874E ; UNICODE "C:\QQ600.txt"
然后在0100874E处写入自己的参数数据,程序调试完成后,双击运行程序,你会发现程序打开后,并没有读取C:\QQ600.txt的数据.
不要急,程序能够正常运行而没有出现错误,这说明调试没有出错,可能调试的代码没有生效,
Ollydbg载入调试过的程序,Debug>>Attachment,输入"C:\QQ600.txt",对函数CreateFileW下断点,F9运行,程序在01004A07处被断下,
调试过的部分上面有几处跳转,其中有一个是跳过调试代码,我们在他前面下断,我选择010049C8,然后重新载入程序,F9运行,在010049C8处程序被断下来,现在开始F8单步向下分析一下跳转是否实现了
分析后大家,只需让010049E4处的跳转不实现就可以了
。
=====================================================
建议大家自己分析一下程序参数是如何传递到edi中的
在这里留个问题吧,希望能够刺激大家努力学习!
将文本的数据添加到记事本程序的尾部,然后每次打开程序时自动读取尾部的数据
作 者: Gall
时 间: 2010-07-11,10:20:50
链 接: http://bbs.pediy.com/showthread.php?t=116595
前几天看了一篇文章,关于overlay介绍的,里面说可以实现记事本打开单一文本,所以自己手痒就想试试.
我的第一步是让记事本程序在打开时,自动读取已经存在的文本文件.
大家都很清楚双击文本文件程序会自己用记事本打开,这说明这个文件名被当作参数传递给了记事本.
例如: notepad.exe C:\QQ600.txt
接下来我们要做的就是获取那个参数的位置,然后修改,实现自己的功能。
ollydbg载入程序notepad,选择菜单Debug>>Attachment,输入参数C:\QQ600.txt,提示重新载入程序,参数才会生效。[不理他,等下面设置了端点后,再重新载入]
要想获取参数的位置,必须要对程序下断点,文件读取一般会在CreateFile,ReadFile等上下断点
利用快捷键Ctrl+N,查看程序的函数,看到了CreateFileW,下面对他断点,在命令栏中输入bpx CreateFileW,Ctrl+F2重新载入程序,重新载入程序后F9运行,在01004A07处程序被断下来,查看一下寄存器与堆栈,你会发现edi中存放的值与参数值完全一致.
那么现在我们要搞清楚的就是edi在何时被赋值的
010049CE 6A 10 push 10
010049D0 FF35 30980001 push dword ptr ds:[1009830]
010049D6 FF15 A4120001 call dword ptr ds:[<&USER32.PostMessageW>; USER32.PostMessageW
010049DC E9 77010000 jmp NOTEPAD-.01004B58
010049E1 66:391F cmp word ptr ds:[edi],bx
010049E4 0F84 B1000000 je NOTEPAD-.01004A9B
010049EA 57 push edi
010049EB BF 00A90001 mov edi,NOTEPAD-.0100A900 ; UNICODE "C:\QQ600.txt"
010049F0 57 push edi
010049F1 E8 A3F5FFFF call NOTEPAD-.01003F99
010049F6 53 push ebx
010049F7 68 80000000 push 80
010049FC 6A 03 push 3
010049FE 53 push ebx
010049FF 6A 03 push 3
01004A01 68 00000080 push 80000000
01004A06 57 push edi
01004A07 FF15 04110001 call dword ptr ds:[<&KERNEL32.CreateFile>; kernel32.CreateFileW
大家看到了吗?在010049EB处对edi赋值,edi的值来源于0100A900处
010049EB BF 00A90001 mov edi,NOTEPAD-.0100A900 ; UNICODE "C:\QQ600.txt"
也许大家已经想到了将0100A900处的数据改为自己的数据,但是修改完了你会发现数据无法保存,在这里我就不介绍怎么保存数据了.
0100A900处修改后无法保存,那么我们就将0100A900的地址指到其他可以保存数据的位置.例如0100874E
010049EB BF 00A90001 mov edi,NOTEPAD-.0100A900 ; UNICODE "C:\QQ600.txt"
修改后
010049EB BF 4E870001 mov edi,NOTEPAD-.0100874E ; UNICODE "C:\QQ600.txt"
然后在0100874E处写入自己的参数数据,程序调试完成后,双击运行程序,你会发现程序打开后,并没有读取C:\QQ600.txt的数据.
不要急,程序能够正常运行而没有出现错误,这说明调试没有出错,可能调试的代码没有生效,
Ollydbg载入调试过的程序,Debug>>Attachment,输入"C:\QQ600.txt",对函数CreateFileW下断点,F9运行,程序在01004A07处被断下,
调试过的部分上面有几处跳转,其中有一个是跳过调试代码,我们在他前面下断,我选择010049C8,然后重新载入程序,F9运行,在010049C8处程序被断下来,现在开始F8单步向下分析一下跳转是否实现了
分析后大家,只需让010049E4处的跳转不实现就可以了
。
=====================================================
建议大家自己分析一下程序参数是如何传递到edi中的
在这里留个问题吧,希望能够刺激大家努力学习!
将文本的数据添加到记事本程序的尾部,然后每次打开程序时自动读取尾部的数据
相关文章推荐
- windows server 2008下双击txt文件用记事本打开自动打印的问题解决
- 用记事本打开TXT文本文件
- 开机自动打开文件夹开机自动运行记事本,开机自动打开文本文件,开机自动打开记事本服务
- 记事本等微软的文本编辑工具自动加BOM导致HTML异常
- day22GUI编程。Frame。事件监听机制。自制记事本。打开保存功能。封装双击打开jar。
- 如何将文档B插入到文档A中,在A中双击某图标会自动打开文档B???
- php自动备份打包单个或多个数据表到txt的文本记事本中
- 修改:双击文件夹自动已资源管理器打开
- 在记事本中自动记录文件的打开时间
- 修改:双击文件夹自动已资源管理器打开
- 电脑右键没有新建文本文档(txt)及txt双击打开后就打印的解决办法
- 象WORD一样,双击.doc的文件就自动打开WORD并编辑该文件
- 盘符双击不能打开;任务管理器,注册表,msconfig闪一下自动关闭--问题和解决办法
- MATLAB程序生成了txt文本文档,记事本打开不换行
- 记事本打开文本文件不换行的问题
- Idea设置单击打开文件或者双击打开文件、自动定位文件所在的位置
- matlab的使用问题(—):每次双击.m文件都会自动打开一个matlab程序
- 象WORD一样,双击.doc的文件就自动打开WORD并编辑该文件
- 象WORD一样,双击.doc的文件就自动打开WORD并编辑该文件(转)
- java实现记事本基本功能:新建、打开、保存、另存为、退出、替换、全部替换、复制、剪切、粘贴、全选、获取当前时间日期、修改字体、颜色、自动换行等