تحليل تطبيق اندرويد

عمل هندسة عكسية لتطبيق android باستخدام اداة jadx gui

M7md1337منذ 3 سنوات

السلام عليكم 

خير بداية الصلاة عليه اللهم صلي وسلم على نبينا محمد 

اللهم يا معلم موسى علمني ويا مفهم سليمان فهمني
ويا مؤتي لقمان الحكمه وفصل الخطاب اتني الحكمه وفصل الخطاب
اللهم إني أسألك فهم النبيين، و حفظ المرسلين

اول مقال لي ان شاء الله ينال على الاعجاب 

راح نحل تحدي صالح  

https://twitter.com/0xHunter/status/1307424269153034242

 المطلوب عمل سكربت تخمين لتسجيل الدخول باي لغه انا راح استخدم البايثون 

نحمل التطبيق ونسوي له تحليل او  هندسه عكسيه باستخدام اداة jadx gui او اي اداة تسوي لك decompile  

بنحصل كلاس بالاسم LoginActivity

 

راح نلاحظ رابط لتسجيل الدخول 

https://www.see-me.info/0xhunter/signin.php والمتغيرات username,password,timestamp,sign 

نجرب نعطي كل متغير قيمة ,متغير الtimestamp راح يكون بالtimestamp والsign غير معلومه بكذا راح اتركها فاضية وارسل الطلب اجرب 

curl "https://www.see-me.info/0xhunter/signin.php?username=testd&password=test&timestamp=1600626788&sign=dd"

 

الرد من السيرفر

{"status":false,"message":"Nice try :)"}

فيه اشكالية لان الرد لازم يكون احدى الامرين يا login successfully او invalid credentials #راجع الصورة السطر 68-72

خلونا نشوف قيمة الsign كيف نقدر نجيبها نرجع للكلاس #راجع الصورة السطر 44-49

بنلاحظ انه ياخذ 

username+password+timestamp+YouCaughtMe ويسوي لها هاشينق بالmd5  

نجرب 

  • username=admin
  • password=12345
  • timestamp=1600626788
  • YouCaughtMe

admin123451600626788YouCaughtMe

اسويلها هاشينق بالmd5 راح يطلع معي cf916ddc2299e89c4d35f3e7a0368d4f  هذي راح تكون قيمة الsign 

نجرب نرسل مع تعويض كل قيمه فالمتغير 

curl "https://www.see-me.info/0xhunter/signin.php?username=admin&password=12345&timestamp=1600626788&sign=cf916ddc2299e89c4d35f3e7a0368d4f"

الرد من السيرفر 

{"status":false,"message":"invalid credentials"}

تمام تغير الرد عن الرد السابق مما يعني ان الطريقة ناجحة  الغلط اما اسم المستخدم  ام الباسورد الان عرفنا الحل يتم تشفير قيم التغيرات بالmd5 ويتم ارسالها مع الطلب 

نبرمج بالبايثون سكربت يقوم بالعملية\

import requests
import time
import hashlib 

username = "test"
password = open("ss.txt").read().splitlines()
time = int(round(time.time() * 1000))
secret = "YouCaughtMe"
for gg in password:
	sign = hashlib.md5(str(username)+str(gg)+str(time)+str(secret)).hexdigest()
	headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0)','Host': 'www.see-me.info'}
	brute_force = requests.get("https://www.see-me.info/0xhunter/signin.php?username="+str(username)+"&password="+str(gg)+"&timestamp="+str(time)+"&sign="+str(sign)+"", headers=headers)
	#print(brute_force.content)
	if "login successfully" in brute_force.content:
		print("cool password is "+gg+"")
	elif "invalid credentials" in brute_force.content:
		print("password "+gg+" incorrect")
	else:
		print('somthing wrong')

استخدمنا ثلاث مكتبات 

عينا قيمة لاسم المستخدم باسم test 

استخدمنا for من اجل عمل loop على عدد الاسطر في الملف ss.txt

 داخل الloop مع كل عملية ارسال طلب يتم تشفير القيم بالmd5 

فالنهاية شرط يتحقق من الرد من السيرفر 

وبكذا عملت سكربت تخمين اذا فهمت الية عمل الموقع بامكانك تخطي الحماية اياً كانت

ان شاء الله يكون الشرح واضح ومفهوم …

وفالختام إن أحسنت فمن الله، وإن أسأت أو أخطأت فمن نفسي والشيطان 

كلمات دليلية: android java python
0
إعجاب
1035
مشاهدات
0
مشاركة
1
متابع

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !