downloadbrowseXzzX's XzzX#CrackMe4

Download XzzX-CrackMe4.zip, 52 kb (password: crackmes.de)
Browse contents of XzzX-CrackMe4.zip

*******************************************
************** XzzX#CrackMe4 **************
*******************************************

author : XzzX
created : 11/07/2007
language : Assembler / MASM

difficulty: 5/10

goal : write a keygen, which works for EVERY name

rules : absolutly no patching ;-)

info : CrackMe is solvable ;-)

You have to solve a first problem to get the CrackMe running!!!

If you encounter a problem/bug/question/etc feel free to write a comment or send me a pm.

Please send me your solution when you've solved it. ;-)

Tested under WinXP SP2 but it should work with every windows.

gl&hf
XzzX

Music : "Sun Symbolizing Song" by nitzer

Difficulty: 5 - Professional problem to solve
Platform: Windows
Language: Assembler

Published: 27. Jul, 2007
Downloads: 638

Rating

Votes: 5
Crackme is quite nice.

Rate this crackme:

Send a message to XzzX »

View profile of XzzX »

Solutions

Solution by alex_ls, published 08. sep, 2007; download (104 kb), password: crackmes.de or browse.

alex_ls has rated this crackme as quite nice.

Solution by red477, published 08. sep, 2007; download (25 kb), password: crackmes.de or browse.

red477 has rated this crackme as awesome.

Submit your solution »

Discussion and comments

cobrasniper555
28. Jul 2007
I've got the key.dat down, and the md5 usage. Now I just need to figure out the rest of the algorithm. If I was wrong about something, it would be that there is no md5 implementation in this crackme, but PeID showed me in KryptoAnalyzer. How much on track am I?
XzzX
Author
28. Jul 2007
If you get the crackme running you solved the first stage.
@md5: I don't know. ;-)
HMX0101
28. Jul 2007
Its really solvable?

((a xor 0xAB459D9A)*0xA647) + ((b xor 0x3FB5988A)*0x22CF6) + ((c xor 0xABBBAA9A)*0x1074 + (d xor 0x2BE59D46)*0x17293 = Sum name chars

This can't return a value lower than 0x0FFFFFFF, so its a trick or a bug? I hope you think its first one ;)
MR.HAANDI
28. Jul 2007
Indeed it can, because the eax is used after imul.
E.g. 0xA647 imul 0xFD12377 = 0x00000001.
But I don't know whether it is planned or the author just typed in some random values, but 0x6FBD6=457686 and it is even, which is bad for the finite field linear system!
TiGa
28. Jul 2007
Since when can you solve a 4x4 matrix system like this using only integers?
KernelJ
28. Jul 2007
I haven't tried this crackme yet, but surely there would be a fair number of solutions to that equation. Or are there limits on a, b, c, d?
cobrasniper555
28. Jul 2007
I've solved it, and I think it isn't really a 5 on the scale. I'm making a tutorial right now, I have a keygen and everything if you want it, XzzX.

Thanks for the crackme.
Haykuro
28. Jul 2007
blah i need a little help, i figured out how to pass the check for the comparison text on the file, but when it does the second or check on ebx, it sais its wrong... helppp?
MR.HAANDI
28. Jul 2007
Check out the GetFileAttributesA API which is called shortly before.
TiGa
28. Jul 2007
@cobrasniper555:

Did you get the GoodBoy MessageBox or the "Registered to: Name" message?
TiGa
28. Jul 2007
I think it could spawn a philosophical discussion: If a fake algo is solvable, is it still called a fake algo? ;)
Haykuro
28. Jul 2007
YAY! solved the keyfile check routine, i was missing 1 attribute :P
MR.HAANDI
28. Jul 2007
NOOOOOO! Since hours I reverse the finite field linear system and this is supposed to be the fake algo??? Hey but I still got a "Congratulation! You solved it!" for some names, but not for all.
TiGa
28. Jul 2007
From the description above:

goal : write a keygen, which works for EVERY name
info : CrackMe is solvable ;-)
TiGa
28. Jul 2007
When i solved the matrix for my name, the answers weren't integers. So I started looking elsewhere.
Haykuro
28. Jul 2007
BLAH fake algo?!?!!? arggghh!! i wasnt paying attention to comments and i was going insane trying to figure out why i wasnt getting registered message.
Ox87k
28. Jul 2007
I don't see this keygenme 'coz i've no time now but reading the comments:

E.g. 0xA647 imul 0xFD12377 = 0x00000001.

This part seems to be like Euler'stotient function ;)
red477
29. Jul 2007
working on it;)
and yes, the real algo is so deep inside:D
XzzX
Author
29. Jul 2007
i wasn't online for one day. sorry. i never had so much comments on one of my crackmes.

as you found out the equation system is fake. the main factor matrix is very big number. to get a solution for every name it has to be 1 - obviously not the case.
i tried to make this clear by stating "EVERY name" but perhaps i should have made it clearer.

as TiGa already said for a proper solution you need to get the "Registered to: <name>" message.

