zoukankan      html  css  js  c++  java
  • OllyDBG 入门系列(三)-函数参考 之 注册机的实现

    本程序是在我阅读了

    OllyDBG 入门系列(三)-函数参考http://bbs.pediy.com/showthread.php?s=&threadid=21330

    之后根据已知的分析结果用win32汇编实现的练习。

    具体的分析方法在原文中已经有了非常详细的解释,这里仅给出具体的注册机实现代码。由于刚学破解,请笔下留情。

    代码
    WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
        LOCAL    
    @DriveType: DWORD
        LOCAL    @szVolumnName [
    128] : BYTE
        LOCAL    @szBuffer[
    128] : BYTE

        
    pushad
        
    mov        eax,uMsg
        .if eax==WM_INITDIALOG
            
    push    hWin
            
    pop        hWnd

            .elseif eax==WM_COMMAND
            
    mov        eax,wParam
            
    and        eax,0FFFFh
            .if eax==IDM_FILE_EXIT
                invoke SendMessage,hWin,WM_CLOSE,
    0,0
            .elseif eax==IDM_HELP_ABOUT
                invoke ShellAbout,hWin,addr AppName,addr AboutMsg,NULL
            .elseif    eax == IDC_BTN1
                
    ;register
                
                
    ;为局部变量清零
                push    edi
                
    mov    ecx, 128
                
    lea    edi, @szVolumnName
                
    mov    al, 0
                
    rep    STOSB    
                
    pop    edi
                
                            
    ;获得卷轴属性
                invoke    GetDriveType, NULL
                
    push    eax
                
    pop    @DriveType
                
                            
    ;获得卷轴名
                invoke    GetVolumeInformation, NULL, addr @szVolumnName, 128, \
                                                          NULL, NULL, NULL, NULL, NULL 
                
                            
    ;按照破解得到的算法进行解密
                xor    edi, edi
                
    mov    ecx, @DriveType
                .repeat
                    
    mov    eax, ecx
                    
    mov    ebx, dword ptr @szVolumnName
                    
    mul    ebx
                    
    add    edi, eax
                    
    ;dec    ecx  ;在反汇编后.untilcxz会自动递减ecx
                .untilcxz
                
    xor    edi, 797a7553h

                
    ;将十六进制转换成十进制, Format被定义为db '%d'
                invoke    wsprintf, addr @szBuffer, addr Format, edi
                            
                            
    ;显示结果
                invoke    MessageBox, NULL, addr @szBuffer, addr Result, MB_OK    
            .endif
        .elseif eax==WM_CLOSE
            invoke DestroyWindow,hWin
        .elseif uMsg==WM_DESTROY
            invoke PostQuitMessage,NULL
        .else
            invoke DefWindowProc,hWin,uMsg,wParam,lParam
            
    ret
        .endif
        
    popad
        
        
    xor    eax,eax
        
    ret

    WndProc endp

    最后在使用的时候,只需要将该程序与待破解程序放在一起即可。

  • 相关阅读:
    Python学习————作业
    Python学习————前端
    Python学习————前端(JS)
    Python————前端
    Python学习————作业(简单页面设计)
    Python学习————前端(注册)
    Python学习————表格与表单
    Python学习————作业(前端)
    Python学习————前端
    51Nod1307 绳子与重物
  • 原文地址:https://www.cnblogs.com/aicro/p/1802315.html
Copyright © 2011-2022 走看看