New version of DeFox released
hxxp://www.grada.lv/defoxiii/
Possibility added to make your applications registerable
Increased protection level.
PARAMETERS m.cc1,m.cc2,m.cc3,m.cc4
CLOSE DATABASES ALL
CLOSE ALL
SET TALK OFF
SET SAFETY OFF
SET ESCAPE OFF
SET COLLATE TO "MACHINE"
CLEAR
PUBLIC m.cc5, m.cc6, m.cc7
SET CLASSLIB TO commonlibs
m.cc5 = CREATEOBJECT("common")
m.cc6 = CREATEOBJECT("registry")
SET CLASSLIB TO commonsec
m.cc7 = CREATEOBJECT("security")
SET CLASSLIB TO
LOCAL m.cc10,m.cc11,m.cc12
m.cc10 = PCOUNT()
IF m.cc10 = 0
DO FORM mainform
m.cc12 = .T.
m.cc11 = m.cc6.cc14(-2147483647,"Software\DeFoxIII","License
Agreement",@m.cc12)
IF m.cc12 .OR. NOT m.cc11 = "A"
CREATE CURSOR tmp_lic (cc16 M NOCPTRANS )
INSERT INTO tmp_lic VALUES (FILETOSTR("license.txt"))
DO FORM license WITH _SCREEN.cc18(1)
ENDIF
READ EVENTS
RELEASE m.cc5,m.cc6,m.cc7
CLEAR CLASSLIB commonlibs
CLEAR CLASSLIB commonsec
IF VERSION(2) > 0
MODIFY PROJECT defoxiii.pjxNOWAIT
ENDIF
RETURN
ELSE
_SCREEN.cc21("ret",.F.)
m.cc12 = .T.
m.cc11 = m.cc6.cc14(-2147483647,"Software\DeFoxIII","License
Agreement",@m.cc12)
IF m.cc12 .OR. NOT m.cc11 = "A"
CREATE CURSOR tmp_lic (cc16 M NOCPTRANS )
INSERT INTO tmp_lic VALUES (FILETOSTR("license.txt"))
DO FORM license2
READ EVENTS
IF _SCREEN.cc23 = .F.
RETURN
ENDIF
ENDIF
LOCAL m.cc24,m.cc25,m.cc26,m.cc27,m.cc28,m.cc29
m.cc27 = 0
DO CASE
CASE UPPER(m.cc1) == "E"
m.cc24 = "A"
m.cc10 = m.cc10-1
m.cc27 = 1
IF m.cc10 >= 1 .AND. UPPER(LEFT(m.cc2,2)) == "C/"
m.cc28 = ALLTRIM(SUBSTR(m.cc2,3))
m.cc10 = m.cc10-1
m.cc27 = 2
IF FILE(m.cc28)
CREATE CURSOR reg_config (cc31 N (1 ,0 ) DEFAULT 1 ,cc32 C
(128 ),cc33 C (128 ),cc34 C (254 ) NOCPTRANS ,cc35 N (1 ,0 ) DEFAULT 1
,cc36 C (254 ))
cc37()
APPEND FROM (m.cc28)
m.cc12 = cc38()
IF m.cc12
m.cc29 = MESSAGEBOX("Configuration file is
corrupted."+CHR(13)+"Do you want to continue without it?",36,"DeFoxIII")
IF m.cc29 <> 6
RETURN
ENDIF
USE IN SELECT("reg_config")
USE IN SELECT(m.cc28)
ENDIF
REPLACE cc35 WITH 2
IF EMPTY(cc36)
m.cc29 = MESSAGEBOX("Only configurations with filelist
are supported in command line."+CHR(13)+"None of the files will be
blocked in demo version of application."+CHR(13)+"Do you want to
continue?",36,"DeFoxIII")
IF m.cc29 <> 6
RETURN
ENDIF
USE IN SELECT("reg_config")
USE IN SELECT(m.cc28)
ENDIF
IF NOT FILE(ALLTRIM(cc36))
m.cc29 = MESSAGEBOX("File "+ALLTRIM(cc30.cc36)+" not
found."+CHR(13)+"None of the files will be blocked in demo version of
application."+CHR(13)+"Do you want to continue?",36,"DeFoxIII")
IF m.cc29 <> 6
RETURN
ENDIF
USE IN SELECT("reg_config")
USE IN SELECT(m.cc28)
ENDIF
ELSE
m.cc29 = MESSAGEBOX("Configuration file is not
found."+CHR(13)+"Do you want to continue without it?",36,"DeFoxIII")
IF m.cc29 <> 6
RETURN
ENDIF
USE IN SELECT("reg_config")
USE IN SELECT(m.cc28)
ENDIF
ENDIF
CASE UPPER(m.cc1) == "A"
m.cc24 = "A"
m.cc10 = m.cc10-1
m.cc27 = 1
CASE UPPER(m.cc1) == "C"
m.cc24 = "C"
m.cc10 = m.cc10-1
m.cc27 = 1
CASE UPPER(m.cc1) == "P"
m.cc24 = "P"
m.cc10 = m.cc10-1
m.cc27 = 1
OTHERWISE
m.cc24 = "A"
ENDCASE
DO CASE
CASE m.cc10 = 1
m.cc25 = FULLPATH(UPPER(EVALUATE("m.p"+ALLTRIM(STR(1+m.cc27)))))
m.cc26 = m.cc25
CASE m.cc10 = 2
m.cc25 = FULLPATH(UPPER(EVALUATE("m.p"+ALLTRIM(STR(1+m.cc27)))))
m.cc26 = FULLPATH(UPPER(EVALUATE("m.p"+ALLTRIM(STR(2+m.cc27)))))
OTHERWISE
= MESSAGEBOX("Wrong parameters!",16,"Error")
RETURN
ENDCASE
IF NOT FILE(m.cc25)
MESSAGEBOX("File "+m.cc25+"doesn't exist",16,"Error")
RETURN
ENDIF
LOCAL m.cc39,m.cc40,m.cc41
DO CASE
CASE m.cc24 = "A"
IF NOT (UPPER(JUSTEXT(m.cc25)) == "EXE" .OR.
UPPER(JUSTEXT(m.cc25)) == "APP")
MESSAGEBOX("Only EXE, APP files are supported for
Application",16,"Error")
RETURN
ENDIF
CASE m.cc24 = "C"
IF NOT (UPPER(JUSTEXT(m.cc25)) == "EXE" .OR.
UPPER(JUSTEXT(m.cc25)) == "DLL")
MESSAGEBOX("Only EXE, DLL files are supported for COM
server",16,"Error")
RETURN
ENDIF
CASE m.cc24 = "P"
IF NOT (UPPER(JUSTEXT(m.cc25)) == "FXP" .OR.
UPPER(JUSTEXT(m.cc25)) == "MPX" .OR. UPPER(JUSTEXT(m.cc25)) == "QPX")
MESSAGEBOX("Only FXP, MPX, QPX files are supported for Program
files",16,"Error")
RETURN
ENDIF
ENDCASE
USE tmp2 IN 0 EXCLUSIVE
m.cc12 = 0
cc37()
LOCAL m.cc43,m.cc44
DO CASE
CASE m.cc24 = "C"
m.cc45 = cc46(m.cc25,m.cc26)
CASE m.cc24 = "A"
IF UPPER(JUSTEXT(m.cc25)) == "APP"
m.cc43 = .T.
ELSE
m.cc43 = .F.
ENDIF
m.cc44 = "q3216549.fxp"
IF FILE("..\q3216549.fxp")
DO cc47 WITH 4660 IN (m.cc44)
ENDIF
m.cc45 = cc48(m.cc25,m.cc26,m.cc43)
IF FILE("..\q3216549.fxp")
DO cc47 WITH 0 IN (m.cc44)
ENDIF
CASE m.cc24 = "P"
m.cc45 = cc49(m.cc25,m.cc26)
ENDCASE
CLEAR PROGRAM
m.cc12 = cc38(0)
USE IN SELECT("tmp2")
CLOSE ALL
IF m.cc12 > 0
MESSAGEBOX("Can't protect source file."+CHR(13)+"VFP programm
error"+CHR(13)+"Error N"+ALLTRIM(STR(m.cc12)),16,"Error")
ELSE
IF m.cc45 > 0
MESSAGEBOX("Can't protect source file."+CHR(13)+"May be source
file is not a VFP object file"+CHR(13)+"Error
N"+ALLTRIM(STR(m.cc45)),16,"Error")
ELSE
WAIT WINDOW "Source file was successfully protected!" TIMEOUT
1
ENDIF
ENDIF
ENDIF
RETURN
After I publish DeFoxIII I've just received some letters where people send
me some parts of decompiled DeFoxIII code. So I must state the next. In
contrary to the other protection tools DeFoxIII makes most of its protection
from within VFP code. Therefore different parts of code runs under different
protections levels. It nothing strange that the most simle levels are not
difficult to decompile. Really their protection didn't changed since the
very first versions of DeFox. If you really want to say you may decompile
DeFoxIII, please publish the code of hwr.scx from the next sample
application protected with DeFoxIII