?? smcexm1.asm
字號:
;-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
; 說明: 隨書配套代碼---SMC技術(shù)演示
;
; 程序功能:此程序用來演示SMC技術(shù)的基礎(chǔ)運用。
;
; 使用說明:編譯該源程序,運行程序可以看到一信息提示。然后單步跟蹤程序,可以看到程序?qū)ψ陨砑用艿牟糠?; 代碼進(jìn)行解密。
;
; 編程語言:MASM 6.0
;
; 編譯方法:ML /c /coff smcexm1.asm
; 鏈接方法:LINK /SECTION:.text,ERW /SUBSYSTEM:WINDOWS smcexm1.obj
;
; 注意事項:注意必須使編譯后的程序代碼段可寫,否則程序運行將出現(xiàn)地址不可寫錯誤。
; 即鏈接方法中必須在/SECTION開關(guān)選項中加入ERW設(shè)置。
;-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
.586P
.MODEL FLAT,STDCALL
OPTION CASEMAP:NONE
;-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; 引入頭文件
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
.RADIX 16
.DATA
szUser32Dll BYTE 'USER32.DLL',0
szMessageBoxA BYTE 'MessageBoxA',0
.CODE
;-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; 解密函數(shù)
DecryptFunc proc uses ebx ecx edx esi edi lpBuffer:LPVOID,nBuffSize:DWORD
mov esi,lpBuffer
mov edi,esi
mov ecx,nBuffSize
loc_loop: lodsb
dec al
stosb
loop loc_loop
ret
DecryptFunc endp
;-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; 程序入口
Main:
;-=-=-=-得到API函數(shù)地址入棧保存-=-=-=-=-
invoke LoadLibraryA,addr szUser32Dll
test eax,eax
jz lm_exit
invoke GetProcAddress,eax,addr szMessageBoxA
test eax,eax
jz lm_exit
push eax
;-=-=-=-解密數(shù)據(jù)-=-=-=-=-
push DataLen
push offset EnData
call DecryptFunc
EnData BYTE 0ECh,01Bh,054h,076h,064h,064h,066h,074h,074h,001h
BYTE 04Ah,021h,06Dh,070h,077h,066h,021h,075h,069h,06Ah
BYTE 074h,021h,068h,062h,06Eh,066h,022h,001h,060h,0E9h
BYTE 001h,001h,001h,001h,05Eh,082h,0EEh,023h,011h,041h
BYTE 001h,06Bh,001h,08Eh,086h,003h,011h,041h,001h,051h
BYTE 08Eh,086h,00Bh,011h,041h,001h,051h,06Bh,001h,000h
BYTE 0D8h,08Eh,0BEh,001h,011h,041h,001h,0BAh,04Eh,001h
BYTE 001h,001h,034h,0C1h,0FDh,0F4h,0ABh
DataLen EQU $ - offset EnData ;$
lm_exit: invoke ExitProcess,0
end Main
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -