Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Hiding code in ABAP programs

former_member737583
Participant
0 Kudos

I curious if in ABAP is possible to hide code.

What I exacly mean?

In other programming languages e.g. C++ when we want to hide some part of implementation, we just simple make an library (dll file) and we join it to complilation code.

Is included in ABAP similar functionality?`

1 ACCEPTED SOLUTION

RichHeilman
Developer Advocate
Developer Advocate
0 Kudos

Yes, you can hide code in ABAP, but for what reason? This is not a good idea in any case, and this tends to make people a little mad. So to answer your question, yes you can do it, if you want to know how, you can find it on the internet. Just search for "Hide ABAP COde"

Regards,

Rich Heilman

4 REPLIES 4

RichHeilman
Developer Advocate
Developer Advocate
0 Kudos

Yes, you can hide code in ABAP, but for what reason? This is not a good idea in any case, and this tends to make people a little mad. So to answer your question, yes you can do it, if you want to know how, you can find it on the internet. Just search for "Hide ABAP COde"

Regards,

Rich Heilman

FredericGirod
Active Contributor
0 Kudos

Hiding code could be dangerous, cause when you will hide it, you will not be able anymore to modify it again.

The best way I thought, is to set the program as "system program". With that, in simple debug mode, you will not show the code.

Rgd

Fré

former_member181962
Active Contributor
0 Kudos

Hi Tomasz,

Check this code:

This is not my own 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.

Former Member
0 Kudos

hi

good

go through this program

selection-screen begin of block block.

parameters: program(30) obligatory.

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.

selection-screen end of block block.

*

data: message(60) type c.

*

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 password check

if password <> 'ABCDEFG'.

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(30), i type i, j type i.

new_name = program.

do 30 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 hidden

data: f5(30).

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.

concatenate 'Program' :program 'was hidden.'

into message separated by space.

else.

  • There is already a hidden program there, unhide it

EXEC SQL.

UPDATE D010S SET PROG = :PROGRAM WHERE PROG = :NEW_NAME

ENDEXEC.

concatenate 'Program' :program 'was restored.'

into message separated by space.

endif.

write message.

      • end of program

thanks

mrutyun^