首页 | 业界新闻 | 黑客教程 | 安全漏洞 | 安全文章 | 破解技术 | 技术文摘 | 黑客文化 | 本站原创 | 安全贴吧 | 在线留言 | IP查询 | 软件下载 | 繁体中文 |
您现在的位置: 黑色反击 >> 技术资讯 >> 破解技术 >> 破解实例 >> 正文
逆向初步,增加XP记事本功能,使用背景色,文字颜色,下划线,删除线
时间:2006-3-31 2:14:34 出处:看雪论坛 作者:andy00 编辑:mervin 点击数:
 


;====================处理WM_DESTORY(==2)删除画刷对象以免内存泄漏======================

;WNDPROC

01003429      8BFF              MOV     EDIEDI
0100342B   .  55                PUSH    EBP
0100342C   .  8BEC              MOV     EBPESP
0100342E   .  51                PUSH    ECX
0100342F   .  51                PUSH    ECX
01003430   .  56                PUSH    ESI
01003431   .  8B75 0C           MOV     ESIDWORD PTR SS:[EBP+C]               ; ESI=message;
01003434   .- E9 A7FC0000       JMP     010130E0
01003439      90                NOP
0100343A   .  5A                POP     EDX
0100343B   .  0F87 41020000     JA      01003682
01003441   .  0F84 B7010000     JE      010035FE
01003447   .  3BF2              CMP     ESIEDX
01003449   .  0F87 ED000000     JA      0100353C
0100344F   .  0F84 DB000000     JE      01003530
01003455   .  8BC6              MOV     EAXESI                                ; EAX=message;  
01003457   .  48                DEC     EAX                                     ; message--;
01003458   .  48                DEC     EAX                                     ; message--;
01003459   .  0F84 C7000000     JE      01003526                                ; if(message==WM_DESTORY) goto 1003526
;................                                                               
;................

01003526   > \6A 00             PUSH    0                                       ; 修改此句跳到自己的代码
01003528   .  FF15 F4110001     CALL    DWORD PTR DS:[010011F4]                 ; 此句被修改
0100352E   .^ EB 8D             JMP     SHORT 010034BD                          ; 此句被修改
;................                                                               
;................



;修改后的代码01003526-01003528-0100352E,多余字节用NOP填充

01003526   >-\E9 25FC0000       JMP     01013150                                ;  Case 2 of switch 01003457
0100352B      90                NOP
0100352C      90                NOP
0100352D      90                NOP
0100352E      90                NOP
0100352F      90                NOP
01003530   >  FF75 14           PUSH    DWORD PTR SS:[EBP+14]
;................
;................



;自己的代码,删除画刷句柄hBrBkgdn(RVA==AF9C)

01013150    FF35 9CAF0001       PUSH    DWORD PTR DS:[100AF9C]                  ; hBrBkgnd(RVA==AF9C)入栈
01013156    FF15 68100001       CALL    DWORD PTR DS:[<&GDI32.DeleteObject>]    ; DeleteObject(hBrBkgnd)删除画刷
                                                                                ; 释放内存,防止泄漏
