
ksydfius's The XOR Algorithm :)
Download ksydfius2.zip, 2 kb (password: crackmes.de) Browse contents of ksydfius2.zip cryptanalytic challenge
Difficulty: 1 - Very easy, for newbies | Send a message to ksydfius » View profile of ksydfius » |
Solutions
Solution by Reaper91, published 05. oct, 2012; download (40 kb), password: crackmes.de or browse.
Reaper91 has not rated this crackme yet.
Solution by ThePoolGuy, published 14. oct, 2012; download (25 kb), password: crackmes.de or browse.
ThePoolGuy has rated this crackme as quite nice.
Solution by whizz, published 19. sep, 2012; download (108 kb), password: crackmes.de or browse.
whizz has rated this crackme as quite nice.
Solution by bearchik, published 19. sep, 2012; download (4 kb), password: crackmes.de or browse.
bearchik has rated this crackme as quite nice.
The submission of solutions is closed.
Discussion and comments
bearchik 07. Sep 2012 | At first I solved this algorithm hands, but then saw that there 240 byte and wrote the program. sciense_m00nlight |
---|---|
nwert 07. Sep 2012 | easy one, science_m00nlight ;) |
ksydfius Author 07. Sep 2012 | congratulations! :D yes, too easy, the algorithm is very very weak :) maybe i should have made it so that u only have the ciphertext to make it a bit harder... oh well ;) btw moonlight is the song where i got that plaintext from |
yolila 11. Sep 2012 | Seriously, I have just finished my first crackme job. thank you, ksydfius! |
archx 12. Sep 2012 | im a complete noob to this, lol still suck on this. Any hints? |
ksydfius Author 13. Sep 2012 | u can do it by hand ;) no coding necessary very basic understanding of XOR is all u need |
Dr. Cat 14. Sep 2012 | We go about our daily lives understanding almost nothing of the world. Few of us spend much time wondering why nature is the way it is; where the cosmos came from;... why we remember the past and not the future; and why there is a universe. |
andrewl.us Moderator 14. Sep 2012 | Please submit a small tutorial, Dr. Cat. |
nadav12456 17. Sep 2012 | does the encrypted data is in the correct format? cause writing some decryprion script failed to match one letter foreach password letter |
kingdeking 17. Sep 2012 | Can you post a solution. I am very interested in it since I am stuck writing a decryption program. My problem is the way the encryption algorithm calculates its next offset k that is added after xor: k = (unsigned int)Result[i] % (unsigned int)32; //0x20 Since it is modulo 32 I fail to tell which "k" is associated with which "i" (obviously there are multiple i's to each k since the length of the encryption key is 240). Any tips? |
nadav12456 17. Sep 2012 | thats true, multiple i's, but... if you loop over the i's, there is only one k it was encrypted with, at the step of the ENCRYPTION, so ive recreated the encryption part, computing k, for each step, which is depends only on i, (given the encrypted data...)... then you can reverse the encryption stage... but, well, it didnt work, so maybe im missing something simple here, a bit annoying. |
kingdeking 17. Sep 2012 | Yes, I have done that at first aswell but I run into the same problems. Since you write Solution[k] now for every i you dont avoid generating the same k in different i-Iterations. You end up writing to Solution[k] multiple times. |
kingdeking 17. Sep 2012 | Or can you show me your code? Maybe I just miss something. |
whizz 18. Sep 2012 | Submitted a simple explanation and some Java code to generate key. #Lazy enough to do it by hand. :) |
nadav12456 18. Sep 2012 | kingdeking, it sould generate the same solution at each ime... but it doesnt, for me, so it strange... if i try encrypt something else, it does ok, python code: enc_data = [ord(i) for i in open(enc_data_path,"rb").read()] real_data = [ord(i) for i in "We go about our daily lives understanding almost nothing of the world. Few of us spend much time wondering why nature is the way it is; where the cosmos came from;... why we remember the past and not the future; and why there is a universe."] passw = [[] for i in range(0x20)] for i in range(len(enc_data)): mod_sum = sum([enc_data[j] for j in range(i)]) % 32 passw[mod_sum].append(((enc_data[i]-mod_sum) % (256)) ^ (real_data[i]%256)) |
kingdeking 18. Sep 2012 | Allright I solved it. The truth is, even if we write multiple times to Solution[k] it doesnt matter because it will fill Buffer[k] just with the exact same content again. "Great job if you can read this message then you are well deserved :) The answer is sience_m00nlight" And the Ascii output in ollydebug is different from console output, retarded! |
kingdeking 18. Sep 2012 | Btw Nadav, I dont really get how you calculate your next k. All you have to do is: k = (unsigned int)Result[i] % (unsigned int)32; //0x20 |
nadav12456 18. Sep 2012 | Damn, i havent noticed the xor ebx,ebx at the end of some function, made me think ebx (or k in your implementation) is sum of encrypted data up to the current index... so, it didnt work, ill try again, with some valid k... Nadav. |
xmk99 19. Sep 2012 | no plaintext and ciphertext found in the zip |
kingdeking 19. Sep 2012 | lmao. Its embedded in the executable of course. |
ksydfius Author 19. Sep 2012 | very nice tuts guys, thx! |
SandboxEscaper 21. Aug, 21:40 | Very nice crackme. I wrote this on the go while reversing should anyone be interested: http://thomas-vanhoutte.blogspot.be/2016/08/crackmesde-solutions-2-analysis-of-xor.html Its a bit chaotic and rushed towards the end, but maybe it is useful to someone ;). (ps: I'm really bad at math, so forgive the lack of fancy formulas) |
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.