डेटाबेस सुरक्षा और हैकिंग "स्पेयर पार्ट्स कैटलॉग" कार्यक्रम के उदाहरण पर

यदि आप अपने प्रोग्राम में उपयोग किए जाने वाले डेटाबेस की सुरक्षा करना चाहते हैं, तो यह जानकारी आपके लिए उपयोगी होगी। शायद आपको सुरक्षा में सुधार करने की आवश्यकता है, उदाहरण के लिए, डेटाबेस मानों को एन्क्रिप्ट करना और उन्हें आउटपुट पर डिक्रिप्ट करना।

So. एक डेटा फ़ोल्डर के साथ एक कार्यक्रम है, मैं वास्तव में इससे डेटा प्राप्त करना चाहता हूं।

कई विकल्प हैं।

सबसे पहले आपको यह पता लगाने की आवश्यकता है कि प्रोग्राम में डेटा किस प्रारूप में संग्रहीत है। आप मुफ्त ट्रिड प्रोग्राम का उपयोग कर सकते हैं। हम कोशिश करते हैं ...

छवि

उदासी। कुछ पता नहीं। यह ओले डेटास्टर के आधार पर किसी तरह का मालिकाना प्रारूप लगता है। यदि यह सच है और डेवलपर्स ने अपने स्वयं के DBMS को परेशान करने और लिखने का फैसला किया है, तो डेटा निकालना बहुत मुश्किल और समय लेने वाला होगा। विकल्प 1 का उपयोग करना आसान होगा।

लेकिन, सभी प्रोग्रामर आलसी हैं और सबसे अधिक संभावना है कि यह किसी प्रकार का प्रसिद्ध प्रारूप हो। उदाहरण के लिए एक्सेस या फायरबर्ड। मैं ऐसा करूंगा। मैंने कार्यक्रम के साथ निर्देशिका में देखा, कोई पुस्तकालय नहीं हैं।

आगे अन्वेषण करें। प्रक्रिया एक्सप्लोरर के साथ एक बहुत ही उपयोगी मुफ्त उपयोगिता डाउनलोड करें, जो रजिस्ट्री, फाइलों और संभव होने वाले सभी चीजों तक पहुंच को दिखाता है।
हम शुरू करते हैं, कॉन्फ़िगर करते हैं, ताकि केवल एक कैटलॉग। Exe प्रक्रिया की निगरानी की जाए - कार्यक्रम की मुख्य निष्पादन योग्य फ़ाइल।

छवि

प्रोग्राम को चलाएं और देखें कि यह कहां जाता है।

छवि

ओह! यह एक ODBC डेटा स्रोत का उपयोग करता है। सबसे अधिक संभावना है, उपयोग किया गया डेटाबेस एक्सेस है! हमने खुद को प्लस साइन किया। हम आगे देखते हैं। TraceSQLMode रजिस्ट्री में एक दिलचस्प कुंजी है। Googling यह पता चला है कि सभी अनुरोधों को एक फ़ाइल में लिखा जा सकता है। कुंजी बदलें और फ़ाइल देखें। पाया:

छवि

हम अनुरोधों को देखते हैं:
SELECT

FROM spare LEFT JOIN photo ON photo.serial = spare.serial


नेमप्लेट को स्पेयर कहा जाता है, जिसका मतलब है स्पेयर पार्ट। तो यह एक सहायक डेटाबेस नहीं है और भागों के नाम वास्तव में वहां संग्रहीत हैं। बहुत बढ़िया। हम आगे देखते हैं।

छवि

डेटाबेस फ़ाइल को प्रोग्राम डायरेक्टरी में नहीं एक्सेस किया जा रहा है। इसलिए इसे अस्थायी रूप से वहां कॉपी किया जाता है। हम एक्सेस में खोलने की कोशिश करते हैं - परिणाम के बिना, समझ में नहीं आता है।

हम कार्यक्रम में एक कार्रवाई करते हैं, निर्देशिका में किसी अन्य स्थान पर अच्छी तरह से स्विच करते हैं, लॉग पर अधिक बारीकी से देखते हैं:

छवि

अनुरोध से पहले, फ़ाइल में संशोधन होते हैं, इसके लिए कुछ लिखा जाता है। संभवतः यह या तो डिक्रिप्टेड है या फ़ाइल हेडर बदलता है। अब यह महत्वपूर्ण नहीं रह गया है, क्योंकि हम समझते हैं कि यदि आप इस फ़ाइल को अनुरोध से पहले कॉपी करते हैं, तो अधिक संभावना के साथ यह काम करना बंद कर देगा।

इसलिए आपको किसी तरह कार्यक्रम को अनुरोध तक निलंबित करने की आवश्यकता है, जबकि फ़ाइल काम कर रही है। यह सही है, डीबगर में एक ट्रेस। डिबगर को डाउनलोड करें, उदाहरण के लिए, मुक्त OllyDbg का वजन 1.3MB है।

