วิศวกรรมย้อนกลับจากไฟล์ APK ไปยังโครงการ


244

ฉันลบโครงการออกจากEclipseโดยไม่ได้ตั้งใจและที่เหลือคือไฟล์APKที่ฉันถ่ายโอนไปยังโทรศัพท์ มีวิธีย้อนกลับกระบวนการส่งออกแอปพลิเคชันไปยังไฟล์. apk ดังนั้นฉันจะได้รับโครงการคืน



2
คุณจะรู้ว่าคราสมีประวัติรุ่นของตัวเอง?
eis

5
มีความเป็นไปได้ที่ซ้ำกันของวิธีการรับรหัสที่มาจากไฟล์ APK
Janot

4
หากคุณกำลังเขียนสิ่งที่สำคัญกับคุณคุณควรใช้ VCS Bitbucket มีที่เก็บส่วนตัวฟรี
lxknvlk

คำตอบ:


287

มีสองเครื่องมือที่มีประโยชน์ซึ่งจะสร้างโค้ด Java (หยาบ แต่ดีพอ) จากไฟล์ APK ที่ไม่รู้จัก

  1. ดาวน์โหลดเครื่องมือ dex2jar จากdex2jar
  2. ใช้เครื่องมือเพื่อแปลงไฟล์ APK เป็นJAR :

    $ d2j-dex2jar.bat demo.apk
    dex2jar demo.apk -> ./demo-dex2jar.jar
  3. เมื่อสร้างไฟล์ JAR แล้วให้ใช้JD-GUIเพื่อเปิดไฟล์ JAR คุณจะเห็นไฟล์ Java

ผลลัพธ์จะคล้ายกับ:

JD GUI


6
วิธีรับไฟล์ทรัพยากร
srini

26
cmd เลิกใช้แล้วใช้d2j-dex2jarแทน (v0.0.9.15)
Fredrick Gauss

1
@sri เพียงเปลี่ยนชื่อไฟล์ apk เพื่อ zip และแตกไฟล์คุณจะมีไฟล์ทรัพยากรอยู่ในresโฟลเดอร์
4324 Hoang Huynh

8
@ HoangHuynh คุณจะมีresโฟลเดอร์ที่มีไฟล์ xml ที่อ่านไม่ได้
S.Thiongane

6
ในMacถ้าคุณไม่สามารถใช้ dex2jar: ให้permission deniedทำเช่นนี้ $sudo chmod +x d2j-dex2jar.sh
Min2

81

ก่อนอื่นฉันขอแนะนำให้ใช้thisวิดีโอนี้อาจเป็นการล้างข้อสงสัยทั้งหมดของคุณ

ถ้าไม่โปรดผ่านมันไป

Procedure for decoding .apk files, step-by-step method:

Step 1:

สร้างโฟลเดอร์ใหม่และใส่ไฟล์. apk ลงไป (ซึ่งคุณต้องการถอดรหัส) ตอนนี้เปลี่ยนชื่อนามสกุลของ.apkไฟล์นี้เป็น.zip(เช่น.: เปลี่ยนชื่อจาก filename.apk เป็น filename.zip) และบันทึก

หากปัญหาในการแปลงเป็น. zip โปรดอ้างอิง link

หลังจากได้รับ. zip ตอนนี้คุณจะได้รับไฟล์ classes.dex และอื่น ๆ ในขั้นตอนนี้คุณสามารถดูไฟล์ drawable แต่ไม่ใช่ไฟล์ xml และ java ดังนั้นดำเนินการต่อ หากคุณไม่เห็นส่วนขยายให้ตรวจสอบการกำหนดค่า

Step 2:

ตอนนี้แยกไฟล์ zip apk นี้ในโฟลเดอร์เดียวกัน ตอนนี้ดาวน์โหลด dex2jar จากนี้link

และแยกไปยังโฟลเดอร์เดียวกัน ตอนนี้เปิดพร้อมท์คำสั่งและเปลี่ยนไดเรกทอรีเป็นโฟลเดอร์นั้น

