Application Development and Automation 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: 
Read only

ABAP Code Hide or encrypt or scramble

Former Member
0 Likes
4,318

Is there any way by which we can hide or encrypt or scramble ABAP program or function module from client?

Any method, will work for me

1 ACCEPTED SOLUTION
Read only

VeselinaPeykova
Active Contributor
3,989

One can only hope that the system in question is patched so that *@# does not work anymore.

Here is why: 2198580 - Code injection vulnerability in ABAP.

As a humble consultant, I would be very much against the idea of using software by vendors who hide their code (yes, I have worked with such add-ons and the support is tedious, not to mention that you cannot easily validate the code quality, the security risk implications, etc.).

11 REPLIES 11
Read only

Former Member
0 Likes
3,989

Try entering

*@#@@[SAP] 

on the very first line of your code.

There is no easy way to get the code back, so make sure you make a backup before you do it.

Alternatively, here is a program I found online (I wasn't able to find any other solution. Some are saying that it is no longer possible):

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
Read only

0 Likes
3,989

These suggestions are valid for older version so it won't be valid. It's not useful

Read only

3,989

The question didn't specify which platform you're on. I'm supposed to guess?

Read only

VeselinaPeykova
Active Contributor
3,990

One can only hope that the system in question is patched so that *@# does not work anymore.

Here is why: 2198580 - Code injection vulnerability in ABAP.

As a humble consultant, I would be very much against the idea of using software by vendors who hide their code (yes, I have worked with such add-ons and the support is tedious, not to mention that you cannot easily validate the code quality, the security risk implications, etc.).

Read only

0 Likes
3,989

Please let me know alternate way by which i can do that

Read only

3,989

anuragkathal but why do you have to do this in the first place?

Read only

0 Likes
3,989

we have developed a product in ABAP due to which we want to hide

Read only

3,989

Even if you could hide it, only foolish customers would buy it.

Read only

Matt_Fraser
Active Contributor
0 Likes
3,989

As this question about ABAP development techniques, and not about the ABAP Application Server platform, I have changed the primary tag accordingly.

Read only

FredericGirod
Active Contributor
0 Likes
3,989

the question has been asked several time, the answer is always: It is not possible anymore.

Read only

matt
Active Contributor
3,989

Not possible and even when it was it was very much frowned upon - in discussions going back over twenty years.