|
Written by Anon.
|
|
Saturday, 20 January 2007 |
Hiding ABAP Source code
PROGRAM ZHIDE NO STANDARD PAGE HEADING. ************************************************************************ * This program hides any ABAP's source code and protects it with a * password in this source code. So the first candidate to be hidden * should be ZHIDE itself. * * After hiding, you can still run the abap (the load version is intact) * but it cannot be displayed, edited, traced, transported or generated. * * If the ABAP is not hidden, the program hides it, if it is hidden, it * unhides it. * * To execute this program, change the user name and password in this * source code first. ************************************************************************ SELECTION-SCREEN BEGIN OF BLOCK BLOCK. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(8) PWD. SELECTION-SCREEN POSITION 35. PARAMETERS: PASSWORD(8) MODIF ID AAA. SELECTION-SCREEN END OF LINE. PARAMETERS: PROGRAM(8). SELECTION-SCREEN END OF BLOCK BLOCK. * AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. IF SCREEN-GROUP1 = 'AAA'. SCREEN-INVISIBLE = '1'. MODIFY SCREEN. ENDIF. ENDLOOP. * INITIALIZATION. PWD = 'PASSWORD'. * START-OF-SELECTION. TABLES: TRDIR. * User name and passsword check IF SY-UNAME <> 'SAP' OR PASSWORD <> 'PASSWORD'. WRITE: / 'Wrong password'. EXIT. ENDIF. * SAP owned? IF NOT PROGRAM CP 'Z*' AND NOT PROGRAM CP 'Y*'. WRITE: / 'Do not hide original SAP programs!'. EXIT. ENDIF. * Exists? SELECT SINGLE * FROM TRDIR WHERE NAME = PROGRAM. IF SY-SUBRC <> 0. WRITE: / 'Program does not exists!'. EXIT. ENDIF. * Does it have a current generated version? DATA: F1 TYPE D, F3 TYPE D. DATA: F2 TYPE T, F4 TYPE T. EXEC SQL. SELECT UDAT, UTIME, SDAT, STIME INTO :F1, :F2, :F3, :F4 FROM D010LINF WHERE PROG = :PROGRAM ENDEXEC. IF F1 < F3 OR ( F1 = F3 AND F2 < F4 ). WRITE: / 'The program has no recent generated version!'. EXIT. ENDIF. * Compose a new program name DATA: NEW_NAME(8), I TYPE I, J TYPE I. NEW_NAME = PROGRAM. DO 8 TIMES. I = SY-INDEX - 1. NEW_NAME+I(1) = '_'. * Search for acceptable program name variations J = 0. SELECT * FROM TRDIR WHERE NAME LIKE NEW_NAME. J = J + 1. ENDSELECT. IF J = 1. EXIT. ENDIF. NEW_NAME = PROGRAM. ENDDO. * Cannot generate appropriate program name IF J > 1. WRITE: / 'Cannot generate appropriate program name'. EXIT. ENDIF. * Check if it is already in d010s (already hidden) DATA: F5(8). EXEC SQL. SELECT PROG INTO :F5 FROM D010S WHERE PROG = :NEW_NAME ENDEXEC. IF F5 IS INITIAL. * There is no such hidden program, hide it EXEC SQL. UPDATE D010S SET PROG = :NEW_NAME WHERE PROG = :PROGRAM ENDEXEC. ELSE. * There is already a hidden program there, unhide it EXEC SQL. UPDATE D010S SET PROG = :PROGRAM WHERE PROG = :NEW_NAME ENDEXEC. ENDIF. *** end of program |