จากนั้นเขียนdex2jar classes.dexและกด Enter ตอนนี้คุณได้รับclasses.dex.dex2jarไฟล์ในโฟลเดอร์เดียวกัน

จากนั้นดาวน์โหลดตัวถอดรหัสจาวา

และตอนนี้ดับเบิลคลิกที่ jd-gui และคลิกที่เปิดไฟล์ จากนั้นเปิดclasses.dex.dex2jarไฟล์จากโฟลเดอร์นั้น ตอนนี้คุณจะได้ไฟล์คลาสและบันทึกไฟล์คลาสเหล่านี้ทั้งหมด (คลิกที่ไฟล์จากนั้นคลิก "บันทึกแหล่งที่มาทั้งหมด" ใน jd-gui) โดยใช้ชื่อ src แตกไฟล์ zip นั้น(classes_dex2jar.src.zip)และคุณจะได้รับไฟล์ java ทั้งหมดของแอปพลิเคชัน

ในขั้นตอนนี้คุณจะได้รับแหล่งที่มาของจาวา แต่ไฟล์ xml ยังคงไม่สามารถอ่านได้ดังนั้นให้ทำต่อไป

Step 3:

ตอนนี้เปิดโฟลเดอร์ใหม่อีกไฟล์และใส่ไฟล์เหล่านี้

  1. ใส่ไฟล์. apk ที่คุณต้องการถอดรหัส

  2. ดาวน์โหลด Apktool for windows v1.xAndApktool

ติดตั้งหน้าต่างโดยใช้ google และใส่ในโฟลเดอร์เดียวกัน

  1. ดาวน์โหลดไฟล์ framework-res.apk โดยใช้ google และวางในโฟลเดอร์เดียวกัน (ไฟล์ apk ทั้งหมดไม่จำเป็นต้องใช้ไฟล์ framework-res.apk)

  2. เปิดหน้าต่างคำสั่ง

  3. นำทางไปยังไดเรกทอรีรากของ APKtool และพิมพ์คำสั่งต่อไปนี้: apktool if framework-res.apk.

Framework installed ...คำสั่งดังกล่าวจะส่งผลให้

  1. apktool d "appName" .apk ("appName" หมายถึงแอปพลิเคชันที่คุณต้องการถอดรหัส) ตอนนี้คุณจะได้รับโฟลเดอร์แฟ้มในโฟลเดอร์นั้นและตอนนี้คุณสามารถอ่านไฟล์ xml ได้อย่างง่ายดายเช่นกัน

Step 4: ในที่สุดเราก็ได้res/รหัสโครงการ java ซึ่งเป็นเป้าหมายของเราในการเริ่มต้น

P.S. หากคุณไม่สามารถรับโฟลเดอร์ res ตามขั้นตอนข้างต้นโปรดทำการติดตั้งใหม่ apktool

  • ติดตั้ง Java 1.7 หรือไม่ ติดตั้ง Apktool 2.x
  • ติดตั้ง Java 1.6 หรือสูงกว่าหรือไม่ ติดตั้ง Apktool 1.x

Enjoy and happy coding


มีประโยชน์จริง ๆ บางสิ่งบางอย่างเพียงแค่คุณไม่ได้กล่าวถึงคือapktool.jarไม่ได้อยู่ในแพคเกจเดียวกันฉันได้รับมันจากแพคเกจในอดีตและวางไว้ใน dir apktoolเดียวกับ
S.Thiongane

1
ฉันกลับวิศวกรรหัส แต่ทำไมชื่อของชั้นตัวแปรเป็นเช่น AA, BC, ฯลฯ และข้อผิดพลาดมากมาย
user2934930

1
ไม่สามารถทำได้ในหน่วย cmd
Meghal Agrawal

วิธีอื่นทำเช่นนั้น?
Meghal Agrawal

