ASProtect SKE x86 2.71 API
-
- Messages : 52
- Inscription : dim. 29/juin/2014 6:32
ASProtect SKE x86 2.71 API
Bonjour,
Voulant protéger un soft, je me suis tourné vers ASPprotect.
Mais avant d'acheter la bête, je voulais tester les apis avec la version demo
http://www.aspack.com/files/asprotectske271_demo.zip
et la.... je dois dire, c'est la cata....
J'ai bien regarder la doc, essaye de trouver des exemples sur internet... mais rien de bon
Si qqun pouvait poster un bout de code "fonctionnel" & pour la version actuelle, ce serait sympa.
Ps : J'ai bien contacté le support technique, mais je n'ai pas encore de retour.
PB 5.22 LTS x86
Voulant protéger un soft, je me suis tourné vers ASPprotect.
Mais avant d'acheter la bête, je voulais tester les apis avec la version demo
http://www.aspack.com/files/asprotectske271_demo.zip
et la.... je dois dire, c'est la cata....
J'ai bien regarder la doc, essaye de trouver des exemples sur internet... mais rien de bon
Si qqun pouvait poster un bout de code "fonctionnel" & pour la version actuelle, ce serait sympa.
Ps : J'ai bien contacté le support technique, mais je n'ai pas encore de retour.
PB 5.22 LTS x86
Dernière modification par CaptainCrunch le dim. 29/juin/2014 7:57, modifié 1 fois.
-
- Messages : 52
- Inscription : dim. 29/juin/2014 6:32
Re: ASProtect SKE x86 2.71 API
Dans la doc ASProtect c'est notifié que toutes les fonctions utilisent la convention 'stdcall'
Donc je dois utliser CallFunction().
Mais si on regarde dans les détails :
...n'accepte pas les paramètres de type string, float, double ou quad, et ne peut pas renvoyer
des valeurs de type string, float, double ou quad.
Prototype ?
Pas vraiment habitué avec les proto...
Tout ce que j'ai essaye ne marche pas
Donc je dois utliser CallFunction().
Mais si on regarde dans les détails :
...n'accepte pas les paramètres de type string, float, double ou quad, et ne peut pas renvoyer
des valeurs de type string, float, double ou quad.
Prototype ?
Pas vraiment habitué avec les proto...
Tout ce que j'ai essaye ne marche pas

