مضى على الشبكة و يوم من العطاء.
  • السلام عليكم ورحمة الله وبركاته، نرجوا كتابة طلبك او سؤالك باللغة العربية مع ارفاق صورة عن الخطأ او توضيح كافي للمشكلة.

[ غير مُجاب ] مساعدة في كسر برنامج

huntersliver

./عضو جديد

السمعة:

السلام عليكم ورحمة الله وبركاته

احتاج مساعده في كسر برنامج.
البرنامج مبني على بايثون و تم استخدام pyinstaller فيه و بناءه ك ملف واحد هو مكون من عدة ملفات بايثون ولكن في النهاية بعد التجميع exe واحد و شامل
طيب وين المشكله؟
1- لما احاول ابحث عن نصوص الموجوده في الواجهه ما تظهر لي ابد
2-بحثت بشكل يدوي ولكن ما وصلت لاي نتيجه

ولكن كل الي عرفته انه عمليه التحقق تكون ان البرنامج يرسل المعلومات الي دخلها المستخدم - والي هي فقط سيريال- الى api معين ويتم التحقق اذا كان السيريال موجود ام لا

هل فيه طريقه لكسره؟
ام مستحيل؟ ام مثلا فيه برامج مخصصه لهذه الامر لاني فقط جربت ida pro مع xd64 و باينري نينجا (:

-للعلم وصلت للسورس كامل؛ لذلك عندي المعلومات كلها لكن مارح يفيد لانه الهدف منه يفك تشفير ملف و ف اي وقت ممكن تغيير key في النسخ الجايه و مايكون عندي السورس الي يحتوي على key المستخدم-

البرنامج مع السورس كامل والخ : اضغط هنا للتنزيل
للعلم اني قاعد استهدف GameInstaller.exe لان عن طريقه يتم فك تشفير PlayInArabic.exe.enc الى PlayInArabic.exe

و حاب اضيف كذا كم معلومه على السريع
الهدف هو كسر .enc المشفر عن طريق AES لتحويله الى exe و الي قوم بهذه العمليه البرنامج الي قاعد استهدفه.

بعض المعلومات من السورس الي عندي :
تم استخدام خوارزمية AES مع وضع CBC (Cipher Block Chaining) لتشفير البيانات.
المفتاح المستخدم في التشفير يتم اشتقاقه من كلمة المرور عبر استخدام PBKDF2 مع salt ثابت.

تم استخدام PBKDF2 لاشتقاق المفتاح باستخدام كلمة المرور و salt ثابت. تم تحديد salt ثابت بالبايتات:

FIXED_SALT = b'\x2d\xb4\x6a\xe8\x9f\x13\xc5\x71\xf8\x2a\x4d\x17\x86\x5e\xb3\x99'
    • لملف المشفر يحتوي على IV (مصفوفة التهيئة) التي يتم قراءتها من أول 16 بايت من الملف.
    • يتم استخدام AES.MODE_CBC لفك التشفير، وهو يختلف عن أوضاع التشفير الأخرى حيث يعتمد على IV لتوفير أمان إضافي ضد تكرار النصوص.
  • التعامل مع التوسعة (Padding):
    • بعد فك التشفير، يتم إزالة التوسعة (Padding) باستخدام unpad من مكتبة Crypto.Util.Padding لضمان أن البيانات المستخلصة تطابق الحجم الفعلي للبيانات الأصلية.
  • تحقق من الملف بعد فك التشفير:
    • بعد فك التشفير، يتم التحقق مما إذا كان الملف المسترجع يبدو كـ ملف تنفيذي Windows عبر قراءة أول بايتين (والتي تمثل عادةً العلامة "MZ" في الملفات التنفيذية).

ان شاء الله تكون هذه معلومات جيده للمساعدة
 
التعديل الأخير:
  • Like
التفاعلات: BAYAN
ماعندي فكرة و بتمنى حدا يفيدك بس ممكن تستعين ب chatgpt?
مايفيد كل الي يحاول يقوله ان يبني ارجع الEXE للكود المصدري ثم ارجع ابنيه بعد التعديل !َ
او يسوي هجوم غاشم على الملف المشفر و يطلع كلمه السر و ذا بياخذ قرون , مع اني استخدم الPRO منه . ممكن احاول اسوي تزوير للرد الي جاي من API بس مدري ان شاء الله خير .

ع العموم مشكورة...
 
بصراحه ما قدرت استوعب ماهو هدفك او طلبك ..

جرب هذا Extractor اذا كان البرنامج يرسل الى api تتبع دوال requests
 
بصراحه ما قدرت استوعب ماهو هدفك او طلب
بصراحه ما قدرت استوعب ماهو هدفك او طلبك ..

جرب هذا Extractor اذا كان البرنامج يرسل الى api تتبع دوال requests
رح ارفق لك البرنامج مع السورس كود كامل مع كود api والخ مع dist فيه البناء و ملف للتجربه والخ: اضغط هنا للتنزيل (جبتهم من قيت هوب قبل يحذفوهم و اكيد رح يستخدمو نفس ذي الطريقه في السمتقبل لذالك اذا عرفت شلون اكسر ذا رح اقدر اعرف شلون اكسر اي اصدار في المستقبل...)

طيب حاليا الي قاعد يصير اني مو قادر اوصل لطريقه حق اخلي البرنامج يقبل اي سيريال لان مافيه شيء واضح.
للعلم انا قاعد استهدف GameInstaller.exe لان عن طريقه يتم فك تشفير PlayInArabic.exe.enc ليصبح PlayInArabic.exe و المشكله هي اني مو قادر اوصل لاي string او دلاله على عمليه التحقق على شان اعكسها و اخليها تقبل اي شيء غلط او اسوي لها jmp او الغيها اصلا ):
 