2
@ user2934930 ซึ่งหมายความว่ารหัสมีความสับสนโดยใช้ ProGuard
cascal

58

ไม่มีซอฟต์แวร์ & ไม่มีขั้นตอนมากเกินไป ..

เพียงอัปโหลด APK ของคุณและรับแหล่งข้อมูลทั้งหมดจากเว็บไซต์นี้ ..

https://www.apkdecompilers.com/

เว็บไซต์นี้จะถอดรหัสโค้ดที่ฝังอยู่ในไฟล์ APK และแยกเนื้อหาอื่น ๆ ทั้งหมดในไฟล์

หมายเหตุ: ฉันถอดรหัสไฟล์ APK และรับรหัสภายใน miniute เดียวจากเว็บไซต์นี้

อัปเดต 1 :

ฉันพบเว็บไซต์ถอดรหัสเสียงออนไลน์อื่น

http://www.javadecompilers.com/apk/ - ไม่ทำงานอย่างต่อเนื่องเพื่อขอบล็อกป๊อปอัป

อัปเดต 2:

ฉันพบ apk decompiler app ใน play store

https://play.google.com/store/apps/details?id=com.njlabs.showjava

เราสามารถถอดรหัสไฟล์ apk ในโทรศัพท์ Android ของเรา และเราสามารถดูไฟล์ java & xml ในแอปพลิเคชันนี้

อัปเดต 3:

เราสามารถใช้ฟีเจอร์วิเคราะห์อีกทางเลือกหนึ่งจาก Android studio 2.2 version

สร้าง -> วิเคราะห์ APK -> เลือก APK ของคุณ -> ให้ผล

ป้อนคำอธิบายรูปภาพที่นี่


3
ในวิธีสุดท้ายเราไม่สามารถเปิดคลาส java ได้, จะแสดงเฉพาะชื่อเมธอดเท่านั้น
Choletski

@Choletski คุณลอง ShowJava หรือไม่ ถ้าไม่ลอง & อัปเดตฉัน
Ranjith Kumar

@RanjithKumar จำกัด ขนาด APK 50 MB .. ฉันมี APK 85 MB ที่จะถอดรหัส
Ravi Sharma


1
วิธีการเรียกใช้โครงการที่ decompiled ใน android studio? ใครก็ได้โปรดเขียนเกี่ยวกับเรื่องนี้
mayur kukadiya


4

