My shell frame

zhaozj2021-02-16  45

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, IFNB ;; if not blank push arg ;; Push parameter endif endm

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

转载请注明原文地址:https://www.9cbs.com/read-28321.html

New Post(0)