सत्यापित करें कि दिए गए स्रोत कोड से एक एपीके बनाया गया है


10

उसी ऐप के लिए, मेरे पास है:

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

मैं यह जांचना चाहता हूं कि क्या एपीके वास्तव में उस स्रोत कोड से बनाया गया था या नहीं।
कैसे करें जांच?

टिप्पणियाँ:

  • एपीके बाधित नहीं है।
  • मेरे पास किसी के हस्ताक्षर पर भरोसा करने का कोई कारण नहीं है। मुझे केवल सोर्स कोड पर भरोसा है।
  • मैंने पहले से ही अपने लिए ऐप बनाया है, लेकिन अब मैं जानना चाहता हूं कि एपीके ठीक था या नहीं।
  • अधिमानतः लिनक्स कमांड-लाइन टूल के साथ, लेकिन कोई भी टूल ठीक है।

2
मैंने वह कोशिश नहीं की है, लेकिन आपको इस उद्देश्य के लिए Apktool का उपयोग करने में सक्षम होना चाहिए : दोनों .apkफाइलों को उल्टा करना , फिर परिणामस्वरूप निर्देशिकाओं के खिलाफ एक अंतर चलाना। केवल अंतर तब हस्ताक्षर होना चाहिए (जो स्पष्ट कारणों से मेल नहीं खा सकता है)। इसके बारे में सोचना: बस .apkफाइलों को खोलना और एक द्विआधारी अंतर करना एक ही करना चाहिए। दोनों के पाठ्यक्रम एक ही पुस्तकालय संस्करणों का उपयोग कर लेने की आवश्यकता होती है करेगा आदि जब पहली जगह में :) संकलन
इज़ी

@ इज़ी: " एक ही लाइब्रेरी संस्करण ": एपीआई संस्करण को ग्रैडल स्क्रिप्ट में प्रकट और पुस्तकालयों संस्करण में लिखा गया है, ताकि भाग ठीक हो, मुझे लगता है। फ़ाइलों / फ़ोल्डरों की एक सूची जिसे अनदेखा किया जा सकता है, वह एक महान उत्तर (वास्तविक कमांड लाइनों के लिए बोनस) बनाएगी।
निकोलस राउल

1
मैं ऐसा कर सकता था यदि मैं घर पर अपने कंप्यूटर पर था, जो कि मैं वर्तमान में नहीं हूं। लेकिन इसके लिए एक "सम्मानजनक जवाब" होने के लिए, मुझे पहले इसे स्वयं आज़माने की आवश्यकता होगी :) अगर मैं भूल जाता हूं (और मेरे सामने किसी और ने ऐसा नहीं किया), तो मुझे एक और पिंग भेजने के लिए स्वतंत्र महसूस करें (जैसे चैट में) 8..10h :)
इज़ी

@ इज़ी diffविधि साफ- सुथरी लगती है ... लेकिन क्या होगा अगर ऐप स्टोर के लोगों ने इसे संकलित करते समय एपीके को बाधित किया हो?
ग्रिमोइरे

IMHO वह जगह है जहाँ Apktool खेलने में आता है। क्या आपने लिंक की जाँच की है? इसके अलावा LibRadar पर एक नज़र डालें जो इसका उपयोग करता है। AFAIR यह de-obfuscating में मदद करता है (कुछ चाहिए, या LibRadar के पास उन पुस्तकालयों का पता लगाने में एक कठिन काम होगा)।
इज़ी

जवाबों:


2

आप इसे केवल प्रतिलिपि प्रस्तुत करने योग्य बिल्ड के साथ कर सकते हैं :

"यदि कोई निर्माण समान स्रोत कोड दिया जाता है, तो पर्यावरण का निर्माण और निर्देश बनाने के लिए एक प्रतिलिपि प्रस्तुत करने योग्य है, कोई भी पार्टी सभी निर्दिष्ट कलाकृतियों की बिट-बाय-बिट समान प्रतियों को फिर से बना सकती है।"

तो काम करने के लिए ऐप डेवलपर या ऐप स्टोर को बोर्ड में होना चाहिए।
अन्यथा आपका एकमात्र विकल्प इसे स्वयं बनाना है।

