亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 內存注冊機masm源碼.txt

?? 內存注冊機masm源碼
?? TXT
字號:
內存注冊機的工作原理及masm源碼

[編程工具]masm32(9.00)+RadAsm2.2.0.9
[調試工具]OD1.10
[調試平臺]WinXP/SP2

  先說明一下,我編寫這個內存注冊機只是為了學習一點程序的調試原理,它的實用性不說也罷,因為現的軟件保護誰都知道,想這么容易取得注冊碼,門都沒有,這也許正是劉健英放棄KeyMake的原因吧。我不想,也沒有能力去步他的后塵,只是好奇,玩玩而已。
  內存注冊機實際是個超小的調試器,以調試的方式打開目標軟件進程,在特定的地址設置 int 3 斷點,程序運行到斷點處被掛起,這個時候就可以用 ReadProcessMemory 或 GetThreadContext 函數取得目標軟件特定內存或特定寄存器中的內容,顯示出來就好了。只是前面提到的地址、寄存器等只有你跟蹤了目標軟件的注冊算法后才會得到。根據注冊算法的不同,注冊機中的某些代碼也可能要調整,所以我的代碼對不會編程的人來說就是1000%的垃圾。
  有些軟件加了殼,不過我終于想出辦法來對付它了,有殼我照樣可以斷下來,取到我想要的數據。殺毒軟件對我的注冊機也不感興趣,大概是太臭了吧~O~。


內存注冊機.Asm文件:

.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive

include 內存注冊機.inc

.code

start:
        invoke InitCommonControls
        invoke GetRegKey
    invoke ExitProcess,0

;########################################################################

GetRegKey proc uses edi esi
    LOCAL @ThreadConText:CONTEXT
    LOCAL @StartInfo:STARTUPINFO
        LOCAL @DBGEvent:DEBUG_EVENT
        LOCAL @TmpCode,@BakCode
        LOCAL @FullPath[512]:byte

        invoke GetCommandLine
        lea    esi,@FullPath
        invoke lstrcpy,esi,eax
        mov    edi,esi
        xor    edx,edx
        xor    ecx,ecx
        cld
       .while TRUE  ;找最后一個“\”
               lods   byte ptr[esi]
               inc    ecx
               .break .if !al
               .continue .if al!='\'
               mov    edx,ecx  ;記下最后一個“\”的位置
        .endw
        add    edi,edx
        invoke lstrcpy,edi,addr szEXEName  ;生成絕對路徑,否則由CreateProcess創建的進程可能會出問題

        invoke GetStartupInfo,addr @StartInfo 
        invoke CreateProcess,NULL,addr @FullPath,NULL,NULL,FALSE,DEBUG_PROCESS+DEBUG_ONLY_THIS_PROCESS,NULL,NULL,addr @StartInfo,addr PI
        .if !eax  ;創建debugee進程失敗的話提示、結束
              invoke MessageBox,NULL,addr szMsgErr,NULL,MB_ICONERROR
              jmp ENDPROC
        .endif

       .while TRUE
              invoke WaitForDebugEvent,addr @DBGEvent,INFINITE  ;等待調試事件的發生
              .break .if @DBGEvent.dwDebugEventCode==EXIT_PROCESS_DEBUG_EVENT  ;你退出了我也就退出吧!

              .if  TimesBreak  ;debugee執行第一條指令之前我們不必做無用功
                      .if TimesBreak<BREAKFLAG  ;已經取過注冊碼了嗎?
                            mov   eax,@BakCode
                            .if al!=byte ptr[OldCode]  ;如果debugee加了殼,而且還沒正確設置int 3斷點
                              invoke ReadProcessMemory,PI.hProcess,BreakPoint,addr @TmpCode,sizeof @TmpCode,NULL
                                  mov    eax,@TmpCode
                                  .if al==byte ptr[OldCode]  ;殼已經解碼完畢,可以設斷點了
                                         mov  @BakCode,eax   ;記住,我們在此已經役過斷點了,用它作標志,還要用它恢復現場
                                       invoke WriteProcessMemory,PI.hProcess,BreakPoint,addr BreakCode,sizeof BreakCode,NULL  ;設斷點
                                  .endif
                            .endif
                      .endif
              .endif

             .if @DBGEvent.dwDebugEventCode==EXCEPTION_DEBUG_EVENT
                    .if @DBGEvent.u.Exception.pExceptionRecord.ExceptionCode==EXCEPTION_BREAKPOINT
                          .if TimesBreak  ;已經不止一次發生int 3中斷的話
                                 invoke CloseHandle,PI.hThread ;釋放舊hThread的內存
                                 invoke OpenThread,THREAD_GET_CONTEXT or THREAD_QUERY_INFORMATION,FALSE,@DBGEvent.dwThreadId  ;由ThreadID得到hThread 想依此來解決多線程問題,會不會有問題,請高人指點
                                 mov PI.hThread,eax ;保存備用

                                 mov @ThreadConText.ContextFlags,CONTEXT_FULL    ;訪問所有的寄存器
                                 invoke GetThreadContext,PI.hThread,addr @ThreadConText  ;取debugee的數據
                                 dec @ThreadConText.regEip  ;EIP已經指向int 3中斷的下一條代碼了,讓它重新指向int 3
                                 mov ecx,@ThreadConText.regEip  ;取debugee的EIP
                                 .if ecx==BreakPoint  ;是我們要斷下的地方嗎?是就取出數據,并恢復現場
                                        invoke WriteProcessMemory,PI.hProcess,ecx,addr @BakCode,sizeof @BakCode,NULL  ;恢復debugee原來的代碼
                                        invoke SetThreadContext,PI.hThread,addr @ThreadConText  ;修改debugee的EIP,讓其繼續運行
    
                                    invoke GetModuleHandle,NULL
                                    lea edx,@ThreadConText    ;把此結構的地址傳給窗口,以便于顯示
                                    invoke DialogBoxParam,eax,IDD_DLGMAIN,NULL,addr DlgProc,edx   ;彈出窗口,輸出注冊碼
                                    mov TimesBreak,BREAKFLAG  ;設置標志,已經取過注冊碼了
                                 .endif
                          .else  ;如果debugee未加殼,就此兩句可以設好斷點,若加了殼就不起作用了,因為殼會修改掉我們的修改
                               invoke ReadProcessMemory,PI.hProcess,BreakPoint,addr @BakCode,sizeof @BakCode,NULL
                                 invoke WriteProcessMemory,PI.hProcess,BreakPoint,addr BreakCode,sizeof BreakCode,NULL
                          .endif
                         inc TimesBreak
                    .endif
                    mov eax,DBG_CONTINUE
                    jmp @F
              .endif
              mov eax,DBG_EXCEPTION_NOT_HANDLED
