How to Hide ABAP Code

发表位置:[ 技术 ]   作者:Eric

Google今日凌晨宣布Google.cn服务退出中国大陆,想起前段时间自己的网站无缘无故访问不了,不由得心生感慨。自己的网站跟政治一点不沾边,不知咋地就访问不了,好在青爷大力帮助下,才得以重见天日。总想写点东西来纪念一下,顺便庆祝一下(看,我等小P民是多么容易满足啊),写什么好呢,内心感慨很多,但还是别写出来了,惹不起,总躲得起吧。这两天正好在研究如何Hide ABAP Code,干脆就写篇彻彻底底的技术文章出来跟大家分享吧。

很多时候,为了保护自己的ABAP程序,我们都希望它们在客户环境里不可见,也不可编辑,但是可以正常运行。这个时候我们就需要隐藏ABAP程序。目前常见的方法有两种,一种是在程序的第一行添加特殊字符,另外一种在数据库里更改程序的名字。两种方法各有优缺点,接下来我就详细介绍一下这两种方法。

方法一:在程序的第一行添加一行特殊字符*@#@@[SAP]。

网上的很多资料介绍说这种方法只能用于SAP 4.0以下的版本,但经过我的测试,目前最新版本都可以正常工作。这种方法简单,但想要Rollback回来就不那么容易。目前好像没有一种行之有效的办法,我们的做法是重新导入原始程序,覆盖改动后的。但话说回来,相对于第二种办法,用这种办法Hide Code也是最彻底的,因为客户没法用别的办法来破解。下面给一个动态Hide ABAP Code的例子。

Data: abap_temps(72) TYPE C OCCURS 0 WITH HEADER LINE.

*Iterate all the ABAP programe that need to be hiden

LOOP AT abaps.

REFRESH abap_temps.

* Read the ABAP program and save the content into the abap_temps internal table

READ REPORT abaps INTO abap_temps.

* Insert *@#@@[SAP] at the first line of abap_temps

INSERT ‘*@#@@[SAP]‘ INTO abap_temps INDEX 1.

* Save the content of abap_temps into ABAP program

INSERT REPORT abaps FROM abap_temps STATE ‘A’.

ENDLOOP.

方法二:在DD01S数据库表里更新ABAP程序的名字,比如原先的程序名字是ztest,通过EXEC命令执行SQL语句把名字改成&test,这样程序就被Hiden了。

这种方法想要Rollback就非常容易,逆向操作就行了。相比第一种方法而言,这种方法比较容易被客户破解,因为只要执行相应的SQL语句就可以搞定了。不过要注意的是,DD01S表在6.0以上的版本就没有了,所以这种方法在6.0以上的版本不适用。我们的系统没有6.0以下的版本,所以就没法测试。我从网上找了个例子,仅供大家参考。

* 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.

标签: [ , , ]

欢迎评论

    (可选)

    (可选)

     (可选)

3 + 11 =? (必须填写)