ASProtect SKE x86 2.71 API

Sujets variés concernant le développement en PureBasic
CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

ASProtect SKE x86 2.71 API

Message par CaptainCrunch »

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
Dernière modification par CaptainCrunch le dim. 29/juin/2014 7:57, modifié 1 fois.
CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

Re: ASProtect SKE x86 2.71 API

Message par CaptainCrunch »

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 :(
CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

Re: ASProtect SKE x86 2.71 API

Message par CaptainCrunch »

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
... ne marche pas
Dernière modification par CaptainCrunch le mar. 01/juil./2014 12:17, modifié 1 fois.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: ASProtect SKE x86 2.71 API

Message par graph100 »

Ç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
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

Re: ASProtect SKE x86 2.71 API

Message par CaptainCrunch »

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
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: ASProtect SKE x86 2.71 API

Message par blendman »

Quand tu dis "je veux protéger", tu veux dire quoi ?
Empêcher le reverse-enginering ?
CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

Re: ASProtect SKE x86 2.71 API

Message par CaptainCrunch »

Pas seulement, je veux aussi gérer les licenses.

J'ai regardé Winlicense, mais c'est trop lourd. Armadillo ?
CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

Re: ASProtect SKE x86 2.71 API

Message par CaptainCrunch »

Bonjour tout le monde :-)

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
CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

Re: ASProtect SKE x86 2.71 API

Message par CaptainCrunch »

Les fonctions testées :

- GetModeInformation - Ok
- GetRegistrationInformation -Ok
- CheckKey -Ok
- CheckKeyAndDecrypt -Ok
- GetRegistrationKeys -Ok
- RemoveKey -Ok
- GetHardwareId -Ok
- GetHardwareIdEx -Ok
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: ASProtect SKE x86 2.71 API

Message par graph100 »

Il fallait ajouter "api" devant le nom de la fonction ?

Bien jouer :D
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

Re: ASProtect SKE x86 2.71 API

Message par CaptainCrunch »

Bon je poste.... j'espère que ca va servir à qq chose :-)

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

... je vais corriger, c'est juste pour les impatients :-)

Capture d'ecran :

http://hpics.li/90f0201
Dernière modification par CaptainCrunch le jeu. 10/juil./2014 13:03, modifié 3 fois.
CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

Re: ASProtect SKE x86 2.71 API

Message par CaptainCrunch »

...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 ?

Code : Tout sélectionner

Macro USER_POLY_BUFFER
  $DB ,$EB, $04, $EB, $05, $39, $19
EndMacro
C'est correct ? ... ou pas ?
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: ASProtect SKE x86 2.71 API

Message par graph100 »

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.

Code : Tout sélectionner

DataSection
	USER_POLY_BUFFER:
	Data.l $DB ,$EB, $04, $EB, $05, $39, $19
EndDataSection
Et tu peux les lire avec les codes suivants :

Code : Tout sélectionner

Restore USER_POLY_BUFFER

For index = 1 To 7
	Read hexa.l
	
	Debug hexa
Next
ou bien

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 ;))
CaptainCrunch
Messages : 52
Inscription : dim. 29/juin/2014 6:32

Re: ASProtect SKE x86 2.71 API

Message par CaptainCrunch »

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

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

... et le code de PB.inc

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
................
Si tu arrives à m"expliquer :-)
Dernière modification par CaptainCrunch le mar. 01/juil./2014 15:01, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: ASProtect SKE x86 2.71 API

Message par Backup »

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: ===>

Code : Tout sélectionner

int WINAPI MessageBox(
  _In_opt_  HWND hWnd,
  _In_opt_  LPCTSTR lpText,
  _In_opt_  LPCTSTR lpCaption,
  _In_      UINT uType
);
en Purebasic (grosso modo )

Code : Tout sélectionner

MessageBox_(hWnd,lpText.s,lpCaption.s,uType.i )

voila , plus qu'a aller voir les parametres a entrer ici :
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

Répondre