Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How would a python program check its own md5sum?

I was playing a game about a year ago. Wanting to speed it up a bit, I edited the main .py file and added psyco to the very beginning. The game ran faster and better, but it would not let me send my scores. I went into the file and it was checking its own md5sum. The part that confused me is that they had its md5 in the file. My question is, how do I get the md5 of a file with the sum of the file including the md5 I don't have yet. Seems a catch 22 to me, but they did it.

Hope I explained that well enough. Example:

File: Example.example

check md5 of Example.example
If md5 I just obtained == "###################################"
allow send score.
like image 696
Patrick Avatar asked Sep 12 '26 23:09

Patrick


1 Answers

You can't (easily) embed an MD5 of a program inside the program that it is computing the MD5, because when you change the MD5 of that you are embedding, the program's MD5 changes. Loop for a while and eventually you may reach a stable point. Then again, you may not. "a while" typically means 2^128 steps, so that's going to be a very long while --- like after the sun becomes a red giant.

So there's a trick. When the program computes its own MD5, it specifically recognizes where the embedded MD5 is located and uses a set value, like all NULLs.

To make it harder for hackers, don't use all NULLs --- use a SALT value. Obfuscate that value in your binary. Now it will be harder for people to edit the embedded MD5 and "fix" it after they have edited your program.

like image 59
vy32 Avatar answered Sep 14 '26 11:09

vy32



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!