ไม่ได้จริงๆ มีจำนวนของ dex disassembler / decompiler suites ที่นั่นเช่น smaliหรือdex2jarที่จะสร้างเอาท์พุทกึ่งมนุษย์อ่านได้ (ในกรณีของ dex2jar คุณสามารถรับรหัส java ผ่านการใช้สิ่งเช่นJD-GUIแต่กระบวนการคือ ไม่สมบูรณ์และไม่น่าเป็นไปได้มากที่คุณจะสามารถสร้างซอร์สโค้ดของคุณใหม่ได้ 100% อย่างไรก็ตามอาจทำให้คุณมีที่สำหรับเริ่มต้นการสร้างทรีต้นของคุณขึ้นมาใหม่


@MAC: เขาต้องการซอร์สไม่ใช่ไฟล์ APK !!
Shashank Kadne

2
@ShashankKadne อาจเป็นเพราะฉันไม่ได้รับคำพูดของฉันคืนมา
MAC

3

ใช่คุณสามารถรับโครงการคืนได้ เพียงเปลี่ยนชื่อyourproject.apkไฟล์เป็นyourproject.zipและคุณจะได้รับไฟล์ทั้งหมดที่อยู่ในไฟล์ ZIP นั้น เรากำลังเปลี่ยนนามสกุลไฟล์จาก. apk เป็น. zip จากไฟล์ ZIP นั้นให้แตกไฟล์classes.dexไฟล์และถอดรหัสมันด้วยวิธีการดังต่อไปนี้

ก่อนอื่นคุณต้องมีเครื่องมือเพื่อแยกคลาส (คอมไพล์) ทั้งหมดบน DEX ไปยัง JAR มีหนึ่งชื่อdex2jarซึ่งทำโดยนักเรียนจีน

จากนั้นคุณสามารถใช้JD-GUIเพื่อถอดรหัสคลาสใน JAR ไปยังซอร์สโค้ด ซอร์สโค้ดผลลัพธ์ควรอ่านได้ค่อนข้างดีเนื่องจาก dex2jar ใช้การปรับให้เหมาะสมที่สุด


3

สำหรับแพลตฟอร์ม Android คุณสามารถลองShowJavaได้ที่ Play Store

คุณสามารถศึกษารหัสที่สร้างขึ้นผ่านส่วนต่อประสานของแอพและโครงสร้างไฟล์และโฟลเดอร์ java ที่สร้างขึ้นจะถูกเก็บไว้ในShowJavaโฟลเดอร์/sdcardพร้อมกับ.jarไฟล์ผลลัพธ์จากการแปลง

แอพนี้ไม่มีแบนเนอร์โฆษณาที่ด้านล่างของมุมมองหลัก แต่มีตัวเลือกการซื้อในแอพ (3,99 $) เพื่อลบออก การซื้อในแอปไม่ได้เพิ่มฟังก์ชั่นใด ๆ นอกเหนือจากลบแบนเนอร์โฆษณา

การเปิดเผยข้อมูล: ฉันไม่ใช่นักพัฒนาของแอปและไม่ได้เป็นพันธมิตรกับเขา แต่อย่างใด


ฉันมักจะใช้เพื่อ ... แอพที่ดี
Rahul Kushwaha

2

ทำตามขั้นตอนด้านล่างเพื่อทำสิ่งนี้หรือเพียงแค่ใช้apkToJava gemสำหรับกระบวนการนี้มันยังดูแลการติดตั้งเครื่องมือที่จำเป็นเพื่อให้ใช้งานได้

  • แปลงไฟล์ apk เป็น zip
  • แตกไฟล์
  • แยกคลาส.dexจากมัน
  • ใช้ dex เพื่อ jar เพื่อแปลง classes.dex เป็นไฟล์ jar
  • ใช้ jadx gui เพื่อเปิดไฟล์ jar เป็นซอร์สโค้ดจาวา

2

หากคุณกำลังมองหาทางเลือกมืออาชีพลองดูJEB Decompilerจาก PNF Software

มีเวอร์ชั่นเดโมที่จะให้คุณถอดรหัสรหัสส่วนใหญ่ได้


2

ด้านล่างนี้เป็นเครื่องมือบางส่วนที่คุณสามารถใช้ในการทำวิศวกรรมย้อนกลับจากไฟล์ APK ไปยังซอร์สโค้ด:

  1. Dex2jar
  2. decompiler Java
  3. Apktool
  4. Apk Analyzer

2

ใน Android Studio 3.5 มันเป็นเรื่องง่ายมากที่คุณสามารถทำได้ในไม่กี่นาที ต่อไปนี้เป็นกระบวนการที่ชาญฉลาดขั้นตอน

1:เปิด Android Studio กดปุ่มหน้าต่าง -> พิมพ์ Android Studio -> คลิกที่ไอคอนเพื่อเปิดหน้าจอ Android Studio ซึ่งจะมีลักษณะเช่นนี้

ป้อนคำอธิบายรูปภาพที่นี่

2: ที่นี่คุณสามารถเห็นตัวเลือก"โปรไฟล์หรือดีบัก APK"คลิกที่มันแล้วเลือกไฟล์ apk ของคุณแล้วกดตกลง

ป้อนคำอธิบายรูปภาพที่นี่

3: มันจะเปิดคลาส Manifest และจาวาทั้งหมดของคุณภายในหนึ่งนาทีขึ้นอยู่กับขนาดของ apk

ป้อนคำอธิบายรูปภาพที่นี่

แค่นั้นแหละ.


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