@@:
              invoke ContinueDebugEvent,@DBGEvent.dwProcessId,@DBGEvent.dwThreadId,eax
       .endw 

       invoke CloseHandle,PI.hProcess 
       invoke CloseHandle,PI.hThread 
ENDPROC:
    ret

GetRegKey endp

DlgProc proc uses ebx hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

    mov eax,uMsg
    .if eax==WM_INITDIALOG
                mov     ebx,lParam
            assume    ebx:ptr CONTEXT  ;ebx作為CONTEXT類型指針使用
                ;要顯示什么數據,怎么顯示,那你就去分析debugee的注冊算法吧,我這里只是示例
                ;invoke ReadProcessMemory,PI.hProcess,RegKeyAddr,addr Buffer,sizeof Buffer,NULL   ;從特定內存地址中取注冊碼

                invoke wsprintf,addr Buffer,addr szFmt,[ebx].regEax  ;從特定寄存器中取注冊碼
                invoke SetDlgItemText,hWin,IDC_REGKEY,addr Buffer

                assume    ebx:nothing
    .elseif eax==WM_CLOSE
        invoke EndDialog,hWin,0
    .else
        mov    eax,FALSE
        jmp    @F
    .endif
    mov    eax,TRUE
@@:
    ret

DlgProc endp

end start

內存注冊機.Inc文件:


include windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc

includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib

DlgProc            PROTO    :HWND,:UINT,:WPARAM,:LPARAM
GetRegKey               PROTO

.const

IDD_DLGMAIN        equ 101
IDC_REGKEY        equ 1003
BREAKFLAG               equ 100000h


.data
szFmt                   db '%1X',0
szMsgErr                db '本注冊機必須與下面的軟件放在同一目錄內:',0dh  ;中間不要有其它變量定義
szEXEName               db '例子.exe',0   ;換成要注冊的軟件可執行文件名

BreakPoint              dd 0401131h  ;可以改成要設斷點的地址
OldCode                 db 050h      ;BreakPoint處的第一字節內容,幫我們判斷殼是否操作完畢,完畢才能設斷點
;RegKeyAddr             dd 40305ch   ;注冊碼在debugee中的存放地址

