home *** CD-ROM | disk | FTP | other *** search
- ________________________________________
- / "Quest for a REAL serial" \
- .:how to crack Ubique.Daemons crackme #1:.
- \___________^heiko[BLiZZARD]_____________/
-
-
- Crackme name: CrackMe #1
- Crackme by: Ubique.Daemons
- Date: 4/28/2000
- Type: Serial (VB)
-
- Toolz: Smartcheck v6.03
- NO hexeditor ;-)
-
- hi folks,
-
- KaMiKaZe [AmoK] did a good job by patching 'Ubique.Daemons crackme #1'
- (read his tutorial). But it seems like he was in a hurry!?
- Patching this crackme solves it (its a "CRACKme"), but i think that's
- not the maximum we can learn from this crackme. Patching is
- the most fastest way to defeat a target, right, but i prefer the next
- (higher) level: reversing it! there's a serial, so there must be an
- algorithm which calculates it!
-
- Lets try to find and reverse it, leave your hexeditorz alone and
- join me at my:
-
- *************************
- "Quest for a REAL serial"
- *************************
-
- Start the crackme and enter the info you like most, i used:
-
- serial: 11223344
-
- now click on the "CHECK the serial"-button...Hrmm, it says:
-
- "No, thats not right", hehe, k, we lost, but not for long, promised!!
-
- Start Smartcheck and open the crackme.
- make sure that you had choosen the following settings:
-
- error detection: all checked
- \-> "Advanced" all checked, except the last three
- reproting: all checked, except "perform analysis of handeld vb ..."
-
- run the program and confirm all error messages till "crackme #1" pops up!
- enter '11223344' as serial and press "Check the serial".
- goto smartcheck and end the program.
-
- select "show errors and specific events" and click on "_click" for highlighting
- that line. now select "show all events". expand the branch by clicking on the +.
- scroll down the tree until you see something like this (by clicking on the line
- you get the corresponding values in the right window of smartcheck):
-
- <snipp>
- __vbaVarMul <- multiplies two values: '11' * '33'
- __vbaIndexLoad <- not really important
- __vbaVarMul <- multiplies two values: '3' * '22'
- __vbaVarSub <- substracts two values: check pVar and lpSrc! the same
- __vbaVarLoad > as the returned addresses of the two multiplications:
- __vbaVarLoad > conclusion: the results will be substracted '363' - '66'
- __vbaVarMul <- multiplies two values: '22' * '44'
- __vbaVarLoad
- __vbaVarMul <- multiplies two values: '3' * '44'
- __vbaVarAdd <- adds two values: '968' + '132' , results of last 2 multis.
- __vbaVarCmpEq <- compare two values: '297' = '1100', hrmm, here it checks
- __vbaVarLoad > the value of the substraction against the addition.
- __vbaVarLoad > feel it?? we have to make them epual!!! but theres more:
- __vbaVarAdd <- adds two values: '11' + '44'
- __vbaVarLoad
- __vbaVarLoad
- __vbaVarMul <- multiplies two values: '33' * '2'
- __vbaVarAdd <- adds two values: '22' + '66'
- __vbaVarCmpEq <- compare '55' with '88', result values of last 2 additions
-
- <snipp>
-
- +MsgBox <- show looser messagebox :(
-
-
- stop! its now time to start your brain. read the above lines again and
- think about it. can you feel it????
- what have we got?
- 9 mathematical calculations (like *,+,-) and 2 compares (conditions) that
- are not 'positiv' (not equal) with mystical values ('11','22','33','44')
- that look really like the 'cutted' entered serial.
-
- Do you think the same ???
-
- Yeah, here our serial is checked. there are two conditions, which we have
- to satisfy! (with the hope the resulting msgbox will be a bit friendlier! ;)
-
- lets try to find some equations with the assumption that our entered serial
- will be handled in parts like this :
-
- '11' '22' '33' '44'
- => a b c d
-
- equations:
-
- (one): a * c "__vbaVarMul"
- (two): 3 * b "__vbaVarMul"
- (three): (one) - (two) "__vbaVarSub"
- (four): b * d "__vbaVarMul"
- (five): 3 * d "__vbaVarMul"
- (six): (four) + (five) "__vbaVarAdd"
- (seven): a + d "__vbaVarAdd"
- (eight): c * 2 "__vbaVarMul"
- (nine): b + (eight) "__vbaVarAdd"
-
- our conditions : (three) = (six)
- (seven) = (nine)
-
-
- Did you get everything? take the time to read it again..and again..
- till you see the light! ;-)
- After i had all the equations and conditions i tried to solve it
- by guessing some values and fill the others depending on the
- equations. hrmm, i fucked up.
- its much easier to write a simple 'bruteforce' to find working
- values. i coded a procedure in delphi, you should be able to
- follow what it does:
-
- <start-of-pascal-code>
-
- procedure TForm1.Button1Click(Sender: TObject);
- var a,b,c,d,one,two,three,four,five,six,seven,eight,nine:integer;
- begin
- for a:=1 to 99 do begin <- range of a two digit number!
- for b:=1 to 99 do begin
- for c:=1 to 99 do begin
- for d:=1 to 99 do begin
- one := a * c;
- two := 3 * b;
- three := one - two;
- four := b * d;
- five := 3 * d;
- six := four + five;
- seven := a + d;
- eight := c * 2;
- nine := b + eight;
-
- if (three = six) and (seven = nine) then <- conditions satisfied?
- begin
- edit1.text:=inttostr(a)+inttostr(b)+inttostr(c)+inttostr(d);
- break;
- end;
- end;
- end;
- end;
- end;
- end;
-
- <end-of-pascal-code>
-
- i started my little application, pushed my button and...
- after some time a number appeared:
-
- "95654560"
-
- enter this into the crackme... a nice little messagebox pops up:
- "Yeah, thats a right one!" hehehe. we won!
-
- You did it, WITHOUT a need to patch, only with ZEN and brain! ;-)
-
- Now its your turn...are there more working serials??
- Iam to tired now...;)
-
- Send me your comments and keygens!
- Hope you learned something by this tutorial...
-
- hAVE pHUN'! ^heiko[BLiZZARD]
- mail: heiko@blizzard.st
-
- 06/28/2000 - gREETZ to aLL @ BLZ!! STEALTHLABS !! TheoTraXX !!
-
-
- ...end of tutorial...
-
-