• 0
zop2010

ما هي كيفية حماية تطبيقات جافا الخاصة بك من السرقة والعبث قانون

سؤال

الي اعضاء المنتدي الغاليين

تحية طيبة وبعد

برجاء التكرم من الاعضاء في معرفة اذا كان هناك طريقة احافظ بها علي حقوق الملكية الفكرية او بمعنا حماية تطبيقات جافا الخاصة بك من السرقة والعبث قانون

كان هناك في بعض البرامج مثل C# طرق حماية عن طريق رقم الهار او رقم المازر بورد فهل هذا يتوفر في الجافا وكيف برجاء الرد في اسرع وقت

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

22 إجابة على هذا السؤال .

  • 0

اهلا اخي الكريم .. ليس لدي معلومات كافيه خاصه بهذا الموضوع

ولكن انظر هذا ربما يفيدك http://download.oracle.com/javase/tutorial/security/tour2/step2.html

تم تعديل بواسطه Ahmed-Ghanem
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لا أدري إذا كانت هناك طريقة سهلة مباشرة لما تريد عمله.

يمكنك مثلا تشفير الملفات class واستعمال class loader خاص لفك التشفير عن الملفات class قبل استعمالها. يمكنك مثلا إعطاء مفتاح خاص يكل مستعمل. هذا موضوع يعطي مثال: حماية ملفات البايت كود

أيضا يجب أن تعرف أن الملفات class سهل أن تستخرج منها الكود باستعمال disassembler. يمكنك استعمال obfuscator لجعل الملفات class صعبة القراءة بالنسبة لل disassemblers

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الأخ تقريباً يقصد كيف يضمن عدم تشغيل برنامجه في أجهزة أخرى بحيث لو نسخه شخص آخر مايقبل يشتغل عنده , يعني بالعربي يشتغل في جهاز واحد فقط وعشان يقدر يضمن هذا فيحتاج يربطه بالـMac Address أو مثلما يقول رقم الهارد أو الـMother Board , فكيف يقدر يطلع هذه العناوين الخاصة بالهارد وير بأستخدام الجافا؟ بالنسبة للـMac Address :

public class MacAddress {

public static void main(String[] args) {
try {
InetAddress address = InetAddress.getLocalHost();

/*
* Get NetworkInterface for the current host and then read the
* hardware address.
*/
NetworkInterface ni = NetworkInterface.getByInetAddress(address);
if (ni != null) {
byte[] mac = ni.getHardwareAddress();
if (mac != null) {
/*
* Extract each array of mac address and convert it to hexa with the
* following format 08-00-27-DC-4A-9E.
*/
for (int i = 0; i < mac.length; i++) {
System.out.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "");
// System.out.println(mac[i]);
}
} else {
System.out.println("Address doesn't exist or is not accessible.");
}
} else {
System.out.println("Network Interface for the specified address is not found.");
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
}


}
}

أما بالنسبة لـسريل الهارد فهذا يعطيك السيريل للمحرك اللي تختاره :



public static class DiskUtils {
private DiskUtils() { }

public static String getSerialNumber(String drive) {
String result = "";
try {
File file = File.createTempFile("arabteam",".vbs");
file.deleteOnExit();
FileWriter fw = new java.io.FileWriter(file);

String vbs = "Set objFSO = CreateObject(\"Scripting.FileSystemObject\")\n"
+"Set colDrives = objFSO.Drives\n"
+"Set objDrive = colDrives.item(\"" + drive + "\")\n"
+"Wscript.Echo objDrive.SerialNumber";
fw.write(vbs);
fw.close();
Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
BufferedReader input =
new BufferedReader
(new InputStreamReader(p.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
result += line;
}
input.close();
}
catch(Exception e){
e.printStackTrace();
}
return result;
}

public static void main(String args[]){
String sn = DiskUtils.getSerialNumber("D");
javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)
null, sn, "Serial Number of D : ",
javax.swing.JOptionPane.DEFAULT_OPTION);
}
}

أما عن كيفية حماية البرنامج من إمكانية الإطلاع على الكود عن طريق الـDiassembler فمثلما قالوا لك الشباب

تحياتي

تم تعديل بواسطه .S.T.A.L.K.E.R
تعديل تنسيق الكود الاول
3

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

@M.Allaw .. ماشاء الله على الأفكار الجميله..

لكن ألا يوجد طريقة في الجافا لمعرفة السيريال للقرص الصلب؟ (لا أعتقدph34r.gif؟)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جربت الكود الثاني اللي في ردي الأول؟

