| Find the pass |
lfanew |
Program takes a string from user, hashes value and compares to the expected hash at 00405064 - "pcx|xpzlhgu}"
Two things stood out to me in this challenge.
#1 - The compiler optimization for division.
004014b1 ba67666666 mov edx, 0x66666667
004014b6 89c8 mov eax, ecx
004014b8 f7ea imul edx
004014ba c1fa02 sar edx, 0x2
The above code is equivalent to simply dividing edx by 10, or (edx / 10).
The reason for this has to do with a compilers affinity for working in powers of 2's and the cost of the division instruction.
A good read on this can be found at: http://blog.dkbza.org/2007/09/reverse-engineering-compiler-produced.html
A good reference on these operations can be found at: https://flaviojslab.blogspot.com/2008/02/integer-division.html
#2 - Using an unnecessarily large buffer
00401472 8b4508 mov eax, dword [ebp+0x8 {pass}]
00401475 890424 mov dword [esp {var_6c_1}], eax
00401478 e88b270000 call strlen
0040147d 8945ec mov dword [ebp-0x14 {var_18}], eax
00401480 8b45ec mov eax, dword [ebp-0x14 {var_18}]
00401483 c1e002 shl eax, 0x2
00401486 890424 mov dword [esp {var_6c_2}], eax
00401489 e8da270000 call malloc // make the hashed password buffer 4x bigger
The above code shows that the program gets the length of the password. We then allocate memory to that length shifted left 2 times.
At first I wasn't sure of the purpose of why the developer did this until the end of the hashing function.
0040149a mov eax, dword [ebp-0xc {i}]
0040149d lea edx, [eax*4] // store i * 4, aka i shifted left by 0x2
004014a4 mov eax, dword [ebp-0x18 {offsets}]
004014a7 lea ebx, [edx+eax] // ebx now holds offsets[i*4]
004014aa call rand
004014af mov ecx, eax
004014b1 mov edx, 0x66666667
004014b6 mov eax, ecx
004014b8 imul edx
004014ba sar edx, 0x2
004014bd mov eax, ecx
004014bf sar eax, 0x1f
004014c2 sub edx, eax
004014c4 mov eax, edx
004014c6 shl eax, 0x2
004014c9 add eax, edx
004014cb add eax, eax
004014cd sub ecx, eax
004014cf mov edx, ecx
004014d1 mov dword [ebx], edx // store the current offset at offsets[i*4]
004014d3 add dword [ebp-0xc {i}], 0x1
I believe the reason for this is just throw a bit of confusion to the reverser.
This way there will be 4 junk bytes between each hash offset in memory and will no longer be contiguous in memory.
Conclusion: Other than those two things it just has a bit of math for the hashing function to get the offsets. I hope this read helps you :)
|
2021-05-10 05:39 |
View |
| Easy Crackme |
DirkD |
I had fun with this quick easy challenge , i used ollydebug 1.10 :)
I've included a pdf writeup with some screenshots. |
2021-05-09 08:57 |
View |
| genme by cry971c |
mpwastaken |
|
2021-05-07 21:02 |
View |
| My_first_ever_crackme |
bimkos |
Simple and interesting! |
2021-05-06 21:38 |
View |
| Peach's crackme |
ezb2661 |
|
2021-05-06 13:43 |
View |
| VERY EASY VERY SIMPLE C CODE |
Ralkey |
my solution to get the password in a .PDF file
with pictures :) |
2021-05-05 16:54 |
View |
| glow wine [keygen practice] |
shaybl569 |
Python simple keygen |
2021-05-05 14:14 |
View |
| guild hall adventure Ch.2 |
Shadorain |
What a fun crackme! Here is my solution in markdown, if you would rather a rendered version on a pretty site here is a link: https://shadorain.github.io/blog/Security/Reversing/Crackme_gha2. Hope you enjoy! |
2021-05-05 14:08 |
View |
| insane password checker |
pranav |
A good crackme, eventhough it had too high difficulty rating. Was fun cracking it and making keygen especially. |
2021-05-03 17:56 |
View |
| crack me idiot 2 |
sorting |
Rename dnSpy.exe to somthing else |
2021-05-03 17:22 |
View |
| keygenme1.blzbb by blzbb |
m4syuka |
rekt |
2021-05-01 22:45 |
View |
| My_first_ever_crackme |
D4RKFL0W |
|
2021-05-01 17:21 |
View |
| crackme_1 by weeman3005 |
m4syuka |
done |
2021-05-01 11:56 |
View |
| BruteForceMe |
pranav |
A good one for a Level 1 crackme |
2021-05-01 11:38 |
View |
| Look Closer |
pranav |
Fantastic crackme, no doubt! I was finally happy to solve a good crackme after a long time! |
2021-05-01 03:35 |
View |
| very easy hardcoded |
Nosiume |
Just my solution on this channel, scroll directly to the bottom to skip all the explanations of how I analyzed this binary ! |
2021-04-29 13:07 |
View |
| jumpjumpjump |
redkage |
Found it using Cutter + IDA. Mostly IDA for debugging and checking the cmp values to understanding what was going on. And Cutter to decompile and have a better overall view of the program. Solution and explanations attached |
2021-04-28 13:09 |
View |
| easy_reverse |
redkage |
Used Cutter for disassembly |
2021-04-28 11:51 |
View |
| guild hall adventure Ch.1 |
Shadorain |
What a fun crackme! Here is my solution in markdown, if you would rather a rendered version on a pretty site here is a link:https://shadorain.github.io/blog/Security/Reversing/Crackme_gha1. Hope you enjoy! |
2021-04-26 01:23 |
View |
| Crackme_OF |
bimkos |
|
2021-04-25 18:15 |
View |
| Crackme not main |
Shadorain |
What a fun crackme! Tricky one as well! Here is my solution in markdown, if you would rather a rendered version on a pretty site here is a link: https://shadorain.github.io/blog/Security/Reversing/Crackme_CNM. Thanks! |
2021-04-25 15:13 |
View |
| crypto_namecompanyserial_keygenme by c0dehaz4rd |
ToMKoL |
Funny crackme. Quite interesting to play with. |
2021-04-25 10:25 |
View |
| easyAF |
Shadorain |
Here is a simple solution for this simple crackme, should be explained well. If you want a rendered markdown pretty solution: https://shadorain.github.io/blog/Security/Reversing/Crackme_easyAF |
2021-04-23 02:31 |
View |
| unlockme |
NobitaNobi |
I made a KeyGen for it. For info, Just XOR the given array inside binary.
Chears!! |
2021-04-22 21:55 |
View |
| crackme |
GaneshG |
Did not understand ALL the code, but managed with some luck.
Hack: If name is single character then key == 0.
.py file takes name and spits out code |
2021-04-20 20:12 |
View |
| nasm crack |
Shad0wCloud |
Yep, that was easy, just look up for &passwd in pseudocode |
2021-04-20 13:14 |
View |
| easyAF |
GaneshG |
Markdown.
"": Commands typed into terminal |
2021-04-20 12:02 |
View |
| crackme |
ori0n.x3 |
A detailed write-up and a keygen in Python |
2021-04-18 23:10 |
View |
| Basis static |
agarmash |
|
2021-04-18 18:42 |
View |
| crackme |
Sm9l |
|
2021-04-18 15:06 |
View |
| KataVM -- Level 1 |
jeffli6789 |
This is an excellent crackme! Thanks! |
2021-04-18 07:51 |
View |
| Keyg3n_M1#1 |
Shad0wCloud |
Here's my solution.
.
.
.
Basicly, u need to debug this code and watch what happens with variables.
The tricky one is that in first "if" we compare with hex 0xA (10 in dec), but then, in second "if" we sum up "v3" with decimal. So, that's all. Very nice for beginner. |
2021-04-17 19:55 |
View |
| My_first_ever_crackme |
NobitaNobi |
|
2021-04-17 09:04 |
View |
| Basis static |
Thanathot |
Open file in hex editor or with the strings command in linux
strings basic_static.exe strings.txt
search the strings for CTF will result in:
CTF{Y0U_d1D_1t_n1C3} |
2021-04-16 16:08 |
View |
| lockcode |
NobitaNobi |
Make sure you enter escape characters if required... Enjoy! |
2021-04-16 08:09 |
View |
| Crackme_OF |
ori0n.x3 |
|
2021-04-16 03:32 |
View |
| Basis static |
ori0n.x3 |
|
2021-04-15 17:34 |
View |
| My_first_ever_crackme |
strngl |
|
2021-04-15 14:28 |
View |
| My_first_ever_crackme |
ori0n.x3 |
|
2021-04-15 02:39 |
View |
| easy_reverse |
oracle |
first solution |
2021-04-14 12:07 |
View |
| 0verney |
internaut401 |
github link: https://github.com/Internaut401/CTF_Public_Writeup/blob/main/crackmes.one/0verney.md |
2021-04-12 23:50 |
View |
| SecureSoftware v1.5 |
giacomo270197 |
The solution to the main question of the crackme |
2021-04-10 16:10 |
View |
| CrackMe2 - Classical cipher |
MrNatas |
Thanks for the crackme! This is my first writeup and I hope it is up to par. |
2021-04-10 00:14 |
View |
| SanSuu |
rDFDyYI |
there is no keygen in my solution, but there is a little explanation and 2 manually-calculated valid serial numbers |
2021-04-07 14:52 |
View |
| Basis static |
jerrycashmoney |
1. Open the file in a debugger.
2. Find the ASCII string starting with "CTF" |
2021-04-07 13:51 |
View |
| simple overflow |
bimkos |
Simple and interesting. |
2021-04-06 18:42 |
View |
| crackme |
bimkos |
gcc -o crack crack.c && ./crack |
2021-04-06 10:12 |
View |
| Crackme_OF |
strngl |
|
2021-04-05 18:55 |
View |
| chrisK's crackme v03. Try it, it's not that hard ! |
mstik13 |
Tools used: IDA, Cheat Engine, Reclass.
1. Keygen hpp and cpp.
2. Exaplanation File txt with key.
3. Flowchart Easy to Read |
2021-04-04 02:22 |
View |
| crackme_you_sh**t v2 |
Danielix |
i found that in your main you were checking username with the result of the function "crfcaewxsed(str)", simply that function is itself the keygen |
2021-04-03 18:29 |
View |