Page 1 sur 3

ASProtect SKE x86 2.71 API

Publié : dim. 29/juin/2014 6:54
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

Re: ASProtect SKE x86 2.71 API

Publié : dim. 29/juin/2014 7:53
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 :(

Re: ASProtect SKE x86 2.71 API

Publié : dim. 29/juin/2014 8:49
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

Re: ASProtect SKE x86 2.71 API

Publié : dim. 29/juin/2014 11:09
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

Re: ASProtect SKE x86 2.71 API

Publié : dim. 29/juin/2014 11:15
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

Re: ASProtect SKE x86 2.71 API

Publié : dim. 29/juin/2014 14:57
par blendman
Quand tu dis "je veux protéger", tu veux dire quoi ?
Empêcher le reverse-enginering ?

Re: ASProtect SKE x86 2.71 API

Publié : dim. 29/juin/2014 15:05
par CaptainCrunch
Pas seulement, je veux aussi gérer les licenses.

J'ai regardé Winlicense, mais c'est trop lourd. Armadillo ?

Re: ASProtect SKE x86 2.71 API

Publié : mar. 01/juil./2014 5:47
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

Re: ASProtect SKE x86 2.71 API

Publié : mar. 01/juil./2014 10:20
par CaptainCrunch
Les fonctions testées :

- GetModeInformation - Ok
- GetRegistrationInformation -Ok
- CheckKey -Ok
- CheckKeyAndDecrypt -Ok
- GetRegistrationKeys -Ok
- RemoveKey -Ok
- GetHardwareId -Ok
- GetHardwareIdEx -Ok

Re: ASProtect SKE x86 2.71 API

Publié : mar. 01/juil./2014 11:10
par graph100
Il fallait ajouter "api" devant le nom de la fonction ?

Bien jouer :D

Re: ASProtect SKE x86 2.71 API

Publié : mar. 01/juil./2014 11:29
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

Re: ASProtect SKE x86 2.71 API

Publié : mar. 01/juil./2014 13:01
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 ?

Re: ASProtect SKE x86 2.71 API

Publié : mar. 01/juil./2014 13:30
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

Re: ASProtect SKE x86 2.71 API

Publié : mar. 01/juil./2014 13:48
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 :-)

Re: ASProtect SKE x86 2.71 API

Publié : mar. 01/juil./2014 14:51
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