@cobrasniper555: send me your solution for two names and i'll believe you.

@MR.HAANDI: you got some working names/serials? i thought it would be only possible for some strange ones. please send them to me.

@all comments: sorry for my late answer

have a good day
XzzX
MR.HAANDI
29. Jul 2007
Today I let your crackme's fake algo inpire my for my own keygenme (which is not that easy to solve btw). It should appear soon on crackmes.de ;)
And that is one of the reasons why I can't tell you some working combinations for the fake algo.
But still a hint: How do you solve a 4x4 system? You divide the coefficents, so they become 1. What if you could multiply the coefficents like e.g. 0xA647 imul 0xFD12377 = 0x00000001, so they become 1 without making the system inconsistent.
XzzX
Author
31. Jul 2007
I thought about the "fake" equation system. Perhaps it is really solvable with integer overflows. I didn't think that far. I just thought almost all results will be floating-point numbers -> not solvable.
What do you think?
@MR.HAANDI: how did you find 0xA647? I don't have much experience with mod operations.
MR.HAANDI
31. Jul 2007
Talking about this weakens my first crackme protection. Nevertheless here is a full explanation: en.wikipedia.org/wiki/Modular_multiplicative_inverse.
KernelJ
02. Aug 2007
Still no solutions for this??
TiGa
02. Aug 2007
@KernelJ: Still no solution for this??
XzzX
Author
02. Aug 2007
perhaps it is too hard ;-)
in the end I have to write a solution myself ...
cobrasniper555
07. Aug 2007
I swear I'm so close to finishing this...
KernelJ
07. Aug 2007
@Tiga: I never started doing this one. I was too busy doing MyVM#1.
@XzzX: ditto what you said... lol
XzzX
Author
14. Aug 2007
Is anyone still trying to solve it?
cobrasniper555
16. Aug 2007
Ya, I found the real encryption algo, how it appears before use and "disappears" after use. Use lazy to reverse the floating point instructions though...
leotr
17. Aug 2007
XzzX, do you still evaluate difficulty of this crackme as 3
XzzX
Author
17. Aug 2007
3? It is rated 5.
I think 5 or perhaps 6 is correct. But I didn't want to overrate it as I did with my first one. ;-)

@cobrasniper555: I'm waiting for a solution. ;-)
cobrasniper555
18. Aug 2007
Lol, XzzX, this algo man...you're something else.
XzzX
Author
20. Aug 2007
It isn't as hard as it looks like. ;-)
11/16 are easy. The rest is a little bit more complicated. :-D
alex_ls
07. Sep 2007
Has anybody solved this crackme already?
I've coded keygen that works for every name with the EVEN length. The system has collisions with overflows when the right part of equation (vector b) consists in the convergence parity of the numbers (b1-even,b2-odd,b3-even,b4-even)(Sum of evens doesn't equal sum of odds)
In my case the system is solvable when the evens equal odds of the vecor B numbers, So If it's not so, I just added the space (0x20) to the end of the name and system is getting solvable! I wanted to write a solution but I may wrong with this conclusions.
XzzX: give some info about this stuff please.
XzzX
Author
07. Sep 2007
Sorry I can't follow you.
I'm not a native speaker.
Please leave me a more detailed pm. ;-) I'm interested in your solution.

But I think you're talking about the "fake"-algo.
I didn't think about these overflows by the time of writing this crackme. I should spend more time in writing my fake algos. ;-)

I'll accept a solution for the "fake" algo aswell. Although you miss the real fun. ;-) A solution covering both would be really nice. But I'm not sure if the "fake" algo can be solved. *lack of maths* ;-)
alex_ls
08. Sep 2007
XzzX: Ok! I'll try to write a solution.
red477
08. Sep 2007
alex_ls, wow, interesting solution. I like it. Absolutely another way.

@XzzX, I forgot to mention the OutputDebugStringA, because I changed the entry point before analysis. And the "Sun Symbolizing Song" is so nice that I enjoyed it for a whole night;)
XzzX
Author
09. Sep 2007
Congratulation to both authors.
I got to different solutions for one crackme. ;-)

@alex_ls: I'll study your solution since I don't know how to solve it.

@read477: Nice solution - everything mentioned.
Unfortunately I found a bug in my "real" algo. If you input a name which xor-sum is 0 you get an unhandled fpu-div0-error which makes it unsolvable. :-(
But since it would make your keygen not working anymore I won't patch it. You can simply circumvent it by adding one more space.

Solved after one month -> next target two months ;-)
alex_ls
09. Sep 2007
@XzzX:I have fallen in your trap with the fake algo 2-3 weeks ago, but after working with Solvet1 by MR.HAANDI I had an idea how to perform the system without the modular arythmetic. Well, I returned to this task. (the real algo I've not figured out yet. )
Very good job man!

@Red477: Thanks for the real algo solution, I just now understood the whole idea of this crackme:)

You may leave your comment, thoughts and discuss this crackme with other reversers here.
Acting childish will not be tolerated.
HTML and such will be left as-is, so don't try.