26.12.2008 14:53
OlegON
 
В sssysinfo есть Licenses и есть подозрение, что можно его расковырять, не подумайте, не с целью взлома, упаси, по другому обойти ключ можно, просто собрать информацию по магазинам нужно, сколько лицензий...
29.12.2008 03:36
isi
 
Так супермаг считает ко-во использованных лицензий:

SELECT COUNT( * ) LIS FROM ( SELECT
S.MACHINE, SUBSTR( L.LOCKLABEL, 9, 8 ) FROM supermag.SSLOCKS L, supermag.SUPERMAG_SESSIONS S
WHERE L.OBJTYPE = 'CP' AND S.SID = L.SID AND S.SERIAL# = L.SERNUM
AND L.LOCKLABEL IS NOT NULL AND NOT ( L.ID IN ( 'Controller', 'Worker' )
OR EXISTS( SELECT * FROM supermag.SSLOCKS L1 WHERE S.SID = L1.SID AND S.SERIAL# = L1.SERNUM
AND ( L1.OBJTYPE = 'PT' AND L1.ID = '1' OR L1.OBJTYPE = 'CM' AND L1.ID = '1' ) ) )
GROUP BY S.MACHINE, SUBSTR( L.LOCKLABEL, 9, 8 ))


По поводу кол-ва лицензий можно вызвать из CORE процедуру (она например вызывается Административным модулем "права доступа"->"Версия" ):

PROCEDURE GETLICENSEINFO( SERIALNUM OUT NUMBER, WSMAXCOUNT OUT NUMBER, EXPDATE OUT DATE )

только в начале процедуры стоит проверка на существование клиентского процесса, так что возможно придется либо поправить CORE body, либо создать "ложный" процесс (думаю надо покопать в сторону служебных почтовик например или кассовый, они немного по другому обрабатываются сервером супермага)



Либо вот процедура непосредственно которая парстит запись лицензии (PARSELICRECORD там же в CORE):
PROCEDURE PARSELICRECORD( LICRECORDDECODED IN VARCHAR2 )
IS
BADRECORD EXCEPTION;
R SSSYSINFO.PARAMVALUE%TYPE;
R1 SSSYSINFO.PARAMVALUE%TYPE;
TAG PLS_INTEGER;
WSCOUNT PLS_INTEGER;
SERIALNUM NUMBER;
EXPTIME DATE;
POS PLS_INTEGER;
POS1 PLS_INTEGER;
BEGIN
R := LICRECORDDECODED;
IF R IS NULL OR LENGTH( R ) = 0 THEN
RAISE BADRECORD;
END IF;
POS := INSTR( R, '*' );
IF POS = 0 THEN
RAISE BADRECORD;
END IF;
R1 := SUBSTR( R, 1, POS - 1 );
LICCHECKSUM := TO_NUMBER( R1 );
IF LICCHECKSUM IS NULL OR LICCHECKSUM < 0 THEN
RAISE BADRECORD;
END IF;
R := SUBSTR( R, POS + 1 );
POS := INSTR( R, '/' );
IF POS = 0 THEN
RAISE BADRECORD;
END IF;
R1 := SUBSTR( R, 1, POS - 1 );
POS1 := INSTR( R1, GETDBNAME, -1 );
IF POS1 != LENGTH( R1 ) - LENGTH( GETDBNAME ) + 1 THEN
LOGEVENT( 'License record is not for this database' );
RAISE BADRECORD;
END IF;
TAG := TO_NUMBER( SUBSTR( R1, 1, POS1 - 1 ) );
R := SUBSTR( R, POS + 1 );
POS := INSTR( R, '/' );
IF POS = 0 THEN
RAISE BADRECORD;
END IF;
WSCOUNT := TO_NUMBER( SUBSTR( R, 1, POS - 1 ) );
R := SUBSTR( R, POS + 1 );
POS := INSTR( R, '/' );
IF POS = 0 THEN
RAISE BADRECORD;
END IF;
SERIALNUM := TO_NUMBER( SUBSTR( R, 1, POS - 1 ) );
R := SUBSTR( R, POS + 1 );
EXPTIME := TO_DATE( R, 'DD.MM.YYYY' );
IF EXPTIME = TO_DATE( '28.10.1997', 'DD.MM.YYYY' ) THEN
EXPTIME := NULL;
END IF;
IF NOT ( WSCOUNT = 0 AND TAG = 0 OR TAG = SERIALNUM MOD WSCOUNT ) THEN
RAISE BADRECORD;
END IF;
LICEXPDATE := EXPTIME;
LICMAXWS := WSCOUNT; -- <<<<< собственно кол-во лицензий
LICKEYSERIAL := SERIALNUM;
EXCEPTION
WHEN OTHERS THEN
LOGEVENT( 'Invalid license record' );
LICKEYSERIAL := INVALIDLICNUMBER;
LICMAXWS := 0;
LICEXPDATE := NULL;
LICCHECKSUM := NULL;
END;
29.12.2008 06:35
akonev
 
вот смотрел-смотрел вчера на этот парсер и его вызовы, но так до меня и не дошло, из которого же места берется LICRECORDDECODED

тоже пришел к выводу, что надо как-то через GETLICENSEINFO работать.
но просто снятием проверки не обойтись. потому как процедура эта просто выбирает значения из переменных. сама она лицензию не разбирает. то есть надо полноценный супермажный сеанс сначала организовывать. придется разбираться с процедурами дальше.

PS ветка на грани кряка. надо ее убивать, imho.
29.12.2008 07:38
isi
 
Ну на грани кряка это ты зря. По мимо этого ещё много надо делать для превращения в "кряк"
29.12.2008 09:02
OlegON
 
Согласен, что взломом мы не занимаемся, задача - получить запросом количество лицензий. Аналогичная информация выдается административным модулем в открытую. Добавлять информацию о том, как сделать псевдо-сессию не надо, равно, как и аналогичную по методам обхода авторизации и ключа. Если кто-то возражает - давайте обсудим это в отдельной теме в "Вопросах сервера". А здесь - только по сути. Кстати, суть уже ясна, спасибо :)
Часовой пояс GMT +3, время: 05:56.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.