إذا كنت تقصد بكود جافا خالص فما اعتقد , لكن ممكن تتحايل عليه ولكن المشكلة مابيمشي الا على وندوز فقط مثل المثال اللي فوق :(

تم تعديل بواسطه M.Allaw
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أي نعم لأنه vbscript ....

أعتقد أن حل مثل هذه المشكله ربما يكون platform dependent من الدرجه الأولي...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يمكنك استعمال obfuscator لجعل الملفات class صعبة القراءة بالنسبة لل disassemblers

انا بحثت فى خصائص المشروع عن خاصيه الـ obfuscator

لكنى لم اجدها

بالرغم انى استعملتها قبل كدا فى الـ JavaME

فاين هى بالنسبه للـ JavaSE

وشكرا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بس الخاصيه obfuscator

موجوده فى الـ JavaME

post-217802-044258600 1295175923_thumb.p

ولا دى حاجه غيرها ؟؟؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الخاصية موجودة في مشاريع ال mobile فقط

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الخاصية موجودة في مشاريع ال mobile فقط

امممم

ماشى تمام

بس انا نزلت البرنامج وحاولت استخدامه لكن دون جدوى

هل يوجد برنامج افضل من ذلك ؟؟

ام هذا افضل شىء

تم تعديل بواسطه Mahmoud Kelany
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الطريقة التقليدية هي كما قال اخونا محمد و هي بجعل المستخدم يرسل اي معلومة خاصه بجهازه بحيث لا تتكرر هذه المعلومة مع اي شخص أخر، مثلاً رقم المعالج ورقم الهارد أو اي رقم أخر..

بعد ذلك تقوم بتوليد السيريال نمبر Generation.. ولنفرض الأن انها عباره عن الmd5 hash للرقم الذي يرسله لك الزبون.. وستقوم بارسال السيريال للزبون..

هنا سوف يدخل الزبون السيريال للبرنامج، وهنا عليك أن تحقق من أن السيريال صحيح Verification ، وستقوم بأخذ المعلومة نفسها الذي أرسلها المستخدم لك وأخذ الmd5 hash لها ومقارنتها بالمدخل الذي أدخله المستخدم..

اذا تطابقا فهذا معناه أنه صحيح ولا فهو خاطئي..

المشكلة أن هذه العملية بدائيه جداً وفور تم الكشف عنها ، يمكن لأي مستخدم توليد md5 hash للمعلومة وادخالها للبرنامج وسوف يقول البرنامج انها صحيحة ..وهكذا "يتكرك" البرنامج :).

في الغالب ستجد أن عملية توليد السيريال تكون مكونه من عدة عمليات مثلا xor مع قيمة ، وضرب في قيمة وووالخ.. لكن في النهاية فور كشفها سوف تقع في المصيدة..

هناك طريقة أخرى أراها أفضل من الطريقة التقليدية وهي باستخدام التوقيع الرقمي digital signature ، فكرتها أن أولد مفتاحين ، العام سوف اضعه في كود البرنامج والخاص سوف أستخدمه أنا، وبعد أن يرسل الزبون المعلومة لي، سوف أولد السيريال وأقوم بتشفير هذا السيريال بالمفتاح الخاص وارسله للزبون، وفي وقت التحقق سوف يتم فك تشفير السيريال عن طريق المفتاح العام الموجود داخل البرنامج واذا تم فكه بنجاح فمعناه ان هذا السيريال هو سيريال صحيح من المصدر وليس سيريال جديد.. هذه طبقة من الحماية جيدة حقيقة ، لكن مشكلتها هو كيفية تخزين هذا المفتاح العام في البرنامج..

سوف تعود لنفس المشكلة، وهي أن اي شخص يمكن عمل reverse للبرنامج سوف يمكنه اكتشاف طريقة الحماية وتغييرها، وفي الطريقة اعلاه فقط عليه بتغيير المفتاح العام الخاص بي الى مفتاح عام خاص فيه (عمل Patching للبرنامج) وبعدها سوف "يتكرك" البرنامج أيضاً. على كل الشيء الجيد حقيقة هو قله الخبراء في الbyte code بعكس برامج الويندوز PE حيث أغلب الكراكر لديهم فهم واسع لبنية ويندوز، بعكس الجافا وهذه نقطة في صالحنا :).

أحد الحلول الجيدة أيضاً هو استخراج كود التحقق من البرنامج ووضعه على سيرفر أخر، والتحقق هنا سوف يتطلب اتصال انترنت، حالياً كثير من البرامج تستخدم هذا الأسلوب.. بمعنى ان البرنامج سوف يستخرج المعلومة من الجهاز ويرسلها للموقع، الموقع سوف يقوم داخلياً بالتحقق منها (اخذ md5 hash اذا فرضنا انها الخوارزمية) ومقارنتها بالسيريال المخزن في القاعدة، حينها سوف يرد الموقع بنعم أو لا وحينها أغلق البرنامج أو اخرج رسالة عليك التسجيل والخ.

معذرة على الاطالة :).

بالتوفيق،

4

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

