Frame.asm
; ############################################################################### ################################
.386 .Model flat, stdcall option casemap: None; Case Sensitive
; ############################################################################### ################################
; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@; proto directive can specifier a function type; but must implement this function use divrective 'proc'; and 'proc' directive will insert some instructions in your code; and these instructions are not seen in list file !!; these code is like below,; lines start with ;;;; is assembler auto inserted instructions; fun proc x: dword ;;;; push EBP ;;; mechanical MOV EBP, ESP ;; ...; Your function body ...; .... ;;;;; Pop EBP; FUN ENDP
; in Api Call, this Is Not ALOWED, MUST A DIRECT No CONDition Jump; To Transfer Control To API Function, Code Should Like Below: ;; FuN: JMP DWORD PTR [xxxx]; [xxxx] Store The Address of the API FUNCTION;
; Because these codes will be used in any different address; can not use absolute address to addressing data; in my code, I use IRA (instruction relative address) to every; gloable variant and API function's address; this behavior is defined as a macro 'ldira' (LOAD IRA); You Can See The Macro Below, This, In My Api Fun,; This Call Like this: ;; Fun: LDIRA EAX, XXXX; JMP DWORD PTR [EAX] ;; After Expand Macro LDIRA , the code is: ;; fun :; call LL; LL :; pop eax; add eax, xxxx - LL; jmp DWORD PTR [eax] ;; @@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@ include/masm32/include/windows.incinclude /masm32/include/User32.incinclude /masm32/include/kernel32.incinclude /masm32/include/gdi32.inc
A void DirectiveMyaddr EQU
; ------------------------------------------------- ----------------; Macro for Put Ira of _ira to _dst; ----------------------- ----------------------------------------- Ldira Macro_DST, _ira Local LL Call llll: pop _dst add _dst, myaddr _ira - myaddr ll endm
; ------------------------------------------------- -----------------; Macro for Making Stdcall Procedure and API Calls .; ---------------------- --------------------------------------------
Scall macro fun_name: Req, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, / P13, P14, P15, P16, P17, P18, P19, P20, P21, P22
;; --------------------------------------- ;; loop through arguments backwards, push; Non Blank ones and call the function. ;;; ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- For Arg,
Call fun_name ;; Call the Procedure
ENDM
Section_start EQU 0; 1000H; (1000H - MyAddr Start)
MyShieldHeader struc ShieldEntry DD myaddr start - myaddr _TEXT ShieldImportAddress DD myaddr Start_Import_Table - start Section_Start ShieldImportSize DD myaddr End_Import_Table - myaddr Start_Import_Table
CLIENTENTRY DD MYADDR NOCLIENTPROGRAM @@ clientImportaddress DD? ClientImportSize DD?
CLIENTCODEBASE DD?; Need Not Store, But I Reserve IT ClientDatabase DD?
Authentication DB 32 DUP (?); 256 Bit Authentication NumbermyshieldHeader Ends
_Text Segment Public 'Code'ORG 0Start: JMP Entrypoint
ORG START 10H
WANGBATITLE LABEL BYTE DB "õõ ° μμ ° £ £ ïëæææ½ £ £ £" DB 0
WANGBAMSG Label Byte DB "õõ ° μ μ £ £ £ £ ¡ïææææ½½ £ £ £ ¿", 0DH, 0AH DB "ôùþþþ¼1/4 ¸ä ° é £ £ £ £ £ é £ £ £ £ £ £ £ £ £ £ £ £ ", 0DH, 0AH DB 08h," òñ¾¾ õõ¸ñé餤¤ õõ¸ööõõõõõõõõõõõõõ "," ôúóööããðíöö®ç ° ç2 »¿éææ½½μÄH £ £ £" £ μμμ μ £ £ £ æ μ μμ £ £ £ £ £æ μ μμμ £ £ £ £ ²
Org Start 100H
Shieldheader myshieldhead <>; here stores myshieldheadheader
Org Start 200h
EntryPoint:
; ############################################################################### ############################ ;;;; Start of user code
IFDEF _MORE_DEBUG JMP L1
Szdlgtitle DB 'Hello World', 0SZMSG DB 'Hello World', 0
Szdlgtitleira DB 'Addressing by Instruction Relative Address', 0Szmsgira DB 'Addressing by Instruction Relative Address', 0DH, 0AH, 0L1: Ldira Eax, Szdlgtitleira Ldira Ecx, Szmsgira
Push MB_ok ;; Invoke IraMessageBoxa, 0, EAX, ECX, MB_OK PUSH ECX PUSH EAX PUSH 0 CALL Near PTR IraMessageBoxa @ 16
LDira Eax, Wangbamsg Ldira Ecx, Wangbatitle SCALL IRAMESSAGEBOXA @ 16, NULL, EAX, ECX, MB_OKCANCELENDIF
; ############################################################################### ###########################; ||||; |||| <----- Á ÷ 3ìë3ðòíùï £ ¬¬þþø × ª; //; Å; ############################################################################## ###########################; Call Shield Function In C Source, Because SHIELD Main and User Function IT Calls; Are IN C Source, IT can Be Very ComplexComplex; EXTRN _SHIELDMAIN @ 0: Near Call _Shieldmain @ 0; SHILDMAIN HAS NO Parameters
; ############################################################################### ############################################################
; ||||; |||| <---- á ÷ £³³³³òí × ª; / /; Å
; ############################################################################### ###############################################################################
SCALL _LOADCLIENTIMPORT @ 0; #################################################################################################################################################################################################################################################################################### ###############################################################
; ||||; |||| <---- á ÷ £³³³³òí × ª; / /; Å
; ############################################################################### #########################; jump to the client entry point
LDIRA ECX, ShieldHeader.Cliententry Scall IragetModuleHandlea @ 4, Null; Self Module Handle Put To Eax Add DWORD PTR [ECX], EAX; Now [ECX] HOLD The Current Client Entry Point Jmp Dword PTR [ECX]
; ############################################################################### ####################; ##################################################################################################################################################################################################################################################################################### ######################################################################################################################################################################################################################################################################################################## ########### ;;; user code compiled form c is int this file ;; ¿ ªª1/1 ± ± ±ªμ ÷ êôãã £ ¬¬öôõõ¸ ¸ £ £ ;;; 1/2 «ôú¡ °! ¿ Ç! Ö ÷ 3ìðòò¡¡ ± öð ° üo ± ± îîä1/4 þ ª. ª Frame.asm, ;;; ¿ Éóãó¶à ¸ö¡¡ °! ¿ Ç! Ö ÷ 3ìðòò¡¡ ± £ ¬¬ú3é¶à ¸ö Ç
Include Shield.asm
;; End of user code; ################################################################ #############################################################################
; ############################################################################### ##########################; only used gen no client, if client is present,; execute can not REACH Here
NoclientProgram @@: ldira Eax, Szmsgnoclient Ldira Ecx, SztitlenoClient SCALL IraMessageBoxa @ 16, NULL, EAX, ECX, MB_OK
Push 0 Call Near PTR IraexitProcess @ 4
SZTITLENOCLIENT DB 'Have No Client Program!' DB 0SZMSGnoclient DB 'Have No Client Program!', 0DH, 0AH DB 'SHIELD TERMINATE !!' DB 0
; ############################################################################### ############################################################
; ############################################################################### #########################; this is a function, IT Convert An Address to an Irv, ONLY in C Source; This function is efficient and perfect It Optimized the stack structure; have only one parameter, this parameter is the address to be converted A2IRA @ 4:! call A2IRA @ 4LL A2IRA @ 4LL: pop eax sub eax, A2IRA @ 4LL Add Eax, DWORD PTR [ESP 4]; The Parameter Ret 4
This function return the shield header,; can not use in shield module, can not use in in twoer module, such as "merge" module getshieldhead @ 0: ldira eax, shielder RET 0; ########## ######################################################################################################################################################################################################################################################################################################## ################# _ text ends
; ############################################################################### #####################; import Table Related Contents Are in this file
include ShieldImport.asm; this file only contain one function named "LoadClientImport" and have no paramters; because this function is hard coding with assembly, so i code it with C and; compile it to assembly include LoadClientImport.asm; #### ######################################################################################################################################################################################################################################################################################################## ##############################
End Start