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

    
    
;===========================步骤3  功能实现伪代码=========================== 

HWND            hEdit;              ;编辑框句柄,原程序中肯定已保存,因此暂不分配空间
COLORREF        crCustomColor[10];  ;AE00
COLORREF        crText;             ;AF94
CHOOSECOLOR     cc;                 ;AFA0-AFC0
COLORREF        crBkgnd;            ;AF98
HBRUSH          hBrBkgnd;           ;AF9C

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message) 
    {
    
    case WM_COMMAND:        //WM_COMMAND=111            
    
        switch (LOWORD(wParam))
        {
        case IDM_EDIT_CHOOSEFONT:       //"字体"菜单
            
            ......
            CHOOSEFONT.Flags|=CF_EFFECT;    //增加颜色,下划线,删除线选项
            //..ChooseFont()                
            crText=CHOOSEFONT.rgbColor;     //保存选择的颜色
            
            break;
            
        case IDM_VIEW_CHOOSECOLOR:      //IDM_VIEW_CHOOSECOLOR==1C  "背景色"菜单

            cc.lStructSize      =sizeof(cc);    //+0
            cc.hwndOwner        =hEdit;         //+4    
            cc.hInstance        =0;             //+8                
            cc.rgbResult        =0x00ff00;      //+C    
            cc.lpCustColors     =crCustom;      //+10   
            cc.Flags            =CF_RGBINIT;    //+14
            cc.lCustData        =0;             //+18
            cc.lpfnHook         =0;             //+1C
            cc.lpTemplateName   =0;             //+20
            
            if(ChooseColor(&cc)==TRUE)
            {
                DeleteObject(hBrBkgnd);             //删除以前创建的,以免内存泄露
                clBkgnd=cc.rgbResult;               //保存背景色
                hBrBkgnd=CreateSolidBrush(clBkgnd); //根据选择的颜色创建画刷
                
                InvalidateRect(hEdit,NULL,TRUE);    //强制更新
            }
            
            break;
                            
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;

    case WM_CTLCOLOREDIT:   

        SetTextColor((HDC)wParam,clText);   //设置文字色
        SetBkColor((HDC)wParam,clBkgnd);    //设置背景色
            
        return (LRESULT)hBrBkgnd;           //返回画刷
    
    case WM_DESTROY:
        
        DeleteObject(hBrBkgnd);             //删除GDI对象,避免内存泄露
        //....
            
        PostQuitMessage(0);                 //原有代码,退出程序

        break;
        
    //case .......
    //case .......
    
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}



;====================步骤4  增加输入函数==============================
    
    从步骤2,3分析可知,需要用到的API函数
    
    ChooseColorW
    CreateSolidBrush
    SetTextColor
    SetBkColor
    DeleteObject
    InvalidateRect

    用LordPE查看记事本的输入表,已输入的函数:
    
    DllName             FunName(函数名)     ThunkRVA(调用偏移)
    gdi32.dll           DeleteObject        1224
    gdi32.dll           InvalidateRect      1068
    
    输入其余函数(本来用手动输入,但是调用的时候总有问题,因此用LordPE输入)
    
    DllName             FunName(函数名)     ThunkRVA(调用偏移)
    comdlg32.dll        ChooseColorW        1401C
    gdi32.dll           CreateSolidBrush    1405D
    gdi32.dll           SetTextColor        14061
    gdi32.dll           SetBkColor          14065
    
    
    
;===========================步骤5  修改记事本代码=============================

;====================增加对话框的颜色,下划线,删除线选项.====================

    用OD打开记事本,查找调用ChooseFont,来到以下代码.
    
0100308A  |.  C785 B4FDFFFF 410>MOV     [LOCAL.147], 01000041                         ; cf.Flags;
01003094  |.  89B5 B8FDFFFF     MOV     [LOCAL.146], ESI                              ; |cf.rgbColors
0100309A  |.  89B5 BCFDFFFF     MOV     [LOCAL.145], ESI                              ; |cf.lCustData
010030A0  |.  89B5 C0FDFFFF     MOV     [LOCAL.144], ESI                              ; |cf.lpfnHook
010030A6  |.  89B5 C4FDFFFF     MOV     [LOCAL.143], ESI                              ; |cf.lpTemplateName
010030AC  |.  89B5 C8FDFFFF     MOV     [LOCAL.142], ESI                              ; |cf.hInstance
010030B2  |.  89B5 CCFDFFFF     MOV     [LOCAL.141], ESI                              ; |cf.lpszStyle
010030B8  |.  66:C785 D0FDFFFF >MOV     WORD PTR SS:[EBP-230], 2000                   ; |cf.nFontType
010030C1  |.  89B5 D4FDFFFF     MOV     [LOCAL.139], ESI                              ; |cf.nSizeMin
010030C7  |.  89B5 D8FDFFFF     MOV     [LOCAL.138], ESI                              ; |cf.nSizeMax
010030CD  |.  FF15 90110001     CALL    DWORD PTR DS:[<&USER32.ReleaseDC>]            ;
010030D3  |.  8D85 A0FDFFFF     LEA     EAX, [LOCAL.152]                              
010030D9  |.  50                PUSH    EAX                                           ; &cf参数入栈
010030DA  |.  FF15 D0120001     CALL    DWORD PTR DS:[<&comdlg32.ChooseFontW>]        ; \ChooseFont(&cf)
;................
;................


    将pCHOOSEFONT的各成员分析出来,可知,Flags成员在SS:[EBP-24C],因此这里只需要将0100308A改为

;更改后的0100308A

0100308A      C785 B4FDFFFF 410>MOV     DWORD PTR SS:[EBP-24C], 01000141              ; 0100041|100
               
                                                                                      ; 变成0100141
    保存更改到文件,运行更改后的文件,此时出现了颜色等效果选项,但是现在还不能起作用. 如图       
    
     
 

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

网 友 评 论
黑色反击 力倡网络安全,崇尚互联共享,欢迎各种媒体转载我们的原创作品 [转载请注明出处]。
报障QQ:281873518,479748258 EMAIL:hf110.com@gmail.com 备案:苏ICP备05010002号