首页
论坛
课程
招聘
[原创]给记事本添加启动窗口
2007-9-30 18:51 14000

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

2007-9-30 18:51
14000
【文章标题】: 给记事本添加启动窗口
【文章作者】: 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

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

【看雪培训】《Adroid高级研修班》2022年夏季班招生中!

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

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

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


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

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