0101315C    6A 00               PUSH    0                                       ; 原来的代码
0101315E    FF15 F4110001       CALL    DWORD PTR DS:[<&USER32.PostQuitMessage>>; USER32.PostQuitMessage
01013164  - E9 5403FFFF         JMP     010034BD                                ; 原来的代码


    保存更改到文件,然后运行修改过的程序,点击"背景色"菜单,就能弹出颜色对话框了,但是现在选择的颜色还不能起作用,因为要给编辑框设背景色或者文字色,必须处理WM_CTLCOLOREDIT消息.如图
    
     
    
    
;====================处理WM_CTLCOLOREDIT(==133)消息设置颜色画刷======================

    因为程序原来是不处理WM_CTLCOLOREDIT的消息的,所以处理WM_CTLCOLOREDIT消息的过程与WM_COMMND及WM_DESTORY稍有不同,必须自己添加判断代码,再次来到WNDPROC:
    
;WNDPROC

01003429      8BFF              MOV     EDIEDI                                ;
0100342B  /.  55                PUSH    EBP                                     ; ESP-4
0100342C  |.  8BEC              MOV     EBPESP                                ; EBP=ESP
0100342E  |.  51                PUSH    ECX                                     ; ESP-4
0100342F  |.  51                PUSH    ECX                                     ; ESP-4
01003430  |.  56                PUSH    ESI                                     ; ESP-4
01003431  |.  8B75 0C           MOV     ESIDWORD PTR SS:[EBP+C]               ; ESI=message

01003434  |.  83FE 1C           CMP     ESI, 1C                                 ; =====修改这里跳到自己的代码====
01003437  |.  57                PUSH    EDI                                     ; =======此句被修改ESP-4=========
01003438  |.  6A 08             PUSH    8                                       ; =======此句被修改==============

0100343A  |.  5A                POP     EDX                                     ; EDX=8;; 如果不是WM_CTLCOLOREDIT消息
;................                                                               ; 则最后必须跳回到此处
;................                                                               ; 如果是WM_CTLCOLOREDIT消息则最后
                                                                                ; 必须返回函数值,结束WNDPROC,   
                                                                                ; 而不再顺到这里,原因请见伪代码                                                                 

;修改后的01003434-01003437-01003438,多余字节以NOP填充

01003434   .- E9 A7FC0000       JMP     010130E0
01003439      90                NOP
;................
;................




;01003434跳到此处,自己的代码,判断及处理WM_CTLCOLOREDIT消息

010130E0    81FE 33010000       CMP     ESI, 133                                
010130E6    75 2B               JNZ     SHORT 01013113                          ; 假如不是WM_CTLCOLOREDIT消息则
                                                                                ; 自己不处理,跳回原处,交给程序处理
010130E8    50                  PUSH    EAX                                     ; 保存EAX现场
010130E9    FF35 94AF0001       PUSH    DWORD PTR DS:[100AF94]                  ; /参数crText(RVA==AF94)入栈
010130EF    FF75 10             PUSH    DWORD PTR SS:[EBP+10]                   ; |参数wParam入栈
010130F2    FF15 61400101       CALL    DWORD PTR DS:[1014061]                  ; \SetTextColor(wParam,crText)
010130F8    FF35 98AF0001       PUSH    DWORD PTR DS:[100AF98]                  ; /参数crBkgnd(RVA==AF98)入栈
010130FE    FF75 10             PUSH    DWORD PTR SS:[EBP+10]                   ; |参数wParam入栈
01013101    FF15 65400101       CALL    DWORD PTR DS:[1014065]                  ; \SetBkColor(wParam,crBkgnd)
01013107    58                  POP     EAX                                     ; 恢复EAX
01013108    A1 9CAF0001         MOV     EAXDWORD PTR DS:[100AF9C]             ; EAX=hBrBkgnd(RVA==AF9C)准备返回画刷

0101310D    5F                  POP     EDI                                     
0101310E    5E                  POP     ESI                                     
0101310F    C9                  LEAVE                                           
01013110    C2 1000             RET     10                                      ; 平衡堆栈并返回画刷(eax),结束WNDPROC
        
01013113    83FE 1C             CMP     ESI, 1C                                 ; 原来的代码
01013116    57                  PUSH    EDI                                     ; 原来的代码
01013117    6A 08               PUSH    8                                       ; 原来的代码    
01013119  - E9 1C03FFFF         JMP     0100343A                                ; 0100343A


    保存修改到文件,运行修改过的文件,现在可以设置文字色,背景色了,并且设置可以反应到编辑框了,但是程序刚启动的时候,默认的背景色和文字色都是黑色的,并且在有文字行才有背景色,显示不正常,并且看不到文字
    
    默认背景色是黑色是因为,程序启动的时候开始WM_CTLCOLOREDIT消息中的SetBkColor和SetTextColor都在起作用了,但是这时候,crText(RVA==AF94)和crBkgnd(RVA==AF98)在内存中的值都是00000000,改变它们就能改变默认背景色和文字色.
    在有文字的行才有背景色是因为,此时的hBrBkgnd(RVA==AF9C)是个无效的画刷句柄,程序不能用此画刷画背景,导致显示不正常.
所以也需要初始化hBrBkgnd.

    初始化他们的最好地方是编辑框刚被创建还没有显示的时候.再次来到创建编辑框的地方
    
   

;创建编辑框:
    
01004765  |.  50               PUSH    EAX                                      ; |Style
01004766  |.  56               PUSH    ESI                                      ; |WindowName
01004767  |.  68 94170001      PUSH    01001794                                 ; |Class="Edit"
0100476C  |.  68 00020000      PUSH    200                                      ; |ExtStyle=WS_EX_CLIENTEDGE
01004771  |.  FF15 E0110001    CALL    DWORD PTR DS:[<&USER32.CreateWindowExW>] ; \CreateWindowExW
01004777  |.  3BC3             CMP     EAXEBX                                 ; 修改此然跳到自己的代码    
01004779  |.  A3 38980001      MOV     DWORD PTR DS:[1009838], EAX              ; 改这一句跳到0101311E
0100477E  |.  0F84 2A020000    JE      010049AE                                 ; 最后必须返回到这里
;................
;................



;修改后的代码01004777-01004779修改为

01004777   .  90                NOP
01004778   .  90                NOP
01004779    - E9 A1E90000       JMP     0101311E                                    ; 跳到自己的代码0101311E



;自己的代码初始化crText,crBkgnd,hBrBkgnd

0101311E    A3 38980001         MOV     DWORD PTR DS:[1009838], EAX             ; 原来的代码
01013123    68 FFFFFF00         PUSH    0FFFFFF                                 ; RGB(FF,FF,FF)白色入栈
01013128    FF15 5D400101       CALL    DWORD PTR DS:[101405D]                  ; CreateSolidBrush创建白色画刷
0101312E    A3 9CAF0001         MOV     DWORD PTR DS:[100AF9C], EAX             ; 画刷句柄保存到hBrBkgnd(RVA==AF9C)
01013133    C705 98AF0001 FFFFF>MOV     DWORD PTR DS:[100AF98], 0FFFFFF         ; crBkgnd(RVA==AF98)=白色
0101313D    A1 38980001         MOV     EAXDWORD PTR DS:[1009838]             ; 原来的代码
01013142    3BC3                CMP     EAXEBX                                ; 原来的代码
01013144  - E9 3516FFFF         JMP     0100477E                                ; 跳回原处交给程序处理


   最后的效果:

    

    =======THE END!=========

;==================================QQ:41086722==========================

上一页  [1] [2] [3] [4] [5] 

精彩推荐
hack菜鸟入门
VB 从零开始编外挂(完
IPC入侵全接触
QQ跨站漏洞巧利用,强
WinXP中CPU占用100%原
黑客新技术 灰鸽子巧妙
实例讲解 黑客入侵论坛
ADSL共享上网方式大总
BMP文件格式分析
十招教你学会破解
热门软件
网 友 评 论
关于我们 - 联系方式 - 招聘信息 - 合作伙伴 - 网站地图 - 广告服务 - 我要投稿 - 设为首页 - 加入收藏
黑色反击 力倡网络安全,崇尚互联共享,欢迎各种媒体转载我们的原创作品 [转载请注明出处]。
EMAIL:hf110.com@gmail.com 备案:苏ICP备05010002号