التعديل الأخير:
لو عطيتنا السورس افضل لان الملف حجمه كبير بعض الشي .. هل السورس موجود في قيت هوب .؟
اذا موجود عطنا رابط السورس حتى نقرء الكود
 
اولا البرنامج يجلب ال MAC ادرس الخاص بك
ثم يقوم بالاتصال بموقع مصمم بمكتبة FastAPI
ويتم الاتصال بقاعدة بيانات postgresql اسمها serial_db ثم يقوم بحفظ ال MAC ادرس الخاص بك بداخلها ويجلب السيريال ويحفظه في ال register في نظامك بكذا لا تستطيع تخطيه لان ال MAC الخاص بك محفوظ بموقعهم على العموم في طريقه اخرى بما ان بيانات القاعده موجوده

كود:
DATABASE_USERNAME = 'postgres'
DATABASE_PASSWORD = '1100' 
DATABASE_HOSTNAME = 'localhost'
DATABASE_PORT = '5432'
DATABASE_NAME = 'serial_db'

تحتاج معرفة ip الموقع والاتصال بالقاعده ..

ايضاً رقم 123456 هل هو كلمة سر لفك ملف .؟


شوف ال host مشفر قم بفكه حتى تستطيع الوصول بقاعدة البيانات

هذا الكود

Python:
import time
import psycopg2
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import Session
from contextlib import contextmanager
from datetime import datetime
import random
import string
from datetime import datetime  # at the top of your models file
from sqlalchemy import Column, DateTime



DATABASE_USERNAME = 'postgres'
DATABASE_PASSWORD = '1100' 
DATABASE_HOSTNAME = 'localhost'
DATABASE_PORT = '5432'
DATABASE_NAME = 'serial_db'

# SQLALCHEMY_DATABASE_URL = f'postgresql://{DATABASE_USERNAME}:{DATABASE_PASSWORD}@{DATABASE_HOSTNAME}:{DATABASE_PORT}/{DATABASE_NAME}'
SQLALCHEMY_DATABASE_URL = f'postgresql://postgres:[email protected]:53455/railway'

engine = create_engine(SQLALCHEMY_DATABASE_URL)
Sessionlocal = sessionmaker(autoflush=False, bind=engine)
Base = declarative_base()

class serialData(Base):
    __tablename__ = 'serial_database'  # Name of the existing table

    id = Column(Integer, primary_key=True, index=True)
    serial_number = Column(String, nullable=False)
    hardware_id = Column(String, nullable=False)
    game_name = Column(String, nullable=False)