वर्तमान में ऐसा करने वाले डेवलपर का एक उदाहरण ओपन व्हिस्पर सिस्टम है: https://github.com/WhisperSystems/Signal-Android/wiki/Reproducible-Builds


बहुत ही रोचक! तो, क्या आप सुनिश्चित हैं कि डेवलपर के बिना तुलना बोर्ड पर नहीं की जा सकती है? दुर्भाग्य से (लेकिन समझ में आता है) ज्यादातर ओपन सोर्स ऐप डॉकर्स या इसी तरह के बिल्ड के लिए उपयोग नहीं करते हैं, वे सिर्फ उस सिस्टम पर बने होते हैं जिसको चलाने के लिए सिस्टम होता है।
निकोलस राउल

डेवलपर होने की जरूरत नहीं है, जब तक कि जो कोई भी स्रोत से ऐप बनाता है वह अपने बिल्ड वातावरण को फिर से बनाना संभव बनाता है। इन प्रकार के बिल्डरों को स्थापित करते समय निर्भरता एक बड़े पैमाने पर दर्द हो सकती है।
-डेव्यू

"अपने बिल्ड वातावरण को फिर से बनाएं": क्या यह अनुमान लगाना संभव है? उदाहरण के लिए, यदि किसी कारण से मैक या लिनक्स पर बिल्डिंग एक अलग एपीके का निर्माण करती है, तो क्या मैं अनुमान लगा सकता हूं कि ऐप स्टोर का एपीके मैक या लिनक्स पर बनाया गया है या नहीं?
निकोलस राउल

यह अनुमान लगाना संभव नहीं है और इसके परिणाम सार्थक हैं। आखिरकार इसे लागू करना आसान हो जाएगा और आपको अधिक से अधिक ओपन सोर्स प्रोजेक्ट्स करने होंगे।
-DDWW

1

जावा और एपीके के बारे में एक बड़ी बात यह है कि आप एपीके को जावा स्रोत कोड में पूरी तरह से विघटित कर सकते हैं।

हालाँकि, परिणामी स्रोत कोड समान होने की गारंटी नहीं है।

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

विघटित करने के लिए, dex2jar और JD-Gui का उपयोग करें ।

संपादित करें मैंने अभी देखा कि आप लिनक्स उपकरण चाहते थे। मेरा एकमात्र अनुभव खिड़कियों के साथ है, लेकिन मुझे यकीन है कि लिनक्स के लिए समान उपकरण मौजूद हैं।


अगर मैं सही तरीके से समझता हूं, तो आपकी विधि यह जांचने के लिए है कि स्रोत कोड के भंडार में नवीनतम परिवर्तन क्या है, तो एपीके को डिकंपाइल करें, और मैन्युअल रूप से जांचें कि क्या नवीनतम परिवर्तन भी विघटित कोड में पाया गया है, है ना? दिलचस्प दृष्टिकोण, लेकिन यह मुझे नहीं बताएगा कि क्या एपीके संस्करण में कॉल-होम या एम्बेडेड विज्ञापन जोड़ा गया है, है ना?
निकोलस राउल

1
यह एक ऐसा दृष्टिकोण है जिसका उपयोग मैंने कार्यालय में एक अज्ञात एपीके से स्रोत संशोधन के लिए प्रयास करने और मेल करने के लिए किया है, जो काफी अच्छा रहा है यदि आप जानते हैं कि आप डेवलपर्स पर भरोसा कर सकते हैं। लेकिन जैसा कि आप कहते हैं, किसी अविवेकी पार्टी के लिए यह संभव है कि वह किसी चीज को छीन ले। मुझे उम्मीद है कि कोई व्यक्ति अधिक निश्चित जवाब देगा, मेरे लिए भी उपयोगी होगा।
मार्क Ch

कैसे स्रोत के बारे में APK खुद को संकलित करने के बाद, फिर इसे स्रोत कोड में वापस विघटित करें और प्ले स्टोर एपीके से विघटित स्रोत की तुलना करें? क्या किसी ने यह कोशिश की है?
सर्जेई बेलोज़ोरोव

1
@SergiyBelozorov माफ करना, मैं इसका जवाब नहीं दे सकता, मैं वास्तव में एंड्रॉइड के साथ काम नहीं करता, लेकिन यह एक बहुत अच्छा विचार है।
मार्क च
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.