رد رائع أخي وجدي ... زادك الله من علمه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

حياك الله أخوي هويدي..

بالنسبة لاستخراج المعلومات من جهاز الشخص، فيمكن كتابة بريمج كونسول صغير بسي++ وقم باستدعائه من جافا وأخذ الناتج منه،، عملية سريعة ولا تتطلب jni ولا غيره.. وهنا عليك أن تلحق هذا البريمج مع برنامجك عندما ينزل في جهاز العميل (لأنه سوف يستخدم مرة اخرى عند التحقق).

حالياً أعمل على برنامج أستخدم فيه أكثر من 4 c++ console application :).

بالتوفيق ،

تم تعديل بواسطه Wajdy Essam
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

+1

بارك الله فيك أخي وجدي وزادك علم إلى علمك (أنا أسميه حامل المسك) happy.gif

بس كيف تقدر تستدعي بريمج بالسي++ بدون الـJNI? تقصد تشغله كـexe عن طريق الـRuntime.exec() إلى داخل process ? ولا في طريقة ثانيه تشغل الكود مباشرة؟

ممكن مثال بسيط وجزاك الله ألف خير أخي وجدي :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
تقصد تشغله كـexe عن طريق الـRuntime.exec() إلى داخل process

وهي كذلك يا محمد،، كل في ما الأمر أنك تقوم بكتابة برنامج سي++ يقوم مثلا بطباعة ما تريد وليكن الرقم 20، في برنامج جافا قم بتشغيل الملف التتنفيذي واقرأ الناتج واستفد منه :) .

بالتوفيق،

2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لكن ستظل نفس المشكله وهي انه لن يعمل الا على الوندوز :(

شكراً جزيلاً حبيبي وجدي وجزاك الله خير , ولك وحشة ياكبير فخلينا نشوفك لا تغيب علينا happy.gif

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لكن ستظل نفس المشكله وهي انه لن يعمل الا على الوندوز :(

شكراً جزيلاً حبيبي وجدي وجزاك الله خير , ولك وحشة ياكبير فخلينا نشوفك لا تغيب علينا happy.gif

يمكنك تضمين أكثر من binary لأكثر من platform ..

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لكن ستظل نفس المشكله وهي انه لن يعمل الا على الوندوز :(

شكراً جزيلاً حبيبي وجدي وجزاك الله خير , ولك وحشة ياكبير فخلينا نشوفك لا تغيب علينا happy.gif

لغة cpp نفسها تتميز بالمحمولية portability لكن يجب ترجمتها compile على اكثر من نظام

مثلا على لينوكس يكون المخرج output بامتداد .out وعلى ويندوز .exe

يمكن ارفاق اكثر من نسخة مع البرنامج وتشغيلها حسب نوع نظام التشغيل الذى يتم اكتشافه من داخل التطبيق جافا

على كل الاستاذ وجدى له خبرة كبيرة وأكيد جرب هذه العملية قبل ذلك

نتمنى ان يضع لنا مثال بسيط عن الية التنفيذ

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

معذرة لم ارى ردك اخى هويدى

تم تعديل بواسطه MOHAMED FATHEI
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

فاهم قصدكم بس كان قصدي انه مثلما قال محمد انه لازم تسوي Compile لكل Platform بحيث يقبل التنفيذ على الأنظمة الأخرى , أما كـexe عادي ماتقدر :)

ذلتنا للناس هذه اللغة , في السي تشتغل وراسك مرفوع ولا تحتاج مساعدة من أي لغه أخرى mad.gif , الجافا مشكلتها هنا أن اتفه تعامل مع الهارد وير لازم تستعين بقوات أجنبيه تحل المشاكل المماثلة لأنها رقيقة وتخاف تتعور لوتعاملت مع الهارد وير sleep.gif

بس اللي مستغربله اني شفت بعيني في الـYoutube روبوتات مبرمجة بالجافا !!! ونزلت مرة موضوع عرضت به كم مقطع يبين امكانيات الجافا , بس للآن ماشفناها بالواقع unsure.gif

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ذلتنا للناس هذه اللغة , في السي تشتغل وراسك مرفوع ولا تحتاج مساعدة من أي لغه أخرى mad.gif , الجافا مشكلتها هنا أن اتفه تعامل مع الهارد وير لازم تستعين بقوات أجنبيه تحل المشاكل المماثلة لأنها رقيقة وتخاف تتعور لوتعاملت مع الهارد وير sleep.gif

ههههههه

مهما كان فالجافا لها جوانب قوية جدا مثل ال hibernate وال rmi و ال network والتقارير jasper report وال mobile application

و java applets و java web start و enterprise java beans وغيرهم الكثير

من الاخر ابتعد عن استخدام الجافا فى low-level programming

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

والله شيء جميل ورائع وشكرا لك اخي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .