首页
社区
课程
招聘
[原创]给记事本添加启动窗口
发表于: 2007-9-30 18:51 15517

[原创]给记事本添加启动窗口

2007-9-30 18:51
15517
【文章标题】: 给记事本添加启动窗口
【文章作者】: Suyana
【作者邮箱】: Suyasha@163.com
【软件名称】: Notepad
【下载地址】: WinXP自带
【作者声明】: 我只是一只小菜鸟,失误之处难免,敬望诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  为了不写很多代码,使用dll的方式添加启动窗口,在exe中修改也可以,但代码太多了,容易出错,不过dll也是用Win32ASM编写的。
  
  一开始,先记住以下几个地址:
  01006AE0       OEP,记事本原始的入口点
  01007D73       New OEP,新的入口点,我们的代码就写在这里
  -----------------------------------------------------------------------
  1.添加必要的字符串:用WinHex打开,在00030560添加字符串"Splash.dll"
  2.添加导入函数:记事本里有LoadLibrary函数,但没有FreeLibrary函数,用 PE 编辑器手工添加。
        LoadLibrary地址:010010CC(可用win32dasm或用Ollydbg查看)
        FreeLibrary地址:010130E4( PE 编辑器添加函数时就有了)
  3.反汇编,用OllyDbg打开,来到01007D73,写入如下代码:
        push    01008560      ;字符串"Splash.dll"的地址
        call    [10010CC]      ;LoadLibraryA,载入该dll
        test    eax, eax      ;是否成功
        je      01006AE0      ;失败的话不释放资源
        push    eax
        call    [10130E4]     ;FreeLibrary,释放资源
        jmp     01006AE0      ;继续执行
  4.更改入口点为01007D73.运行就可以看到效果了。
  
  ------------------------------
  Splash.dll
  功能只有一个:建立一个对话框,安装一个定时器,5秒后结束对话框也是用汇编编写。该DLL可用任何语言编写
  
          .386 
          .model flat, stdcall 
          option casemap:none
  include windows.inc 
  include user32.inc 
  include kernel32.inc 
  includelib user32.lib 
  includelib kernel32.lib 
          .data 
  TimerID   dd 0     ; 定时器ID
  hInstance dd 0     ; 实例句柄
  .code 
  
  DllEntry proc hInst:DWORD, reason:DWORD, reserved1:DWORD 
     .if reason==DLL_PROCESS_ATTACH        ; 当DLL载入时执行
          push hInst 
          pop hInstance 
          call Splash 
     .endif
     mov eax,TRUE
     ret 
  DllEntry Endp 
  
  _ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
        mov   eax,wMsg
        .if   eax == WM_INITDIALOG
              invoke SetTimer,hWnd,1,5000,NULL 
              mov TimerID,eax
        .elseif eax == WM_TIMER
              invoke SendMessage,hWnd,WM_LBUTTONDOWN,NULL,NULL 
              invoke KillTimer,hWnd,TimerID
          .elseif eax==WM_LBUTTONDOWN                  ; 单击左键关闭对话框
              invoke EndDialog,hWnd,NULL
        .else
              mov eax,FALSE
              ret
        .endif
        mov   eax,TRUE
        ret
   _ProcDlgMain endp
  
  Splash  proc
          invoke DialogBoxParam,hInstance,101,NULL,offset _ProcDlgMain,NULL
  Splash  endp
  
  End DllEntry

  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (30)
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
2
希望你能往更高层次作出尝试,这个有点简单了
2007-10-1 12:41
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Suyana赚精华好快啊
2007-10-1 16:01
0
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
DLL能用C写个么!!

ASM好乱,看不懂...
2007-10-1 16:21
0
雪    币: 5734
活跃值: (1737)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
蛮好的适合我这样的新手看看
2007-10-1 16:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我这个菜鸟进来学习一下阿
2007-10-1 20:25
0
雪    币: 32
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
菜鸟学习了。。
2007-10-1 22:18
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
为什么 选择 01007D73  为 入口点
能不能 用其他 地址  麻烦帮忙 解释哈
2007-10-2 10:30
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
@毛毛冲冲
新的入口点可以随便选择  不过要记住这个地址  后面改一下就可以了

支持lz  好文
学习 + 支持
2007-10-2 13:49
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢!
如果用其它语言写个dll就更好了,如vc,越简单越好
2007-10-3 11:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
赞一个,我等新手看这个正合适!
2007-11-12 20:05
0
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
12
Suyana大哥,splash form的资源怎么做啊?详细的讲解一下好吗?
2008-1-12 12:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
收藏了慢慢看,谢谢LZ!!!!
2008-1-12 17:52
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
俺是个菜鸟 没看懂
2008-1-13 19:49
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
似乎 适合我这种菜鸟
2008-4-6 16:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
学习了,哈哈.以后可以经常美化些难看的程序....
2008-4-6 16:50
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
学习下!!!!
2008-7-21 12:46
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
我是新手我喜欢,哈哈
2009-9-24 16:45
0
雪    币: 140
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
2.添加导入函数:记事本里有LoadLibrary函数,但没有FreeLibrary函数,用 PE 编辑器手工添加。


这个PE编辑器叫什么名字?我想找个研究一下,我是新手,还不知道怎么添加函数,是修改了导入表吗?
2009-9-28 19:14
0
雪    币: 261
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
有收获
1. 找个空白处,添加字符串
2和3 LoadLibrary   每个程序这个函数的地址不一样,用于调用Splash.dll这个文件,PE编辑器可以用LordPE
4    修改入口点也用到 LordPE

开始弄错,00030560是十进制地址,对应十六进制地址是7760
2009-9-29 16:14
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
支持楼主,有技术就行
2009-9-30 20:44
0
雪    币: 104
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
不是很明白,慢慢学习了
2009-9-30 21:50
0
雪    币: 261
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
自己修改计算器的时候发现还真有难度
正在努力中
2009-9-30 23:32
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
push    01008560      ;字符串"Splash.dll"的地址
这个不明白,不是在00030560添加字符串"Splash.dll"吗?怎么地址不一样了呢?为什么会不一样?
2009-10-2 00:23
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
ASM好乱没看懂
2009-10-2 18:00
0
游客
登录 | 注册 方可回帖
返回
//