class serialNumber(Base):
    __tablename__ = 'serial_number'  # Name of the existing table

    id = Column(Integer, primary_key=True, index=True)
    serial_number = Column(String, nullable=False)
    game_name = Column(String, nullable=False)
    email = Column(String, nullable=False)
    created_at = Column(DateTime, default=datetime.utcnow)
# Check if the table exists, and create it if not
def initialize_database():
    Base.metadata.create_all(bind=engine)

# Dependency

def get_db():
    db = Sessionlocal()
    try:
        yield db
    finally:
        db.close()


if __name__ == "__main__":
    initialize_database()
    print("Database initialized and tables created.")

في امور أخرى لم اقرء السورس وهذا الكود المهم


حاول تفك تشفيرة هذا
[email protected]

واعتذر منك لان ليس لدي كمبيوتر فقط هاتف شخصي ولا اريد ان اعبث به
 
اولا البرنامج يجلب ال MAC ادرس الخاص بك
ثم يقوم بالاتصال بموقع مصمم بمكتبة FastAPI
ويتم الاتصال بقاعدة بيانات postgresql اسمها serial_db ثم يقوم بحفظ ال MAC ادرس الخاص بك بداخلها ويجلب السيريال ويحفظه في ال register في نظامك بكذا لا تستطيع تخطيه لان ال MAC الخاص بك محفوظ بموقعهم على العموم في طريقه اخرى بما ان بيانات القاعده موجوده

كود:
DATABASE_USERNAME = 'postgres'
DATABASE_PASSWORD = '1100'
DATABASE_HOSTNAME = 'localhost'
DATABASE_PORT = '5432'
DATABASE_NAME = 'serial_db'

تحتاج معرفة ip الموقع والاتصال بالقاعده ..

ايضاً رقم 123456 هل هو كلمة سر لفك ملف .؟


شوف ال host مشفر قم بفكه حتى تستطيع الوصول بقاعدة البيانات

هذا الكود

Python:
import time
import psycopg2
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import Session
from contextlib import contextmanager
from datetime import datetime
import random
import string
from datetime import datetime  # at the top of your models file
from sqlalchemy import Column, DateTime



DATABASE_USERNAME = 'postgres'
DATABASE_PASSWORD = '1100'
DATABASE_HOSTNAME = 'localhost'
DATABASE_PORT = '5432'
DATABASE_NAME = 'serial_db'

# SQLALCHEMY_DATABASE_URL = f'postgresql://{DATABASE_USERNAME}:{DATABASE_PASSWORD}@{DATABASE_HOSTNAME}:{DATABASE_PORT}/{DATABASE_NAME}'
SQLALCHEMY_DATABASE_URL = f'postgresql://postgres:[email protected]:53455/railway'

engine = create_engine(SQLALCHEMY_DATABASE_URL)
Sessionlocal = sessionmaker(autoflush=False, bind=engine)
Base = declarative_base()

class serialData(Base):
    __tablename__ = 'serial_database'  # Name of the existing table

    id = Column(Integer, primary_key=True, index=True)
    serial_number = Column(String, nullable=False)
    hardware_id = Column(String, nullable=False)
    game_name = Column(String, nullable=False)


class serialNumber(Base):
    __tablename__ = 'serial_number'  # Name of the existing table

    id = Column(Integer, primary_key=True, index=True)
    serial_number = Column(String, nullable=False)
    game_name = Column(String, nullable=False)
    email = Column(String, nullable=False)
    created_at = Column(DateTime, default=datetime.utcnow)
# Check if the table exists, and create it if not
def initialize_database():
    Base.metadata.create_all(bind=engine)

# Dependency

def get_db():
    db = Sessionlocal()
    try:
        yield db
    finally:
        db.close()


if __name__ == "__main__":
    initialize_database()
    print("Database initialized and tables created.")

في امور أخرى لم اقرء السورس وهذا الكود المهم


حاول تفك تشفيرة هذا
[email protected]

واعتذر منك لان ليس لدي كمبيوتر فقط هاتف شخصي ولا اريد ان اعبث به
شكرا لك على وقتك و معلوماتك الجميله ما قصرت و تعبتك معي 🙏
 
تم ازالة الكود بسبب المعلومات الخاصه...
 
التعديل الأخير:

آخر المشاركات

فانوس

رمضان
عودة
أعلى