飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4590|回复: 9

[原创] 一次PEDIY---修改Windows自带的calc.exe

[复制链接]

该用户从未签到

发表于 2008-7-7 17:16:08 | 显示全部楼层 |阅读模式
本人对PEDIY比较感兴趣,最近瞄上了calc.exe,于是diy之
我的想法是,在计算之后,按下=号键,首先显示我的ID,然后再显示计算结果
首先我们要找到消息处理函数,这样才能找到按下=号键之后执行的代码
怎么找呢?首先我想到的是下202消息断点,在OD中运行calc.exe
点"W"
可以看到如图所示的信息
shot1.GIF
可以看到WinProc处是空的,此时直接下消息断点的话会下在ClsProc上,OD将会报错
这个方法不行,就换个思路吧
我们可以看到,在ID一栏,=号的ID值为70H
程序在收到WM_COMMAND之后将会判断ID
于是在OD中点右键--查找--所有分支,可以看到如下信息
shot2.GIF
70H就位于50H-13DH内
在此处双击,然后往下查找
01003348   >  A1 E84E0101   mov     eax, dword ptr [1014EE8]         ;  Case 70 of switch 01002F67
上面就是=号键被按下之后将会跳来的地方,我们就可以在这个地方跳走,然后执行我们的代码,再跳回去执行原来的代码
现在要做的就是随便找一个地方,写入我们想执行的代码
我找的地方位于010136C0
010136C0   > \60            pushad
010136C1   .  68 6C6C0000   push    6C6C                             ;  此处压入的是
010136C6   .  68 33322E64   push    642E3233                         ;  user32.dll的ASCII码
010136CB   .  68 75736572   push    72657375                         ;  也可以找个地方直接写字符串
010136D0   .  8BC4          mov     eax, esp
010136D2   .  50            push    eax                              ; /FileName
010136D3   .  FF15 24100001 call    dword ptr [<&KERNEL32.LoadLibrar>; \LoadLibraryA
010136D9   .  68 646F7700   push    776F64                           ;  我没有想到更好的办法
010136DE   .  68 6457696E   push    6E695764                         ;  来获得主Window的handle
010136E3   .  68 726F756E   push    6E756F72                         ;  此方法比较另类
010136E8   .  68 6F726567   push    6765726F
010136ED   .  68 47657446   push    46746547                         ;  GetForeGroundWindow的ASCII码
010136F2   .  8BDC          mov     ebx, esp
010136F4   .  53            push    ebx                              ; /ProcNameOrOrdinal
010136F5   .  50            push    eax                              ; |hModule
010136F6   .  FF15 28100001 call    dword ptr [<&KERNEL32.GetProcAdd>; \GetProcAddress
010136FC   .  FFD0          call    eax                              ;  调用GetForeGroundWindow
010136FE   .  50            push    eax                              ;  保存handle,因为后面刷新的时候还要使用
010136FF   .  68 93010000   push    193                              ; /ControlID = 193 (403.)
01013704   .  50            push    eax                              ; |hWnd
01013705   .  FF15 70110001 call    dword ptr [<&USER32.GetDlgItem>] ; \GetDlgItem
0101370B   .  6A 65         push    65
0101370D   .  68 67006B00   push    6B0067
01013712   .  68 61006E00   push    6E0061
01013717   .  68 7A006800   push    68007A                           ;  我的名字的UNICODE码
0101371C   .  8BDC          mov     ebx, esp
0101371E   .  53            push    ebx                              ; /Text
0101371F   .  50            push    eax                              ; |hWnd
01013720   .  FF15 10110001 call    dword ptr [<&USER32.SetWindowTex>; \SetWindowTextW
01013726   .  83C4 10       add     esp, 10
01013729   .  58            pop     eax                              ;  弹出主Window的handle
0101372A   .  50            push    eax                              ; /hWnd => 0068007A
0101372B   .  FF15 34110001 call    dword ptr [<&USER32.UpdateWindow>; \UpdateWindow
01013731   .  68 E8030000   push    3E8                              ; /Timeout = 1000. ms
01013736   .  FF15 40100001 call    dword ptr [<&KERNEL32.Sleep>]    ; \Sleep
0101373C   .  83C4 20       add     esp, 20
0101373F   .  61            popad
01013740   .  A1 E84E0101   mov     eax, dword ptr [1014EE8]
01013745   .^ E9 03FCFEFF   jmp     0100334D

之所以在SetWindowText之后要刷新窗口是因为sleep的时候窗口不会刷新
尽管我们是在调用sleep之前就执行的SetWindowText,程序执行速度很快,还没有刷新Window就sleep了
所以我们要主动刷新一次Window(感谢天杀大哥对我的提示)

好了,整个过程差不多就是这样拉,现在运算之后按下=号键,就会先显示我的名字,然后再显示计算结果拉
在此附上我修改过的calc.exe

mycalc.rar (41.35 KB, 下载次数: 23)

[ 本帖最后由 zhangke 于 2008-7-9 10:05 编辑 ]

评分

参与人数 1威望 +80 飘云币 +80 收起 理由
Nisy + 80 + 80 您的贴子很精彩,希望能再次分享!

查看全部评分

PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-7-26 16:07
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2008-7-7 17:19:49 | 显示全部楼层
    先支持 再慢慢看
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-7-7 17:23:00 | 显示全部楼层
    学习一下~哈哈,谢谢楼主
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2008-7-7 17:38:22 | 显示全部楼层
    谢谢捧场啊:loveliness:
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-7-7 18:05:42 | 显示全部楼层
    功力没达到,看不懂/:L
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2020-10-2 21:45
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2008-7-7 20:55:52 | 显示全部楼层
    附件好象无法下载!
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2008-7-8 11:09:02 | 显示全部楼层
    原帖由 rabbithua 于 2008-7-7 20:55 发表
    附件好象无法下载!

    不会吧,应该可以下载呀
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-4-15 13:51
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2008-7-8 12:57:54 | 显示全部楼层
    刚试了下附件可以下载!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-7-9 14:26:04 | 显示全部楼层
    楼主好厉害啊,下载来欣赏了
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-3-14 15:11
  • 签到天数: 465 天

    [LV.9]以坛为家II

    发表于 2010-12-3 14:56:00 | 显示全部楼层
    不错,看看看 !!!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表