Da ich per Mail eine Nachfrage zu meiner Aussage
Frank Dittrich hat geschrieben:Ein Programm zum Auffinden von "geschützten" Quelltexten benötigt nur 2 Zeilen Source.
bekommen habe, hier die auf das absolute Mimimun gekürzte Fassung eines Programms, das alle "geschützten" Quelltexte findet und in einer Liste ausgibt:
Code: Alles auswählen.
REPORT.DATA:s(255) OCCURS 0,p(40).SELECT name FROM trdir INTO p.READ
REPORT p INTO s.CHECK sy-subrc NE 0.WRITE:/ sy-subrc,p.ENDSELECT.
Ab Release 6.10 passt das sogar bequem in eine Quelltextzeile.
Da der Quelltext wegen dieser Reduzierung auf's Wesentliche alles andere als schön ist, noch ein paar Kommentare:
-der Programmname in der REPORT-Anweisung ist optional, kann also weggelassen werden
Leerzeichen zwichen Anweisungen müssen auch nicht sein.
-itabs sollte man besser nicht mit DATA itab(len) occurs n definieren, ist aber die kürzest mögliche Form.
-Länge 255 ist hier für Releases ab 6.10 nötig, da Quelltexte bis zu 255 Zeichen Zeilenlänge haben können. Ich weiss, dass ich zu 6.10 auch eine itab mit Zeilentyp STRING nehmen kann, es gibt da auch einen Zusatz MAXIMUM WIDTH INTO w zu READ REPORT, nur sollte das Beispiel auch abwärtskompatibel zu älteren Releases sein. Und den Zusatz STATE habe ich auch weggelassen, da ich nur an der aktiven Version interessiert bin (Inaktive Quelltexte finde ich nicht in TRDIR, sondern nur in PROGDIR mit STATE = 'I')
-ebenso würde man normalerweise das Feld für den Programmnamen mit Typ-Bezug definieren, aber Länge 40 passt bisher für alle Releases.
-ohne ORDER BY ist nicht garantiert, dass die EInträge sortiert geliefert werden, aber für eine eigentlich sehr kurze Liste sollte das zu verschmerzen sein.
-es gibt keine SELECT-OPTION für den Programmnamen, aber das würde ich nicht mal als Mangel bezeichnen - man sollte nicht gutgläubig davon ausgehen, dass Entwickler nur im Kundennamensraum herumpfuschen
-das Programm gibt (zumindest zu 6.10) auch eine Zeile mit SY-SUBRC 4 und Programmnamen space aus - dieses "Programm" keinesfalls löschen!
Alle anderen Einträge geben Quelltexte aus, die laut TRDIR-Eintrag vorhanden sein sollten, aber nicht mit READ REPORT gelesen werden können.
Dabei bedeuten
SY-SUBRC = 8:
Das Programm wurde mit der SAP-Standard-Methode (spezieller Kommentar in Quelltext-Zeile 1oder seit 6.10 hart kodierter "Schutz" direkt im SAP-Kernel) "geschützt".
Dieser Fall kann in allen Releases seit 4.0 auftreten.
SY-SUBRC = 4:
Bis auf die eine Zeile ohne Programmame sind die (Rahmen-)Programme durch Manipulation der Tabelle D010S per EXEC SQL ... ENDEXEC "geschützt" worden.
Diese Methode taugt überhaupt nichts und verursacht weit mehr Probleme als die SAP-Standard-Methode. Die Programme - besser gesagt, Kopien ein und desselben Originals, die dazu im Internet und diversen Foren kursieren, enthalten etliche Bugs.
Ausserdem hat diese Methode schon vom Konzept her etliche Mängel, so dass ich mich nicht weiter darüber auslassen will - umgehbar ist dieser "Schutz" allerdings mindestens ebenso leicht wie der Schutz nach der SAP-Standard-Methode.
Und seit 6.10 funktioniert diese Methode gar nicht mehr, weil die Quelltexte nicht mehr in D010S, sondern in Tabelle REPOSRC liegen, und TRDIR ist als View auf REPOSRC definiert.
Normalerweise sollte das Programm folgende Liste ausgeben
- 4
8 RSDECBAC
8 RSDECBAS
8 SAPMSYST
Alle anderen Einträge sind verdächtig.
Allerdings gibt es manche AddOn-Anbieter, die einige ihrer Programme "schützen", weil darin z.B. eine Lizenzschlüsselprüfung kodiert ist, die nicht so leicht umgangen werden soll.
Und dass die Programme RSDECBAC, RSDECBAS und SAPMSYST in der Liste auftauchen dürfen, heisst noch nicht, dass sie nicht kompromittiert sind.
SAPMSYST ist manipulierbar, um z.B. Klartext-Passworte der Benutzer abzufangen.
(Entsprechende Versuche gibt es immer wieder, dummerweise fallen stümperhafte Versuche, das Programm zu manipulieren, recht schnell auf, wenn dann plötzlich keine Dialog-Anmeldung mehr möglich ist.)
RSDECBAS hingegen wird eigentlich nie gebraucht, Manipulationen können also lange unentdeckt bleiben, dagegen hilft nur, dem Programm eine Berechtigungsgruppe (TRDIR-SECU) zu verpassen, für die niemand die Berechttigung hat.
Ansonsten muss man halt jemanden zu Rate ziehen, der in der Lage ist, die o.g. Programme auf Manipulationen zu untersuchen.
Oder man liest den komprimierten Quelltext in eine itab, bildet eine Prüfsumme und vergleicht diese mit der Prüfsumme des gleichen Programms für ein anderes, garantiert noch nicht kompromittiertes System.
Frank