Re: Извлечь java byte code из Oracle
От: bl-blx Россия http://yegodm.blogspot.com
Дата: 09.02.10 04:09
Оценка: 8 (1)
Здравствуйте, C0s, Вы писали:

C0s>кто-нить может подсказать где искать настоящий байт-код или как подменить вышеуказанный хедер?

Недавно делал подобную штуку с 10.2.0. Но я, видимо, шёл по сложному пути.
1) В схеме DEV, где нужный мне класс находился, сделал так:
CREATE PACKAGE PKG_SERVERDUMP AS

FUNCTION dumpClassToFile(Param1 VARCHAR2, Param2 VARCHAR2, Param3 VARCHAR2) 
  return VARCHAR2 
AS
  LANGUAGE java 
    NAME 'oracle.aurora.server.tools.dumpclass.ServerDump.dumpClassToFile(java.lang.String, java.lang.String, java.lang.String) return java.lang.String';

end;

2) Поскольку требовался вывод в файл на джаве, в схеме SYS дал права на запись во все файлы схеме DEV:
DECLARE 
  GRANTEE VARCHAR2(32767);
  PERMISSION_TYPE VARCHAR2(32767);
  PERMISSION_NAME VARCHAR2(32767);
  PERMISSION_ACTION VARCHAR2(32767);
  KEY NUMBER;

BEGIN 
  GRANTEE := 'DEV';
  PERMISSION_TYPE := 'SYS:java.io.FilePermission';
  PERMISSION_NAME := '<<ALL FILES>>';
  PERMISSION_ACTION := 'write';
  KEY := NULL;

  SYS.DBMS_JAVA.GRANT_PERMISSION ( GRANTEE, PERMISSION_TYPE, PERMISSION_NAME, PERMISSION_ACTION, KEY );
  DBMS_OUTPUT.PUT_LINE('RET=' || KEY);
  COMMIT; 
END;


3) Задампил класс в файл (WinXP, локальный оракл):
DECLARE 
  CLASSNAME VARCHAR2(32767);
  USER VARCHAR2(32767);
  FILENAME VARCHAR2(32767);
  RETVAL VARCHAR2(32767);
BEGIN 
  CLASSNAME := 'appbase/tools/oracle/StringUtils';
  USER := 'DEV';
  FILENAME := 'c:\StringUtils.class';

  RETVAL := PKG_SERVERDUMP.DUMPCLASSTOFILE ( CLASSNAME, USER, FILENAME );
  DBMS_OUTPUT.PUT_LINE(RETVAL);
END;

В результате у меня получился файлик c:\StringUtils.class, который нормально JAD-ом декомпилировался.
El pueblo unido jamás será vencido.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.