-
- Messages : 52
- Inscription : dim. 29/juin/2014 6:32
Re: ASProtect SKE x86 2.71 API
Code : Tout sélectionner
;DECLARE FUNCTION apiGetHardwareID LIB "aspr_ide.dll" ALIAS "GetHardwareID" () AS STRING
Prototype.s ProtoGetHardwareID()
Define Ret.l, Test.s, aspLib.s
aspLib = "aspr_ide.dll"
Ret = OpenLibrary(#PB_Any,aspLib)
If Ret > 0
GetHardwareID.ProtoGetHardwareID = GetFunction(Ret,"GetHardwareID")
test = GetHardwareID()
Debug test
CloseLibrary(Ret)
Else
MessageRequester("Erreur","OpenLib Echec",#PB_MessageRequester_Ok)
EndIf
Dernière modification par CaptainCrunch le mar. 01/juil./2014 12:17, modifié 1 fois.
Re: ASProtect SKE x86 2.71 API
Ça ne fonctionne pas, ou bien ça plante ?
regarde si GetHardwareID() te renvoi un pointeur vers une chaine et utilise un peeks()
on ne sait jamais
regarde si GetHardwareID() te renvoi un pointeur vers une chaine et utilise un peeks()
on ne sait jamais
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel
)
Mon site : CeriseCode (Attention Chantier perpétuel

-
- Messages : 52
- Inscription : dim. 29/juin/2014 6:32
Re: ASProtect SKE x86 2.71 API
ne fonctionne pas... de plus quand la dll se décharge, elle fait planter le debogueur.
Je suis largué
)
J'ai testé un PeekS(GetHardwareID.ProtoGetHardwareID) UTF8 ascii, unicode... j'ai un 'Pure' charabia
Sous l'IDE d'ASProtect, l'ID est bon....
De plus, quand l'IDE de la DLL s'affiche... la fonction est identifiée comme GetHardwareID3
Dans la doc c'est marque GetHardwareID et non GetHardwareID3..... je nage
Avis aux spécialistes
Je suis largué

J'ai testé un PeekS(GetHardwareID.ProtoGetHardwareID) UTF8 ascii, unicode... j'ai un 'Pure' charabia

Sous l'IDE d'ASProtect, l'ID est bon....
De plus, quand l'IDE de la DLL s'affiche... la fonction est identifiée comme GetHardwareID3
Dans la doc c'est marque GetHardwareID et non GetHardwareID3..... je nage
Avis aux spécialistes
Re: ASProtect SKE x86 2.71 API
Quand tu dis "je veux protéger", tu veux dire quoi ?
Empêcher le reverse-enginering ?
Empêcher le reverse-enginering ?
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
-
- Messages : 52
- Inscription : dim. 29/juin/2014 6:32
Re: ASProtect SKE x86 2.71 API
Pas seulement, je veux aussi gérer les licenses.
J'ai regardé Winlicense, mais c'est trop lourd. Armadillo ?
J'ai regardé Winlicense, mais c'est trop lourd. Armadillo ?
-
- Messages : 52
- Inscription : dim. 29/juin/2014 6:32
Re: ASProtect SKE x86 2.71 API
Bonjour tout le monde 
Retour sur ASProtect :
Voici la solution....

Retour sur ASProtect :
Voici la solution....
Code : Tout sélectionner
Procedure.i ASP_Lib_Load(ASP_Lib_Name.s) ;*************************
Protected Ret.l
Ret= OpenLibrary(#PB_Any, ASP_Lib_Name)
If Ret > 0
ProcedureReturn Ret
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure.i ASP_Lib_Close(nbr.l) ;*************************
CloseLibrary(nbr)
EndProcedure
Define ASP_Lib_Name.s, ASP_Lib_Num.l, ptId.l
Prototype.l apiGetHardwareId()
ASP_Lib_Name = "aspr_ide.dll"
ASP_Lib_Num = ASP_Lib_Load(ASP_Lib_Name)
If ASP_Lib_Num > 0
GetHardwareId.apiGetHardwareId = GetFunction(ASP_Lib_Num,"GetHardwareID")
ptId = GetHardwareID()
Debug "HardwareId : " + PeekS(ptId)
;ASP_Lib_Close(ASP_Lib_Num)
EndIf
-
- Messages : 52
- Inscription : dim. 29/juin/2014 6:32
Re: ASProtect SKE x86 2.71 API
Les fonctions testées :
- GetModeInformation - Ok
- GetRegistrationInformation -Ok
- CheckKey -Ok
- CheckKeyAndDecrypt -Ok
- GetRegistrationKeys -Ok
- RemoveKey -Ok
- GetHardwareId -Ok
- GetHardwareIdEx -Ok
- GetModeInformation - Ok
- GetRegistrationInformation -Ok
- CheckKey -Ok
- CheckKeyAndDecrypt -Ok
- GetRegistrationKeys -Ok
- RemoveKey -Ok
- GetHardwareId -Ok
- GetHardwareIdEx -Ok
Re: ASProtect SKE x86 2.71 API
Il fallait ajouter "api" devant le nom de la fonction ?
Bien jouer
Bien jouer

_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel
)
Mon site : CeriseCode (Attention Chantier perpétuel

-
- Messages : 52
- Inscription : dim. 29/juin/2014 6:32
Re: ASProtect SKE x86 2.71 API
Bon je poste.... j'espère que ca va servir à qq chose 
Juste un exemple...
... je vais corriger, c'est juste pour les impatients 
Capture d'ecran :
http://hpics.li/90f0201

Juste un exemple...
Code : Tout sélectionner
; ASProtect 2.71 build 3.20 - API - V0.1 - Purebasic 5.22 LTX x86 - CaptainCrunch
Global mainASProtect
Global edtHardwareId, edtName, edtSerialNumber, txtHardwareId, txtSerialNumber, txtName, btnEnregistrer, btnAnnuler
Define ASP_Lib_Name.s, ASP_Lib_Num.l, x.l, Ret.l
Structure TModeStatus
ModeID.b
IsRegistered.b
IsKeyPresent.b
IsWrongHardwareID.b
IsKeyExpired.b
IsModeExpired.b
IsBlackListedKey.b
EndStructure
Global ModeStatus.TModeStatus
Global Dim ASProtect_Func.s(15)
;{ ASProtect_Func()
ASProtect_Func(1) = "GetRegistrationKeys"
ASProtect_Func(2) = "GetRegistrationKeys"
ASProtect_Func(3) = "GetRegistrationInformation"
ASProtect_Func(4) = "RemoveKey"
ASProtect_Func(5) = "CheckKey"
ASProtect_Func(6) = "CheckKeyAndDecrypt"
ASProtect_Func(7) = "GetKeyDate"
ASProtect_Func(8) = "GetKeyExpirationDate"
ASProtect_Func(9) = "GetTrialDays"
ASProtect_Func(10) = "GetTrialExecs"
ASProtect_Func(11) = "GetExpirationDate"
ASProtect_Func(12) = "GetModeInformation"
ASProtect_Func(13) = "GetHardwareID"
ASProtect_Func(14) = "GetHardwareIDEx"
ASProtect_Func(15) = "SetUserKey"
;}
Procedure DebugModeStatus()
With ModeStatus
Debug "ModeId = " + Str(\ModeID)
Debug "IsBlackListedKey = " + Str(\IsBlackListedKey)
Debug "IsKeyExpired = " + Str(\IsKeyExpired)
Debug "IsKeyPresent = " + Str(\IsKeyPresent)
Debug "IsModeExpired =" + Str(\IsModeExpired)
Debug "IsRegistered =" + Str(\IsRegistered)
Debug "IsWrongHardwareId =" + Str(\IsWrongHardwareID)
EndWith
Debug ""
EndProcedure
Procedure.i ASP_Lib_Load(ASP_Lib_Name.s)
Protected Ret.l
Ret= OpenLibrary(#PB_Any, ASP_Lib_Name)
If Ret > 0
ProcedureReturn Ret ; => 0 FileNum
Else
ProcedureReturn 0 ; 0 = Lib Open Failed
EndIf
EndProcedure
Procedure.i ASP_Lib_Close(nbr.l)
CloseLibrary(nbr)
EndProcedure
Prototype.l apiGetModeInformation(ModeId.b, ModeName.s, ModeStatus)
Prototype.b apiGetRegistrationInformation(ModeId.b, Key.l, Name.l)
Prototype.b apiCheckKey(Key.s, Name.s, ModeStatus)
Prototype.b apiCheckKeyAndDecrypt(Key.s, Name.s, SaveKey.b)
Prototype.l apiGetRegistrationKeys()
Prototype.b apiRemoveKey(ModeId.b)
Prototype.l apiGetHardwareId()
Prototype.l apiGetHardwareIdEx(ModeId.b)
Procedure MainFrmOpen(x = 0, y = 0, width = 440, height = 160)
mainASProtect = OpenWindow(#PB_Any, x, y, width, height, "ASProtect SKE 2.57 x86 Demo - CaptainCrunch", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_WindowCentered)
edtHardwareId = StringGadget(#PB_Any, 10, 30, 100, 20, "")
edtName = StringGadget(#PB_Any, 120, 30, 310, 20, "")
edtSerialNumber = StringGadget(#PB_Any, 10, 80, 420, 20, "")
txtHardwareId = TextGadget(#PB_Any, 10, 10, 100, 20, "HardwareId", #PB_Text_Center)
txtSerialNumber = TextGadget(#PB_Any, 10, 60, 420, 20, "Numéro de Série :")
txtName = TextGadget(#PB_Any, 120, 10, 170, 20, "License accordée à :")
btnEnregistrer = ButtonGadget(#PB_Any, 260, 120, 80, 30, "Enregistrer")
btnAnnuler = ButtonGadget(#PB_Any, 350, 120, 80, 30, "Annuler")
EndProcedure
Procedure MainFrmEvents()
Repeat
glEvent = WaitWindowEvent()
glGadget = EventGadget()
glType = EventType()
glWindow = EventWindow()
Select glGadget
Case btnEnregistrer
If glType = #PB_EventType_LeftClick
name.s = GetGadgetText(edtName)
Serial.s = GetGadgetText(edtSerialNumber)
lngName.l = Len(name)
lngSerial.l=Len(serial)
If lngName > 0 And lngSerial > 0
CheckKey.apiCheckKey = GetFunction(ASP_Lib_Num,ASProtect_Func(5))
ptCheckKey = CheckKey(Serial,Name,ModeStatus)
Select ptCheckKey
Case 1
MessageRequester("ASProtect","Clef Valide :-)",#PB_MessageRequester_Ok)
Default
MessageRequester("ASProtect","Clef Invalide !!!",#PB_MessageRequester_Ok)
EndSelect
EndIf
EndIf
Case btnAnnuler
End
EndSelect
Until glEvent = #PB_Event_CloseWindow
EndProcedure
ASP_Lib_Name = "aspr_ide.dll"
ASP_Lib_Num = ASP_Lib_Load(ASP_Lib_Name)
If ASP_Lib_Num > 0
MainFrmOpen()
GetHardwareIdEx.apiGetHardwareIdEx = GetFunction(ASP_Lib_Num,ASProtect_Func(14))
ptIdEx = GetHardwareIdEx(2)
lngIdEx = MemoryStringLength(ptIdEx)
IdEx.s = PeekS(ptIdEx,lngIdEx)
SetGadgetText(edtHardwareId,IdEx)
MainFrmEvents()
ASP_Lib_Close(ASP_Lib_Num)
EndIf

Capture d'ecran :
http://hpics.li/90f0201
Dernière modification par CaptainCrunch le jeu. 10/juil./2014 13:03, modifié 3 fois.
-
- Messages : 52
- Inscription : dim. 29/juin/2014 6:32
Re: ASProtect SKE x86 2.71 API
...eeee, petite parenthèse :
Du delphi...
MACRO USER_POLY_BUFFER = ! DB &HEB, &H04, &HEB, &H05, &H39, &H19
MACRO CRC_BEGIN
! DB &HEB, &H04, &HEB, &H05, &H19, &H01, &HE9, &H25, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00
! DB &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00
! DB &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00
END MACRO
au PureBasic... ca donne quoi ?
C'est correct ? ... ou pas ?
Du delphi...
MACRO USER_POLY_BUFFER = ! DB &HEB, &H04, &HEB, &H05, &H39, &H19
MACRO CRC_BEGIN
! DB &HEB, &H04, &HEB, &H05, &H19, &H01, &HE9, &H25, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00
! DB &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00
! DB &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00
END MACRO
au PureBasic... ca donne quoi ?
Code : Tout sélectionner
Macro USER_POLY_BUFFER
$DB ,$EB, $04, $EB, $05, $39, $19
EndMacro
Re: ASProtect SKE x86 2.71 API
a moins que tu ais une fonction qui prend autant de paramètre que de nombre héxa que tu as mis, ça ne fonctionnera pas.
En Pb tu ne peux pas faire des listes de cette façon là.
Il me semble, sans avoir un contexte plus détaillé, que tu devrais utiliser les DATA : tu stockes tes données en mémoire, puis tu iras les lire ensuite.
Et tu peux les lire avec les codes suivants :
ou bien
En Pb tu ne peux pas faire des listes de cette façon là.
Il me semble, sans avoir un contexte plus détaillé, que tu devrais utiliser les DATA : tu stockes tes données en mémoire, puis tu iras les lire ensuite.
Code : Tout sélectionner
DataSection
USER_POLY_BUFFER:
Data.l $DB ,$EB, $04, $EB, $05, $39, $19
EndDataSection
Code : Tout sélectionner
Restore USER_POLY_BUFFER
For index = 1 To 7
Read hexa.l
Debug hexa
Next
Code : Tout sélectionner
For index = 0 To 6
Debug PeekL(?USER_POLY_BUFFER + index * SizeOf(Long))
Next
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel
)
Mon site : CeriseCode (Attention Chantier perpétuel

-
- Messages : 52
- Inscription : dim. 29/juin/2014 6:32
Re: ASProtect SKE x86 2.71 API
Re 
Je t'explique le contexte :
ASProtect gere aussi :
- Les marqueurs polymorphiques
- CRC
- ... les enveloppes
- et de travailler avec les section cryptées.
Pour ce faire, il faut inclure un fichier .inc contenant les macros.
Exemple :
ProgPrincipal
... et le code de PB.inc
Si tu arrives à m"expliquer 

Je t'explique le contexte :
ASProtect gere aussi :
- Les marqueurs polymorphiques
- CRC
- ... les enveloppes
- et de travailler avec les section cryptées.
Pour ce faire, il faut inclure un fichier .inc contenant les macros.
Exemple :
ProgPrincipal
Code : Tout sélectionner
; Powerbasic ?????
#COMPILE EXE
#IF NOT %DEF(%WINAPI)
#INCLUDE "WIN32API.INC"
#ENDIF
#INCLUDE "PB.INC" <------- ici
FUNCTION PBMAIN()
MSGBOX "Begin", %MB_ICONINFORMATION, "CRC Example"
CRC_BEGIN <------- et la
MSGBOX "Under protection", %MB_ICONINFORMATION, "CRC Example"
CRC_END <---------
MSGBOX "End", %MB_ICONINFORMATION, "CRC Example"
END FUNCTION
Code : Tout sélectionner
MACRO USER_POLY_BUFFER = ! DB &HEB, &H04, &HEB, &H05, &H39, &H19
MACRO CRC_BEGIN
! DB &HEB, &H04, &HEB, &H05, &H19, &H01, &HE9, &H25, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00
! DB &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00
! DB &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00
END MACRO
................

Dernière modification par CaptainCrunch le mar. 01/juil./2014 15:01, modifié 1 fois.
Re: ASProtect SKE x86 2.71 API
me trompe peut etre, mais il semble que l'inc en question est une façon pour PowerBasic de pouvoir utiliser les Api Windows
hors .. Purebasic le fait deja , pas besoin donc d'inclure quoique ce soit, c'est deja fait
la ligne : MSGBOX "Begin", %MB_ICONINFORMATION, "CRC Example"
correspond a peut pres a Messagerequester()
mais en Purebasic tu peux aussi utiliser l'Api MsgBox
en c: ===>
en Purebasic (grosso modo )
voila , plus qu'a aller voir les parametres a entrer ici :
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
exemple :
hors .. Purebasic le fait deja , pas besoin donc d'inclure quoique ce soit, c'est deja fait
la ligne : MSGBOX "Begin", %MB_ICONINFORMATION, "CRC Example"
correspond a peut pres a Messagerequester()
mais en Purebasic tu peux aussi utiliser l'Api MsgBox
en c: ===>
Code : Tout sélectionner
int WINAPI MessageBox(
_In_opt_ HWND hWnd,
_In_opt_ LPCTSTR lpText,
_In_opt_ LPCTSTR lpCaption,
_In_ UINT uType
);
Code : Tout sélectionner
MessageBox_(hWnd,lpText.s,lpCaption.s,uType.i )
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
exemple :
Code : Tout sélectionner
hWnd=0
lpText.s="message a afficher"
lpCaption.s="titre de la box"
uType.i =#MB_OK
MessageBox_(hWnd,lpText.s,lpCaption.s,uType.i )
CallDebugger
; Epb