2008-02-29, 15:49
  #1
Medlem
RiddareRalfs avatar
Hej.

Visste inte riktigt var jag skulle placera den här tråden men förmodar att den passar in här.

Jag är inte så erfaren när det gäller att cracka program och har hittat ett jag nu försöker cracka.
Den läser av licensnyckeln från en textfil i datorn och kollar om det stämmer överens med den unika nyckeln som är på din dator.
Man får en unikt datorid och sedan får man en nyckel skapad efter det.

Såhär ser själva verifieringskoden ut i ASM:
Kod:
TEST EAX,EAX
JE SHORT 003222B5

För att cracka programmet ändrar man bara JE till JMP så undgår man själva verifieringsproceduren.

Nu är inte jag så insatt i ASM men när den kör "TEST EAX,EAX" så jämför den mitt värde som jag har i licensfilen med nyckeln (antar jag).
Jag kan få fram värdet på den ena EAXen (min licens nyckel som jag skrev in) men hur får jag fram värdet som den jämför med?

Hoppas jag inte är för otydlig och rätta mig mer än gärna.

/ RiddareRalf
Citera
2008-02-29, 16:46
  #2
Medlem

Kört en JMP istället för JE på JE SHORT 003222B5..
JMP = Jump

JE shortlabel op1 = op2 jump if equal
JNE shortlabel op1 != op2 jump if not equal
JG shortlabel op1 > op2 jump if greater than
JNG shortlabel !(op1 > op2) jump if not greater than
JGE shortlabel op1 >= op2 jump if greater than or equal
JNGE shortlabel !(op1 >= op2) jump if not greater than or equal
JL shortlabel op1 < op2 jump if less than
JNL shortlabel !(op1 < op2) jump if not less than
JLE shortlabel op1 <= op2 jump if less than or equal
JNLE shortlabel !(op1 <= op2) jump if not less than or equal
Citera
2008-02-29, 18:14
  #3
Medlem
RiddareRalfs avatar
Citat:
Ursprungligen postat av K85

Kört en JMP istället för JE på JE SHORT 003222B5..
JMP = Jump

JE shortlabel op1 = op2 jump if equal
JNE shortlabel op1 != op2 jump if not equal
JG shortlabel op1 > op2 jump if greater than
JNG shortlabel !(op1 > op2) jump if not greater than
JGE shortlabel op1 >= op2 jump if greater than or equal
JNGE shortlabel !(op1 >= op2) jump if not greater than or equal
JL shortlabel op1 < op2 jump if less than
JNL shortlabel !(op1 < op2) jump if not less than
JLE shortlabel op1 <= op2 jump if less than or equal
JNLE shortlabel !(op1 <= op2) jump if not less than or equal
Tackar för koden där.
Jag var nog lite otydlig. Jag har redan crackat programmet genom att göra en JMP men jag skulle vilja ha ut nyckeln, den riktiga serialen för datorn. På så sätt slipper jag släppa nya cracks och ta fram en licens istället.

Tänkte att när den jämför min nyckel jag skrev in "aaaabbbbcccc" med den riktiga nyckeln så borde jag på något sätt kunna få fram den.

För jag antar att det är i TEST EAX, EAX dom två jämförs.
Citera
2008-02-29, 20:39
  #4
Citat:
Ursprungligen postat av RiddareRalf
För jag antar att det är i TEST EAX, EAX dom två jämförs.

Det där kollar om eax är 0 och hoppar i så fall.
(JE hoppar om ZF=1 och test eax, eax sätter ZF=1 om eax=0)

EDIT: Du får alltså leta vidare efter hur nyckeln genereras
Citera
2008-03-02, 17:10
  #5
Medlem
För att förtydliga så fungerar 'test' som så att den kör en icke-destruktiv (ändrar inte operanderna) logisk OCH med operanderna och sätter flaggor i statusregistret beroende på svaret. Om eax är noll så sätts ZF till noll (noll OCH noll blir noll). je i sin tur hoppar om ZF är noll.

Så svaret på detta:
Citat:
Jag kan få fram värdet på den ena EAXen (min licens nyckel som jag skrev in) men hur får jag fram värdet som den jämför med?
blir att eax jämförs med sig själv. Antagligen görs någon beräkning mellan ID och nyckel och om beräkningen resulterar i värdet 0 så är nyckeln giltig.
Citera
2008-03-02, 23:41
  #6
Medlem
Kod:
TEST EAX,EAX
JE SHORT 003222B5

Det här är sista steget i valideringsprocessen, innan har programmet hämtat inmatningen från licensfilen (förmodligen med vanliga I/O API) sedan kommer ett stycke kod där storleken/längden på licensnyckeln kollas, är det korrekt fortsätter den till rutinen som kalkylerar fram ett giltligt serienummer som jämförs med det som finns i filen. Här sätts flaggan för det kommande TEST EAX,EAX.

Ovanstående kan skilja sig lite beroende på implementering men oftast ser det ut såhär. Standard varianten s.a.s

Det är alltså ett CALL ovanför TEST EAX,EAX du ska traca in i.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in