QPILE обфускатор

Obfuscator

Обфуска́ция (от лат. obfuscare — затенять, затемнять; и англ. obfuscate — делать  неочевидным, запутанным, сбивать с толку) или запутывание кода — приведение исходного текста или исполняемого кода программы к виду, сохраняющему ее функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции. 

Как известно, терминал QUIK имеет встроенный компилятор внутреннего языка QPILE. Исходный код программ на этом языке представляет собой обычный текстовый файл и именно в таком виде загружается и исполняется интерпретатором. Таким образом, никакой защиты от несанкционированного использования портфели на языке QPILE не имеют - любой, кто получил файл в руки, может без каких-либо сложностей его использовать и модифицировать. Такой подход является серьёзным препятствием в вопросе авторских прав. Единственным выходом из сложившейся ситуации видится использование обфускатора. После обработки обфускатором из текста портфеля, написанного на языке QPILE получается аналогичный портфель. Будучи загруженным в  QUiK, этот портфель будет выполнять те же действия, что  и исходный. Однако исходный текст  QPILE портфеля приобретает совершенно нечитабельный вид и совершенно не способствует его модификации. Последнее особенно актуально для предотвращения пользователями программного продукта, написанного на QPILE от попыток "его улучшить" Smile.

 


Вот пример портфеля на QPILE: 

PORTFOLIO_EX Assets;
DESCRIPTION Текущие активы;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST FIRMID;

PROGRAM

client_code="xxx"
firm_id="yyyy"

file="assets_log.txt"
file_tmp="assets_log.tmp"

marginal_info=GET_CLIENT_MARGINAL_PORTFOLIO_INFO(firm_id,client_code)
IN_ALL_ASSETS=GET_VALUE (marginal_info, "IN_ALL_ASSETS")
ALL_ASSETS=GET_VALUE (marginal_info, "ALL_ASSETS")
ALL_ASSETS=APPLY_SCALE(ALL_ASSETS,2)

cur_date=GET_DATETIME()
cur_year=get_value(cur_date, "YEAR")
cur_month=get_value(cur_date, "MONTH")
cur_day=get_value(cur_date, "DAY")

FUNC SPLIT(s,from)
pos=FIND(s,from+1,",")
RESULT=TRIM(SUBSTR(s,from,pos-from))
END FUNC

FUNC MOVE(s,from)
RESULT=1+FIND(s,from+1,",")
END FUNC

FUNC ISZERO(d)
RESULT=0
if ((d<0.00001) and (d>-0.00001))
RESULT=1
end if
END FUNC

FUNC ISEQUAL(d1,d2)
RESULT=ISZERO(0+d1-d2)
END FUNC

FUNC REWRITE(f,f1,lines)
CLEAR_FILE(f)
for i from 1 to lines
s=READ_LINE(f1,i,err)
WRITELN(f,s)
end for
END FUNC

outputline=1
err=0

filelen=GET_FILE_LEN(file)
if filelen>0 then
s=READ_LINE(file,filelen,err)
if -1=0+FIND(s,0,",")
continue
end if
from=0
pos=FIND(s,1,",")
day=TRIM(SUBSTR(s,0,pos))
from=MOVE(s,from)
month=SPLIT(s,from)
from=MOVE(s,from)
year=SPLIT(s,from)
from=MOVE(s,from)
assets=SPLIT(s,from)

if (day=cur_day) and (month=cur_month) and (year=cur_year)
filelen=filelen-1
end if
end if

REWRITE(file_tmp,file,filelen)
s=cur_day & " , " & cur_month & " , " & cur_year & " , " & ALL_ASSETS & ","
WRITELN(file_tmp,s)
REWRITE(file,file_tmp,GET_FILE_LEN(file_tmp))

DELETE_ALL_ITEMS()
filelen=GET_FILE_LEN(file)
for i from 1 to filelen
s=READ_LINE(file,i,err)
if -1=0+FIND(s,0,",")
continue
end if
from=0
pos=FIND(s,1,",")
day=TRIM(SUBSTR(s,0,pos))

'day=SPLIT(s,from)
from=MOVE(s,from)
month=SPLIT(s,from)
from=MOVE(s,from)
year=SPLIT(s,from)
from=MOVE(s,from)
assets=SPLIT(s,from)

