ตรวจสอบว่า APK ได้ถูกสร้างขึ้นจากซอร์สโค้ดที่กำหนด


10

สำหรับแอพเดียวกันฉันมี:

  • เอพีเคจากร้านแอป
  • สิ่งที่อ้างว่าเป็นซอร์สโค้ดสำหรับเวอร์ชันเดียวกัน ด้วยสคริปและโครงสร้าง Gradle ที่ค่อนข้างปกติ

ฉันต้องการตรวจสอบว่า APK นั้นสร้างมาจากซอร์สโค้ดจริงหรือไม่
จะตรวจสอบอย่างไร

หมายเหตุ:

  • APK ไม่งงงวย
  • ฉันไม่มีเหตุผลที่จะเชื่อลายเซ็นของใคร ฉันเชื่อใจซอร์สโค้ดเท่านั้น
  • ฉันสร้างแอปด้วยตัวเองแล้ว แต่ตอนนี้ฉันอยากรู้ว่า APK นั้นใช้ได้หรือไม่
  • ควรใช้เครื่องมือบรรทัดคำสั่งของ Linux แต่เครื่องมือใด ๆ ก็โอเค

2
ฉันไม่ได้ลอง แต่คุณควรใช้Apktoolเพื่อจุดประสงค์นี้: Reverse-engineer ทั้งสอง.apkไฟล์จากนั้นเรียกใช้ diff กับไดเร็กตอรี่ที่ได้ผลลัพธ์ ความแตกต่างเท่านั้นควรเป็นลายเซ็น (ซึ่งไม่สามารถจับคู่ด้วยเหตุผลที่ชัดเจน) คิดเกี่ยวกับมัน: เพียงแค่การขยาย.apkไฟล์และทำไบนารีแตกต่างควรทำเช่นเดียวกัน แน่นอนว่าทั้งสองอย่างนั้นจำเป็นต้องใช้
Izzy

@Izzy: " รุ่นไลบรารีเดียวกัน ": เวอร์ชัน API ถูกเขียนในไฟล์ Manifest และเวอร์ชันไลบรารีในสคริปต์ Gradle ดังนั้นส่วนที่ควรจะเป็น OK ฉันเดา รายการไฟล์ / โฟลเดอร์ที่สามารถละเว้นได้จะทำให้เป็นคำตอบที่ยอดเยี่ยม (โบนัสสำหรับบรรทัดคำสั่งจริง)
Nicolas Raoul

1
ฉันสามารถทำเช่นนั้นได้ถ้าฉันใช้คอมพิวเตอร์ที่บ้านซึ่งตอนนี้ฉันไม่อยู่ แต่เพื่อที่จะเป็น "คำตอบที่มีเกียรติ" ฉันจะต้องลองด้วยตัวเองก่อน :) ในกรณีที่ฉันลืม (และไม่มีใครทำต่อหน้าฉัน) รู้สึกอิสระที่จะส่ง ping อีกครั้ง (เช่นในการแชท) 8..10h :)
อิซซี

@Izzy diffวิธีการดูเนี้ย ... แต่จะเกิดอะไรขึ้นถ้าพวก app store สับสนกับ APK ในขณะคอมไพล์?
Grimoire

IMHO นั่นคือสิ่งที่ Apktool เข้ามาเล่น คุณตรวจสอบลิงก์แล้วหรือยัง ดูที่LibRadarซึ่งใช้สิ่งนี้ด้วย AFAIR ช่วยในการทำให้งงงวย (สิ่งที่ต้องหรือ LibRadar จะมีงานตรวจหาไลบรารีเหล่านั้นอย่างหนัก)
Izzy

คำตอบ:


2

คุณสามารถทำสิ่งนี้ได้กับ บิลด์ที่ทำซ้ำได้:

"การสร้างสามารถทำซ้ำได้หากได้รับซอร์สโค้ดเดียวกันสภาพแวดล้อมการสร้างและคำแนะนำการสร้างฝ่ายใดฝ่ายหนึ่งสามารถสร้างสำเนาที่เหมือนกันแบบทีละบิตของสิ่งประดิษฐ์ที่ระบุทั้งหมด"

ดังนั้นนักพัฒนาแอพหรือแอพสโตร์จำเป็นต้องอยู่บนบอร์ดเพื่อให้มันใช้งานได้
มิฉะนั้นตัวเลือกเดียวของคุณคือสร้างด้วยตัวเอง

ตัวอย่างหนึ่งของนักพัฒนาที่ทำเช่นนี้คือ Open Whisper Systems: https://github.com/WhisperSystems/Signal-Android/wiki/Reproducible-Builds