हम प्रशासक मोड में शुरू करते हैं यदि आपके पास विंडोज़ विस्टा और उच्चतर हैं।
चल प्रक्रिया में शामिल हों (संलग्न करें)

छवि

हमारी प्रक्रिया चुनें:

छवि

हम प्रोसेस एक्सप्लोरर में वापस आते हैं और फ़ंक्शन कॉल स्टैक को देखते हैं (घटना के संदर्भ मेनू में):

छवि

आप कर्नेल 32.dll सिस्टम मॉड्यूल में CloseHandle फ़ाइल को बंद करने के लिए कॉल पर एक ब्रेकपॉइंट सेट कर सकते हैं।

डीबगर में इस मॉड्यूल पर जाएं:

छवि

वांछित फ़ंक्शन खोजें:

छवि

हमने एक ब्रेकपॉइंट लगाया - F2।

छवि

अगला, F9 दबाकर प्रोग्राम को चलाएं। और हम प्रायोगिक कार्यक्रम में कुछ कार्रवाई करते हैं। कार्यक्रम ब्रेकपॉइंट पर रुक जाएगा।

डिबगर में ट्रेस (F8) जब तक रजिस्ट्री एक्सेस रिकॉर्ड अनुरोध को निष्पादित करने से पहले प्रकट नहीं होता है। इसका मतलब यह होगा कि डेटाबेस फ़ाइल को इससे कनेक्ट करने के लिए संशोधित किया गया है और यह पठनीय है।

उसके बाद, फ़ाइल पर जाएं और इसे किसी अन्य स्थान पर कॉपी करें:

छवि

अब हम फाइल को देखते हैं:

छवि

100% mdb! यह एक MS Access फ़ाइल है। नाम बदलें, खोलें, सुनिश्चित करें कि सब कुछ ठीक है।

छवि

हमें सफलतापूर्वक आगे के संशोधनों या किसी अन्य प्रारूप में परिवर्तित करने के लिए उपयुक्त डेटाबेस मिला है।

जब से मैंने लिखना शुरू किया है, मैं MS Access से PostgreSQL डेटाबेस में डेटा परिवर्तित करने के लिए groovy पर एक स्क्रिप्ट पोस्ट करूंगा।

यहाँ यह है:
import groovy.sql.Sql
java.util.Properties prop = new java.util.Properties();
prop.put(“charSet”, “cp1251”);
sourceSql = Sql.newInstance('jdbc:odbc:catalog2',prop)
targetSql = Sql.newInstance(“jdbc:postgresql://localhost:5432/catalog”,”catalog”,”catalog”, “org.postgresql.Driver”)
def images = targetSql.dataSet(“image”);
sourceSql.eachRow('select * from image') {
def id = it.id
images.add(id:id,block:it.block);
def image=it.getProperty(“image”)
if (image) {
File f = new File(“D:/trid_w32/images/” + id + “.png”);
f.append(image);
}
}
def coords = targetSql.dataSet(“coord”);
sourceSql.eachRow('select * from coord') {
coords.add(id:it.id,block:it.block,x:it.x,y:it.y,r:it.r);
}
def spares = targetSql.dataSet(“spare”);
sourceSql.eachRow('select * from spare') {
spares.add(id:it.id,parent:it.parent,num:it.num,serial:it.serial,count:it.count,spec:it.spec,apply:it.apply,ru:it.ru,cn:it.cn);
}


दुभाषिया द्वारा लॉन्च किया गया:

groovy _.groovy

निष्कर्ष: डेटाबेस की सुरक्षा के लिए, आपको या तो (सबसे विश्वसनीय) डेटा को अपने स्वरूप में लिखना होगा, या डेटाबेस में मौजूद मानों को एन्क्रिप्ट करना होगा और प्रदर्शित होने पर इसे सीधे अनज़िप करना होगा, साथ ही सहायक सुरक्षा विधियों का उपयोग करना होगा, उदाहरण के लिए, फ़ाइल को एन्क्रिप्ट करें, फ़ाइल हस्ताक्षर को बदलें, अंतर्निहित एन्क्रिप्शन का उपयोग करें bd।

PS इस लेख के लेखक अलेक्जेंडर सुरोत्सेव हैं। यदि आपको सामग्री पसंद है, तो कृपया उसे हैबर को आमंत्रित करने में मदद करें। दुर्भाग्य से, मैंने अपना निमंत्रण सौंप दिया। उसका ईमेल पता gmail.com पर surovtsev.alex है, ट्विटर पर mobal1 है बहुत-बहुत धन्यवाद!

Source: https://habr.com/ru/post/In127164/


All Articles