profit_loss=0
profit_loss_percent=0
if (i>1)
profit_loss=assets-previous_assets
profit_loss_percent=100*profit_loss/previous_assets
end if
previous_assets=assets
output=CREATE_MAP()
output=SET_VALUE(output,"Date","" & day & "." & month & "." & year)
output=SET_VALUE(output,"Assets",assets)
output=SET_VALUE(output,"ProfitLoss",profit_loss)
output=SET_VALUE(output,"ProfitLossPercent",profit_loss_percent)
ADD_ITEM(outputline,output)

if ISZERO(profit_loss)=0
if (profit_loss>0)
SET_ROW_COLOR_EX (outputline, "RGB(0,255,0)", "RGB(0,128,0)","DEFAULT_COLOR", "DEFAULT_COLOR" )
else
SET_ROW_COLOR_EX (outputline, "RGB(255,0,0)", "RGB(128,0,0)","DEFAULT_COLOR", "DEFAULT_COLOR" )
end if
end if

outputline=outputline+1
end for
END_PROGRAM

PARAMETER Date;
PARAMETER_TITLE Дата;
PARAMETER_DESCRIPTION Дата открытия;
PARAMETER_TYPE STRING(10);
END

PARAMETER Assets;
PARAMETER_TITLE Активы;
PARAMETER_DESCRIPTION Текущие активы;
PARAMETER_TYPE NUMERIC(10,2);
END

PARAMETER ProfitLoss;
PARAMETER_TITLE P/L р.;
PARAMETER_DESCRIPTION Прибыль руб.;
PARAMETER_TYPE NUMERIC(10,2);
END

PARAMETER ProfitLossPercent;
PARAMETER_TITLE P/L %;
PARAMETER_DESCRIPTION Прибыль %;
PARAMETER_TYPE NUMERIC(10,2);
END

END_PORTFOLIO_EX


И вот что из него получается после обработки обфускатором:

PORTFOLIO_EX Assets;
DESCRIPTION Текущие активы;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST FIRMID;
PROGRAM
' Created by obfuscator Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. 29.12.2011
__4JtvMzhTohXm6RHg2lK2DGV4m6s_UDf="xxx"'PROGRAM
__ZIyY9EvB0szAkD6_zsHkAU6gV2="yyyy"'__4JtvMzhTohXm6RHg2lK2DGV4m6s_UDf="xxx"_PROGRAM
_NuTGkcIv9hDOJPSzfUoy5o6oHX2za3T5d1ds="assets_log.txt"
_tgQ3flxAeNHHukC82AZzwxMuixT="assets_log.tmp"
_vQl3poZqXsjb5uowEG4S4fVRUszHN_y0GD8="IN_ALL_ASSETS"
_ro2ypsgoZvxHUskn31D67CjNt1O9PK69Y="ALL_ASSETS"
__LifKB1Nzd0a5XrmZwiSPYq="YEAR"'_ro2ypsgoZvxHUskn31D67CjNt1O9P
__uNVGi6hqjUVeG82eRuuac="MONTH"'__LifKB1Nzd0a5XrmZwiSPYq="YEAR
_dziKcc1_xMJZlFkniXkfM59="DAY"'__uNVGi6hqjUVeG82eRuuac="MONTH"_
_TZiojSjz_hjjRg6NAza6=","'_dziKcc1_xMJZlFkniXkfM59="DAY"___uNVGi6hqjUVeG82eRuuac="MONTH"___LifKB1Nzd0a5
_G5B3tYCNHZWFGGK1JhwxqGQ1L_bk3p8=" , "'_TZiojSjz_hjjRg6NAza6=","__dziKcc1_xMJZlFkniXkfM59="DAY"___uN
_BPA0DvzEwd_o4wutKbebcho_vnjNxu30ZVcEgJ8="Date"
_oSnxI9UQt_IBaT_m_EaDeeAU563U3rE8e=""'_BPA0DvzEwd_o4wutKbebcho_vnjNxu30ZVcEgJ8="Date"
_FNyPgzeJh_bRCeHACpzIJZiJtD0pEyxKNwCvgeSdI="."
__bz_MnEnOC7cm_2G_1dXZoP4C_dkY21pk3xZ="Assets"
_SFTyBlyG7_6YOfRNLwlSf0r1WDjeOUxf6SBpcL="ProfitLoss"
_HwbIT_TRtWQM_BmzCBspHWfGQO="ProfitLossPercent"
_fLehH0vBJEkAR6Whc_fBl0czORU4="RGB(0,255,0)"
_yvtTcklCaabBfKSNeq2p="RGB(0,128,0)"'_fLehH0vBJEkAR6Whc_fBl0czORU4="RGB(0,255,0)"
_eFY6b6kfULuFVYHXD9GGjwIVBmTOXVlXtAFTleOEb="DEFAULT_COLOR"
_S_HelNgzAc_Q1LU_Qb30Lv="RGB(255,0,0)"'_eFY6b6kfULuFVYHXD9GGjwIVBmTOXVlXtAFTleOEb="DEFAULT_COLOR"
__A5PrXvoBwm3LFYKW_RtXayn104_LfWxiTgPYFlQ="RGB(128,0,0)"
_go_oLlf7c9B_a9zm6HhSKgO_E=__4JtvMzhTohXm6RHg2lK2DGV4m6s_UDf
_7MJuub9jGI8oAMFPt9_sZWlAU2KYGKw=__ZIyY9EvB0szAkD6_zsHkAU6gV2
_4AsFjUlAAzQuu8kStgDTi2hu7VrxxMa=_NuTGkcIv9hDOJPSzfUoy5o6oHX2za3T5d1ds
_a6WNxX3fc1b1GjxswpZs4nws2JFhf8pEbnLigwS2X=_tgQ3flxAeNHHukC82AZzwxMuixT
_mac8EWFMPTYUPj0Hxfy3pfxv0ao_=GET_CLIENT_MARGINAL_PORTFOLIO_INFO(_7MJuub9jGI8oAMFPt9_sZWlAU2KYGKw,_go_oLlf7c9B_a9zm6HhSKgO_E)
_rThisy29LZAi_DYXhlPWq_uK45C0wGCaRy=gET_vAlUe (_mac8EWFMPTYUPj0Hxfy3pfxv0ao_,_vQl3poZqXsjb5uowEG4S4fVRUszHN_y0GD8)
_FEbvtX_XcOr81lLwCq=gET_vAlUe (_mac8EWFMPTYUPj0Hxfy3pfxv0ao_,_ro2ypsgoZvxHUskn31D67CjNt1O9PK69Y)
_FEbvtX_XcOr81lLwCq=APPLY_SCALE(_FEbvtX_XcOr81lLwCq,2)
_4Y84HTkVasFYlitpkwycEhwCW5RBcFCujdE5v=gEt_dATetIMe()
_x5hl_rNJ8pqdB8A1BW_y4_8DEOde8WYFTWbUYN=gET_vAlUe(_4Y84HTkVasFYlitpkwycEhwCW5RBcFCujdE5v,__LifKB1Nzd0a5XrmZwiSPYq)
_L6_5NCQijt3FkicT6Jd1dsWXbJLnt7q81Ak0Tg=gET_vAlUe(_4Y84HTkVasFYlitpkwycEhwCW5RBcFCujdE5v,__uNVGi6hqjUVeG82eRuuac)
_2AjAixfVqhAoRlV_AYRyJToTVd1R1GG_3wJT9mzIe=gET_vAlUe(_4Y84HTkVasFYlitpkwycEhwCW5RBcFCujdE5v,_dziKcc1_xMJZlFkniXkfM59)
fUnC _4zok907308jSOgcw4stm7kgF7hx0LYGmvezdf5Gw(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
_NUpU3KJWEdoGMpL_4_MOU6I6ryAm_Wi=fInD(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM+1,_TZiojSjz_hjjRg6NAza6)
rEsuLT=tRiM(sUbStR(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM,_NUpU3KJWEdoGMpL_4_MOU6I6ryAm_Wi-fRoM))
enD fUnC'rEsuLT=tRiM(sUbStR(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM,_NUpU3KJWEdoGMpL_4_MOU6I6ryAm_Wi-fRoM))
fUnC _agzMuChBpOR6_1lyQFtyKPUEXeVHjk_(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
rEsuLT=1+fInD(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM+1,_TZiojSjz_hjjRg6NAza6)
enD fUnC'rEsuLT=1+fInD(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM+1,_TZiojSjz_hjjRg6NAza6)
fUnC _URoGwdUvhUl85qtvwVyCGhI5_OPGMBHRm8SJM5(_H2OBRBtb43MxmlrO5MvoqjJpQk0k)
rEsuLT=0'fUnC _URoGwdUvhUl85qtvwVyCGhI5_OPGMBHRm8SJM5(_H2OBRBtb43MxmlrO5MvoqjJpQk0k)
iF ((_H2OBRBtb43MxmlrO5MvoqjJpQk0k<0.00001) aNd (_H2OBRBtb43MxmlrO5MvoqjJpQk0k>-0.00001))
rEsuLT=1'iF ((_H2OBRBtb43MxmlrO5MvoqjJpQk0k<0.00001) aNd (_H2OBRBtb43MxmlrO5MvoqjJpQk0k>-0.00001))
enD iF'rEsuLT=1_iF ((_H2OBRBtb43MxmlrO5MvoqjJpQk0k<0.00001) aNd (_H2OBRBtb43MxmlrO5MvoqjJpQk0k>-0.00001))
enD fUnC'enD iF_rEsuLT=1_iF ((_H2OBRBtb43MxmlrO5MvoqjJpQk0k<0.00001) aNd (_H2OBRBtb43MxmlrO5MvoqjJpQk0k>-0.00001))
fUnC _OGasTjCYY4_KpgOI_wW61(_W8SukFffl4Wjn__lLK4_VUaUFbzrv1r06CjyDIf6,_yIEWvByV4l5do_DWo7anU4ncku8c)
rEsuLT=_URoGwdUvhUl85qtvwVyCGhI5_OPGMBHRm8SJM5(0+_W8SukFffl4Wjn__lLK4_VUaUFbzrv1r06CjyDIf6-_yIEWvByV4l5do_DWo7anU4ncku8c)
enD fUnC'rEsuLT=_URoGwdUvhUl85qtvwVyCGhI5_OPGMBHRm8SJM5(0+_W8SukFffl4Wjn__lLK4_VUaUFbzrv1r06CjyDIf6-_yIEWvByV4l5do_DWo7anU4ncku8c)
fUnC _u_qmxvnqpkhERFrNBZFcsybRNOtj_WhHMyLak8(_5UrqDKEV4qwmrlvCXyoNyhPF2ruI6wnRzZseddL1,_3W8dbV8u21Y_aBRxgJKCVpIB,_tT40dGBCxTuqUnmn8JtZES38_q)
CleAR_fiLE(_5UrqDKEV4qwmrlvCXyoNyhPF2ruI6wnRzZseddL1)
foR _n_NhP507Tn10Umz_PPtRishpnIxca fRoM 1 to _tT40dGBCxTuqUnmn8JtZES38_q
_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL=rEAd_lInE(_3W8dbV8u21Y_aBRxgJKCVpIB,_n_NhP507Tn10Umz_PPtRishpnIxca,_VEg41hN9X_J0fIM7W8VtvCxYCAgc7xHD8s)
wRitELN(_5UrqDKEV4qwmrlvCXyoNyhPF2ruI6wnRzZseddL1,_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL)
enD foR'wRitELN(_5UrqDKEV4qwmrlvCXyoNyhPF2ruI6wnRzZseddL1,_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL)
enD fUnC'enD foR_wRitELN(_5UrqDKEV4qwmrlvCXyoNyhPF2ruI6wnRzZseddL1,_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL)
_Xr5jCX5Hqect4wDoQy5GY60cNOYbGbwaYw8D=1'enD fUnC_enD foR_wRitELN(_5UrqDKEV4qwmrlvCXyoNyhPF2ruI6wnRzZseddL1,_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL)
_VEg41hN9X_J0fIM7W8VtvCxYCAgc7xHD8s=0'_Xr5jCX5Hqect4wDoQy5GY60cNOYbGbwaYw8D=1_enD fUnC_enD foR_wRitELN(_5UrqDKEV4qwmrlvCXyoNyhPF2ruI6wnRzZseddL1,_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL)
_RVUkyYriPgCoDwrx5LbsFPgm4_l_RuJm7MBek9Q=gEt_fiLE_lEn(_4AsFjUlAAzQuu8kStgDTi2hu7VrxxMa)
iF _RVUkyYriPgCoDwrx5LbsFPgm4_l_RuJm7MBek9Q>0 then
_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL=rEAd_lInE(_4AsFjUlAAzQuu8kStgDTi2hu7VrxxMa,_RVUkyYriPgCoDwrx5LbsFPgm4_l_RuJm7MBek9Q,_VEg41hN9X_J0fIM7W8VtvCxYCAgc7xHD8s)
iF-1=0+fInD(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,0,_TZiojSjz_hjjRg6NAza6)
cONtiNUe'iF-1=0+fInD(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,0,_TZiojSjz_hjjRg6NAza6)
enD iF'cONtiNUe_iF-1=0+fInD(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,0,_TZiojSjz_hjjRg6NAza6)
fRoM=0'enD iF_cONtiNUe_iF-1=0+fInD(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,0,_TZiojSjz_hjjRg6NAza6)
_NUpU3KJWEdoGMpL_4_MOU6I6ryAm_Wi=fInD(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,1,_TZiojSjz_hjjRg6NAza6)
__qWdD4jX376uejncbzYTucH6=tRiM(sUbStR(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,0,_NUpU3KJWEdoGMpL_4_MOU6I6ryAm_Wi))
fRoM=_agzMuChBpOR6_1lyQFtyKPUEXeVHjk_(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
_mCsZImJaSOEvgFm9TRSmJ7=_4zok907308jSOgcw4stm7kgF7hx0LYGmvezdf5Gw(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
fRoM=_agzMuChBpOR6_1lyQFtyKPUEXeVHjk_(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
_ZiBDn_oYcgBDT2lqDrgdkDWkVNv=_4zok907308jSOgcw4stm7kgF7hx0LYGmvezdf5Gw(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
fRoM=_agzMuChBpOR6_1lyQFtyKPUEXeVHjk_(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
_L4rmYkd4lMRfrRKktJwZhG=_4zok907308jSOgcw4stm7kgF7hx0LYGmvezdf5Gw(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
iF (__qWdD4jX376uejncbzYTucH6=_2AjAixfVqhAoRlV_AYRyJToTVd1R1GG_3wJT9mzIe) aNd (_mCsZImJaSOEvgFm9TRSmJ7=_L6_5NCQijt3FkicT6Jd1dsWXbJLnt7q81Ak0Tg) aNd (_ZiBDn_oYcgBDT2lqDrgdkDWkVNv=_x5hl_rNJ8pqdB8A1BW_y4_8DEOde8WYFTWbUYN)
_RVUkyYriPgCoDwrx5LbsFPgm4_l_RuJm7MBek9Q=_RVUkyYriPgCoDwrx5LbsFPgm4_l_RuJm7MBek9Q-1
enD iF'_RVUkyYriPgCoDwrx5LbsFPgm4_l_RuJm7MBek9Q=_RVUkyYriPgCoDwrx5LbsFPgm4_l_RuJm7MBek9Q-1
enD iF'enD iF__RVUkyYriPgCoDwrx5LbsFPgm4_l_RuJm7MBek9Q=_RVUkyYriPgCoDwrx5LbsFPgm4_l_RuJm7MBek9Q-1
_u_qmxvnqpkhERFrNBZFcsybRNOtj_WhHMyLak8(_a6WNxX3fc1b1GjxswpZs4nws2JFhf8pEbnLigwS2X,_4AsFjUlAAzQuu8kStgDTi2hu7VrxxMa,_RVUkyYriPgCoDwrx5LbsFPgm4_l_RuJm7MBek9Q)
_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL=_2AjAixfVqhAoRlV_AYRyJToTVd1R1GG_3wJT9mzIe&_G5B3tYCNHZWFGGK1JhwxqGQ1L_bk3p8&_L6_5NCQijt3FkicT6Jd1dsWXbJLnt7q81Ak0Tg&_G5B3tYCNHZWFGGK1JhwxqGQ1L_bk3p8&_x5hl_rNJ8pqdB8A1BW_y4_8DEOde8WYFTWbUYN&_G5B3tYCNHZWFGGK1JhwxqGQ1L_bk3p8&_FEbvtX_XcOr81lLwCq&_TZiojSjz_hjjRg6NAza6
wRitELN(_a6WNxX3fc1b1GjxswpZs4nws2JFhf8pEbnLigwS2X,_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL)
_u_qmxvnqpkhERFrNBZFcsybRNOtj_WhHMyLak8(_4AsFjUlAAzQuu8kStgDTi2hu7VrxxMa,_a6WNxX3fc1b1GjxswpZs4nws2JFhf8pEbnLigwS2X,gEt_fiLE_lEn(_a6WNxX3fc1b1GjxswpZs4nws2JFhf8pEbnLigwS2X))
dELetE_aLl_iTeMs()'_u_qmxvnqpkhERFrNBZFcsybRNOtj_WhHMyLak8(_4AsFjUlAAzQuu8kStgDTi2hu7VrxxMa,_a6WNxX3fc1b1GjxswpZs4nws2JFhf8pEbnLigwS2X,gEt_fiLE_lEn(_a6WNxX3fc1b1GjxswpZs4nws2JFhf8pEbnLigwS2X))
_RVUkyYriPgCoDwrx5LbsFPgm4_l_RuJm7MBek9Q=gEt_fiLE_lEn(_4AsFjUlAAzQuu8kStgDTi2hu7VrxxMa)
foR _n_NhP507Tn10Umz_PPtRishpnIxca fRoM 1 to _RVUkyYriPgCoDwrx5LbsFPgm4_l_RuJm7MBek9Q
_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL=rEAd_lInE(_4AsFjUlAAzQuu8kStgDTi2hu7VrxxMa,_n_NhP507Tn10Umz_PPtRishpnIxca,_VEg41hN9X_J0fIM7W8VtvCxYCAgc7xHD8s)
iF-1=0+fInD(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,0,_TZiojSjz_hjjRg6NAza6)
cONtiNUe'iF-1=0+fInD(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,0,_TZiojSjz_hjjRg6NAza6)
enD iF'cONtiNUe_iF-1=0+fInD(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,0,_TZiojSjz_hjjRg6NAza6)
fRoM=0'enD iF_cONtiNUe_iF-1=0+fInD(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,0,_TZiojSjz_hjjRg6NAza6)
_NUpU3KJWEdoGMpL_4_MOU6I6ryAm_Wi=fInD(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,1,_TZiojSjz_hjjRg6NAza6)
__qWdD4jX376uejncbzYTucH6=tRiM(sUbStR(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,0,_NUpU3KJWEdoGMpL_4_MOU6I6ryAm_Wi))
fRoM=_agzMuChBpOR6_1lyQFtyKPUEXeVHjk_(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
_mCsZImJaSOEvgFm9TRSmJ7=_4zok907308jSOgcw4stm7kgF7hx0LYGmvezdf5Gw(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
fRoM=_agzMuChBpOR6_1lyQFtyKPUEXeVHjk_(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
_ZiBDn_oYcgBDT2lqDrgdkDWkVNv=_4zok907308jSOgcw4stm7kgF7hx0LYGmvezdf5Gw(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
fRoM=_agzMuChBpOR6_1lyQFtyKPUEXeVHjk_(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
_L4rmYkd4lMRfrRKktJwZhG=_4zok907308jSOgcw4stm7kgF7hx0LYGmvezdf5Gw(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
_b3RDrkLxPslKDA_rrTcX0z=0'_L4rmYkd4lMRfrRKktJwZhG=_4zok907308jSOgcw4stm7kgF7hx0LYGmvezdf5Gw(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
_T_MJ_Y1vkkgS8S7EAYV4_5v=0'_b3RDrkLxPslKDA_rrTcX0z=0__L4rmYkd4lMRfrRKktJwZhG=_4zok907308jSOgcw4stm7kgF7hx0LYGmvezdf5Gw(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
iF (_n_NhP507Tn10Umz_PPtRishpnIxca>1)'_T_MJ_Y1vkkgS8S7EAYV4_5v=0__b3RDrkLxPslKDA_rrTcX0z=0__L4rmYkd4lMRfrRKktJwZ(_gXkNmaIFzujehuoJWyZ83OgQyjHuNVT7pnpL,fRoM)
_b3RDrkLxPslKDA_rrTcX0z=_L4rmYkd4lMRfrRKktJwZhG-_r63uMBsmNXIDiBJJKpgMPyh9
_T_MJ_Y1vkkgS8S7EAYV4_5v=100*_b3RDrkLxPslKDA_rrTcX0z/_r63uMBsmNXIDiBJJKpgMPyh9
enD iF'_T_MJ_Y1vkkgS8S7EAYV4_5v=100*_b3RDrkLxPslKDA_rrTcX0z/_r63uMBsmNXIDiBJJKpgMPyh9
_r63uMBsmNXIDiBJJKpgMPyh9=_L4rmYkd4lMRfrRKktJwZhG
_4Hp68ANAQdu1p2L_W3ryAzmbK=cREatE_mAP()'_r63uMBsmNXIDiBJJKpgMPyh9=_L4rmYkd4lMRfrRKktJwZhG
_4Hp68ANAQdu1p2L_W3ryAzmbK=sEt_vAlUe(_4Hp68ANAQdu1p2L_W3ryAzmbK,_BPA0DvzEwd_o4wutKbebcho_vnjNxu30ZVcEgJ8,_oSnxI9UQt_IBaT_m_EaDeeAU563U3rE8e&__qWdD4jX376uejncbzYTucH6&_FNyPgzeJh_bRCeHACpzIJZiJtD0pEyxKNwCvgeSdI&_mCsZImJaSOEvgFm9TRSmJ7&_FNyPgzeJh_bRCeHACpzIJZiJtD0pEyxKNwCvgeSdI&_ZiBDn_oYcgBDT2lqDrgdkDWkVNv)
_4Hp68ANAQdu1p2L_W3ryAzmbK=sEt_vAlUe(_4Hp68ANAQdu1p2L_W3ryAzmbK,__bz_MnEnOC7cm_2G_1dXZoP4C_dkY21pk3xZ,_L4rmYkd4lMRfrRKktJwZhG)
_4Hp68ANAQdu1p2L_W3ryAzmbK=sEt_vAlUe(_4Hp68ANAQdu1p2L_W3ryAzmbK,_SFTyBlyG7_6YOfRNLwlSf0r1WDjeOUxf6SBpcL,_b3RDrkLxPslKDA_rrTcX0z)
_4Hp68ANAQdu1p2L_W3ryAzmbK=sEt_vAlUe(_4Hp68ANAQdu1p2L_W3ryAzmbK,_HwbIT_TRtWQM_BmzCBspHWfGQO,_T_MJ_Y1vkkgS8S7EAYV4_5v)
aDd_itEm(_Xr5jCX5Hqect4wDoQy5GY60cNOYbGbwaYw8D,_4Hp68ANAQdu1p2L_W3ryAzmbK)
iF _URoGwdUvhUl85qtvwVyCGhI5_OPGMBHRm8SJM5(_b3RDrkLxPslKDA_rrTcX0z)=0
iF (_b3RDrkLxPslKDA_rrTcX0z>0)'iF _URoGwdUvhUl85qtvwVyCGhI5_OPGMBHRm8SJM5(_b3RDrkLxPslKDA_rrTcX0z)=0
sEt_rOW_cOLoR_eX (_Xr5jCX5Hqect4wDoQy5GY60cNOYbGbwaYw8D,_fLehH0vBJEkAR6Whc_fBl0czORU4,_yvtTcklCaabBfKSNeq2p,_eFY6b6kfULuFVYHXD9GGjwIVBmTOXVlXtAFTleOEb,_eFY6b6kfULuFVYHXD9GGjwIVBmTOXVlXtAFTleOEb )
eLSE'sEt_rOW_cOLoR_eX (_Xr5jCX5Hqect4wDoQy5GY60cNOYbGbwaYw8D,_fLehH0vBJEkAR6Whc_fBl0czORU4,_yvtTcklCaabBfKSNeq2p,_eFY6b6kfULuFVYHXD9GGjwIVBmTOXVlXtAFTleOEb,_eFY6b6kfULuFVYHXD9GGjwIVBmTOXVlXtAFTleOEb )
sEt_rOW_cOLoR_eX (_Xr5jCX5Hqect4wDoQy5GY60cNOYbGbwaYw8D,_S_HelNgzAc_Q1LU_Qb30Lv,__A5PrXvoBwm3LFYKW_RtXayn104_LfWxiTgPYFlQ,_eFY6b6kfULuFVYHXD9GGjwIVBmTOXVlXtAFTleOEb,_eFY6b6kfULuFVYHXD9GGjwIVBmTOXVlXtAFTleOEb )
enD iF'sEt_rOW_cOLoR_eX (_Xr5jCX5Hqect4wDoQy5GY60cNOYbGbwaYw8D,_S_HelNgzAc_Q1LU_Qb30Lv,__A5PrXvoBwm3LFYKW_RtXayn104_LfWxiTgPYFlQ,_eFY6b6kfULuFVYHXD9GGjwIVBmTOXVlXtAFTleOEb,_eFY6b6kfULuFVYHXD9GGjwIVBmTOXVlXtAFTleOEb )
enD iF'enD iF_sEt_rOW_cOLoR_eX (_Xr5jCX5Hqect4wDoQy5GY60cNOYbGbwaYw8D,_S_HelNgzAc_Q1LU_Qb30Lv,__A5PrXvoBwm3LFYKW_RtXayn104_LfWxiTgPYFlQ,_eFY6b6kfULuFVYHXD9GGjwIVBmTOXVlXtAFTleOEb,_eFY6b6kfULuFVYHXD9GGjwIVBmTOXVlXtAFTleOEb )
_Xr5jCX5Hqect4wDoQy5GY60cNOYbGbwaYw8D=_Xr5jCX5Hqect4wDoQy5GY60cNOYbGbwaYw8D+1
enD foR'_Xr5jCX5Hqect4wDoQy5GY60cNOYbGbwaYw8D=_Xr5jCX5Hqect4wDoQy5GY60cNOYbGbwaYw8D+1
END_PROGRAM
PARAMETER Date;
PARAMETER_TITLE Дата;
PARAMETER_DESCRIPTION Дата открытия;
PARAMETER_TYPE STRING(10);
END
PARAMETER Assets;
PARAMETER_TITLE Активы;
PARAMETER_DESCRIPTION Текущие активы;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER ProfitLoss;
PARAMETER_TITLE P/L р.;
PARAMETER_DESCRIPTION Прибыль руб.;
PARAMETER_TYPE NUMERIC(10,2);
END
PARAMETER ProfitLossPercent;
PARAMETER_TITLE P/L %;
PARAMETER_DESCRIPTION Прибыль %;
PARAMETER_TYPE NUMERIC(10,2);
END
END_PORTFOLIO_EX

 

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

Поскольку никаких требований к производительности обфускатора не предъявляется, языком разработки был выбран скриптовый интерпретатор AutoIt. Простота синтаксиса языка QPILE позволила обойтись без LEX и других средств синтаксического разбора.

 

Если Вы решили сравнить работу исходного QPILE портфеля и полученного в результате деобфускации, нужно отредактировать переносы строк, которые возникли при отображении текста на экране вашего устройства. Результат работы портфелей одинаков вне зависимости от их сложности.

 

Добавление 04.05.2012

Несколько раз слышал о попытках деобфускации. Льстит, что людям не жаль своего времени для разбирательств с моими исходными текстами. Об успешных результатах (в отличие от попыток) не слышал, хотя было бы интересно. Несмотря на то, что обфускация ни в коей мере не является устойчивым шифрованием, цель очевидным образом достигается. Для удовольствия реверс-инженеров добавил на праздниках еще пару функций обфускации. Теперь вместо текстового редактора инструментом для де-обфускации может служить только встроенный отладчик QPILE. Кто с ним знаком - улыбнется.

 

Персональные копии обфускатора раздаются всем желающим. Одно условие: необходимо перевести любую сумму на карту

 

При этом жадничать совершенно необязательно Подмигиваю

 

 

Комментарии   

# Антон 25.02.2012 23:24
Здравствуйте, Михаил!
Подскажите, есть ли возможность получить этот обфускатор?
Ответить | Ответить с цитатой | Цитировать
# admin 26.02.2012 00:13
Добрый вечер, Антон. Изначально я не имел планов распространять этот обфускатор, писал для себя, не думал, что он будет востребован. Если он Вам нужен - напишите мне почтой или в скайп.
Ответить | Ответить с цитатой | Цитировать
# Boris 25.03.2012 01:25
Работает, крутейшая вещь, правда до сих пор не пойму принцеп, очень круто... При необходимости приобрету...
Друзья, по этому поводу облазил весь инет, только два места где это делают. На этом сайте, и здесь qatch.ru/services/obfuscator/
Но есть одно но, на втором ресурсе всё происходит путём загрузки файла на их сайт, обрабатывается и вы получите уже свой не читаемый код. А вот и то "НО", тем самым вы отдаете свою работу этому сайту, ведь вы грузите туда его...Не факт что там уже не тонна ваших работ, и воровства ваших идей.
Михаилу Респект!!!!!!!! !!!
Ответить | Ответить с цитатой | Цитировать
# Val 01.03.2013 10:40
s_mike, приветствую. можно ли с помощью вашей утилиты обфускировать код робота на LUA?
Ответить | Ответить с цитатой | Цитировать
# admin 01.03.2013 12:01
Val, этого сделать нельзя. Синтаксис языков Qpile и Lua совершенно разный. Для Lua есть "компилятор" Luac, который переводит исходный текст в псевдо-исполняе мый. Чего обычно вполне достаточно для сокрытия кода.
Ответить | Ответить с цитатой | Цитировать
# Alex6955 16.10.2016 17:00
Доброго времени суток, Ваше предложение еще в силе ?
Ответить | Ответить с цитатой | Цитировать
# admin 16.10.2016 18:10
Почему нет?

Обфускатор как работал, так и работает ) Он не высох, не протёк и не сломался )
Ответить | Ответить с цитатой | Цитировать

Добавить комментарий


Защитный код
Обновить

Сейчас 34 гостей и ни одного зарегистрированного пользователя на сайте