BreakCode               db 0CCh,90h,90h,90h  ;最好別改動
TimesBreak              dd 0  ;最好別改動

;#########################################################################
.data?

PI                      PROCESS_INFORMATION<>
Buffer                  db 256dup(?)

************************************************************************************************************
我這個貼子只說了內存注冊機的一般原理,未做成通用模板,因此需要會編程的使用者視具體情況添加或改動代碼,比如多線程、多次中斷在同一地址等。后面有人跟貼提到這兩個問題。對于多線程問題,我想了個對策,代碼見上文,調試了沒問題。對于第二個問題,最好去讀一下我轉貼的《Win32調試API教程》之第三部分。我的大致思路是:
  1.第一次正確發生int3中斷時,設為單步模式,為的是后面有機會再寫入斷點。也可以設硬件斷點,那是另一套思路了。

  2.在單步事件到來時,重寫入斷點代碼,暫不單步了
      .if DBEvent.u.Exception.pExceptionRecord.ExceptionCode==EXCEPTION_BREAKPOINT 
        (前面的判斷代碼此處略)
        mov @ThreadConText.ContextFlags, CONTEXT_CONTROL 
        invoke GetThreadContext, PI.hThread, addr @ThreadConText 
        or @ThreadConText.regFlag,100h ;設為單步模式,為的是后面有機會再寫入斷點
        invoke WriteProcessMemory,PI.hProcess,ecx,addr @BakCode,sizeof @BakCode,NULL  ;恢復debugee原來的代碼
        invoke SetThreadContext,PI.hThread,addr @ThreadConText  ;修改debugee的EIP,讓其繼續運行
        inc TimesBreak
        (后面的代碼此處略)
      .elseif DBEvent.u.Exception.pExceptionRecord.ExceptionCode==EXCEPTION_SINGLE_STEP ;int3中斷后緊接著單步一次
        invoke WriteProcessMemory,PI.hProcess,BreakPoint,addr BreakCode,sizeof BreakCode,NULL ;再次寫入中斷代碼,對付同一地址多次中斷。

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美你懂的| 一区二区三区电影在线播| 国产精品视频一二三| 17c精品麻豆一区二区免费| 一级女性全黄久久生活片免费| 亚洲综合免费观看高清完整版在线 | 欧美经典一区二区| 亚洲婷婷在线视频| 手机精品视频在线观看| 精品一区二区三区在线视频| 日本一区免费视频| 国产精品热久久久久夜色精品三区| 国产日韩视频一区二区三区| 亚洲人123区| 日韩国产欧美在线观看| 国产最新精品精品你懂的| 国产老肥熟一区二区三区| 粉嫩一区二区三区在线看| 色综合中文字幕国产| 日韩欧美一区二区在线视频| 久久亚洲综合色一区二区三区| 国产精品久久久久精k8| 午夜久久久久久久久久一区二区| 免费成人美女在线观看.| 国产成a人亚洲| 日韩午夜精品视频| 国产精品久久久99| 激情综合色播激情啊| 蜜乳av一区二区| 麻豆精品在线播放| 在线免费观看一区| 中文子幕无线码一区tr| 在线国产电影不卡| 精品成人在线观看| 日韩三级在线观看| 亚洲三级久久久| 极品美女销魂一区二区三区免费| 色哟哟国产精品| 国产精品午夜电影| 伦理电影国产精品| 欧美日韩在线亚洲一区蜜芽| 欧美国产精品劲爆| 毛片一区二区三区| 欧美三级三级三级爽爽爽| 国产精品超碰97尤物18| 国产中文一区二区三区| 91精选在线观看| 亚洲视频小说图片| 国产成人精品免费一区二区| 日韩欧美第一区| 午夜视频在线观看一区二区三区 | 91精品国产乱码久久蜜臀| 中文字幕欧美一区| 激情深爱一区二区| 91精品国产综合久久精品图片| 亚洲尤物视频在线| 91在线一区二区| 国产精品久久久久久福利一牛影视| 国产综合久久久久久鬼色| 69p69国产精品| 日韩电影在线一区二区| 欧美视频中文字幕| 亚洲在线视频免费观看| 色偷偷久久一区二区三区| 中文字幕亚洲一区二区va在线| 国产91高潮流白浆在线麻豆 | 国v精品久久久网| 久久亚洲影视婷婷| 韩国精品久久久| 精品欧美一区二区在线观看| 久久精品二区亚洲w码| 日韩一区二区三区免费看| 秋霞影院一区二区| 欧美久久久一区| 日韩精品电影在线| 91精品国产乱码| 美国一区二区三区在线播放| 在线不卡一区二区| 青青草成人在线观看| 欧美一区二区在线视频| 美女精品一区二区| 精品国产免费人成电影在线观看四季 | 国产美女精品一区二区三区| 久久精品一区二区三区不卡| 国产精品一区二区三区99| 国产欧美日韩在线看| 福利电影一区二区| 中文字幕字幕中文在线中不卡视频| 成人动漫av在线| 亚洲欧洲制服丝袜| av一区二区不卡| 日韩毛片视频在线看| 91福利社在线观看| 亚洲午夜久久久久久久久电影网 | 国产精品色婷婷久久58| 欧美午夜一区二区三区| 丁香婷婷综合激情五月色| 一级中文字幕一区二区| 中文字幕va一区二区三区| 欧美撒尿777hd撒尿| 成人久久视频在线观看| 精品亚洲porn| 奇米一区二区三区| 午夜视频在线观看一区二区三区| 欧美国产欧美综合| 久久综合九色欧美综合狠狠| 欧美一区二区三区爱爱| 欧美视频中文字幕| 日韩欧美在线123| 欧美午夜不卡在线观看免费| 欧美一区二区三区在| 欧美性色欧美a在线播放| 麻豆一区二区三区| 一区二区三区日韩精品视频| 中文子幕无线码一区tr| 久久免费精品国产久精品久久久久| 国产精品久久久一区麻豆最新章节| 激情综合色综合久久综合| 亚洲色图19p| 欧美三级乱人伦电影| 紧缚捆绑精品一区二区| 亚洲天堂2014| 欧美一级黄色录像| 成人午夜电影小说| 视频一区欧美精品| 中文字幕在线观看一区二区| 欧美日韩国产在线播放网站| 国产在线不卡一区| 亚洲曰韩产成在线| 久久女同精品一区二区| 色婷婷综合久久久久中文一区二区 | 午夜视频一区二区| 中文字幕第一区综合| 91精品国产麻豆| 91偷拍与自偷拍精品| 美女脱光内衣内裤视频久久网站| 中文字幕五月欧美| 精品电影一区二区三区 | 性欧美大战久久久久久久久| 久久久久国产精品免费免费搜索| 欧美在线短视频| 成人av电影免费在线播放| 日本不卡视频在线观看| 最新久久zyz资源站| 26uuu另类欧美亚洲曰本| 欧美亚男人的天堂| 国产一区二区三区四区五区入口| 亚洲大片一区二区三区| 亚洲日本电影在线| 久久综合精品国产一区二区三区| 欧美性猛交xxxx黑人交| 国产精品一区二区在线观看网站| 视频一区二区不卡| 亚洲午夜精品17c| 自拍偷拍亚洲激情| 国产农村妇女毛片精品久久麻豆 | 国产乱码精品一区二区三| 日韩精品国产精品| 亚洲成人动漫在线观看| 亚洲视频一二三区| 国产精品福利av| 国产精品网曝门| 久久精品免费在线观看| 欧美变态凌虐bdsm| 日韩一级完整毛片| 欧美一区二区三区免费视频| 欧美绝品在线观看成人午夜影视| 在线视频欧美区| 日本道色综合久久| 91蜜桃传媒精品久久久一区二区 | 亚洲综合另类小说| 亚洲人午夜精品天堂一二香蕉| 国产精品进线69影院| 国产精品大尺度| 亚洲欧洲精品天堂一级| 国产精品白丝在线| 亚洲色图清纯唯美| 亚洲精品乱码久久久久| 一区二区三区精品在线| 亚洲精品一二三区| 国产欧美一区二区三区沐欲| 日韩一区二区三| 日韩综合一区二区| 三级在线观看一区二区| 国产精品久线观看视频| 亚洲欧美日韩国产手机在线| ...xxx性欧美| 久久久99精品久久| 国产精品人成在线观看免费| 精品免费日韩av| 欧美韩国日本不卡| 欧美一卡二卡在线观看| 91视频国产资源| 久久综合久久久久88| 亚洲精品日韩综合观看成人91| 国产精品69毛片高清亚洲| 日韩视频免费直播| 国产精品福利av| 国产福利视频一区二区三区| 欧美日本精品一区二区三区|