น่าสนใจมาก! ดังนั้นคุณแน่ใจหรือว่าการเปรียบเทียบไม่สามารถทำได้หากไม่มีนักพัฒนาที่อยู่ในบอร์ด น่าเสียดายที่ (แต่เข้าใจได้) แอพโอเพนซอร์สส่วนใหญ่ไม่ได้ใช้ Docker หรือสิ่งที่คล้ายกันสำหรับงานสร้างพวกเขาเพิ่งสร้างบนระบบที่ผู้ดูแลใช้งาน
นิโคลัสราอูล

ไม่จำเป็นต้องเป็นนักพัฒนาตราบใดที่ผู้สร้างแอพจากแหล่งที่มาทำให้มันสามารถสร้างสภาพแวดล้อมการสร้างได้ การพึ่งพาอาศัยกันอาจเป็นความเจ็บปวดครั้งใหญ่เมื่อสร้างการสร้างประเภทนี้
andDevW

"สร้างสภาพแวดล้อมการสร้างขึ้นใหม่": เป็นไปได้ที่จะเดาได้หรือไม่ ตัวอย่างเช่นหากด้วยเหตุผลบางอย่างที่สร้างบน Mac หรือ Linux จะสร้าง APK ที่แตกต่างกันฉันสามารถเดาได้ไหมว่า APK ของ app store นั้นสร้างขึ้นบน Mac หรือ Linux
Nicolas Raoul

มันเป็นไปไม่ได้ที่จะเดาและมีผลลัพธ์ที่มีความหมาย ในที่สุดสิ่งนี้จะง่ายขึ้นในการนำไปใช้และคุณจะเห็นโครงการโอเพ่นซอร์สเพิ่มขึ้นเรื่อย ๆ
andDevW

1

สิ่งหนึ่งที่ยอดเยี่ยมเกี่ยวกับ java และ APK คือคุณสามารถถอดรหัส APK เป็น java ได้อย่างสมบูรณ์

อย่างไรก็ตามซอร์สโค้ดที่ได้นั้นไม่ได้รับประกันว่าจะเหมือนกัน

วิธีที่ดีวิธีหนึ่งในการลองจับคู่ซอร์สโค้ดผลลัพธ์กับการแก้ไขที่รู้จักคือการตรวจสอบการปรับเปลี่ยนที่ทำก่อนและหลังการคอมมิตที่รู้จักในที่เก็บและดูว่าการแก้ไขเหล่านั้นมีอยู่ในซอร์สที่ถอดรหัสแล้วหรือไม่

การแยกการใช้งานdex2jarและJD-กุย

แก้ไขฉันเพิ่งสังเกตเห็นว่าคุณต้องการเครื่องมือ linux ประสบการณ์เดียวของฉันคือกับ windows แต่ฉันแน่ใจว่ามีเครื่องมือที่คล้ายกันสำหรับ linux


หากฉันเข้าใจอย่างถูกต้องวิธีการของคุณคือตรวจสอบการเปลี่ยนแปลงล่าสุดในที่เก็บของซอร์สโค้ดจากนั้นก็ทำการถอดรหัส APK และตรวจสอบด้วยตนเองว่าพบการเปลี่ยนแปลงล่าสุดในรหัสที่ถอดรหัสแล้วด้วยใช่ไหม วิธีการที่น่าสนใจ แต่จะไม่บอกฉันว่าเพิ่มโฆษณาทางโทรศัพท์หรือโฆษณาฝังตัวลงใน APK เวอร์ชันใช่มั้ย
Nicolas Raoul

1
นี่เป็นวิธีที่ฉันใช้ในสำนักงานเพื่อลองจับคู่ APK ที่ไม่รู้จักกับการแก้ไขซอร์สซึ่งดีพอถ้าคุณรู้ว่าคุณสามารถไว้วางใจนักพัฒนาได้ แต่อย่างที่คุณพูดมันอาจเป็นไปได้ที่ฝ่ายที่ไม่น่าไว้วางใจจะแอบเข้าไปในบางสิ่งฉันหวังว่าบางคนจะให้คำตอบที่ชัดเจนกว่านี้ก็จะมีประโยชน์สำหรับฉันเช่นกัน
ทำเครื่องหมาย Ch

ลองรวบรวมแหล่งที่มาลงใน APK ด้วยตัวเองแล้วทำการคอมไพล์มันกลับไปเป็นซอร์สโค้ดแล้วเปรียบเทียบกับแหล่งข้อมูลที่ถอดรหัสแล้วจาก Play Store APK มีใครลองบ้างไหม
Sergiy Belozorov

1
@SergiyBelozorov ขออภัยฉันไม่สามารถตอบคำถามนี้ฉันไม่ได้ทำงานกับ Android อีกต่อไป แต่ดูเหมือนความคิดที่ดีมาก
Mark Ch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.