มีวิธีการรับซอร์สโค้ดจากไฟล์ APK หรือไม่


1261

ฮาร์ดไดรฟ์ในแล็ปท็อปของฉันเพิ่งพังและฉันทำรหัสที่มาทั้งหมดสำหรับแอปที่ฉันใช้งานมาสองเดือนที่ผ่านมา สิ่งที่ฉันมีคือไฟล์ APK ที่เก็บไว้ในอีเมลของฉันเมื่อฉันส่งให้เพื่อน

มีวิธีใดที่จะดึงซอร์สโค้ดของฉันจากไฟล์ APK นี้


28
FYI มี decompiler ออนไลน์ตรวจสอบที่นี่
— edwin

11
นี่หมายความว่าเราสามารถรับซอร์สโค้ดมูลค่าหลายล้านดอลลาร์เช่นแอพ Whatsapp หรือ Facebook ได้หรือไม่? นี่เป็นโอเพนซอร์สทั้งหมดหรือไม่
— Faizan

3
คุณได้ยิน @Faizan เกี่ยวกับผู้พิทักษ์หรือยัง?
— Vishwajit Palankar

1
ถ้อยคำของคำถามที่ไม่เกี่ยวข้องจะมีเกร็ดเล็กเกร็ดเรื่องราวในชีวิตและเป็นเช่นนี้อาจตีความได้ว่าแนะนำเครื่องมือ แต่คำตอบอาจเป็นไปได้javac -decompileซึ่งจะสอดคล้องกับแนวทางของ SO สำหรับฉันดูเหมือนว่าคำตอบนั้นไม่ใช่หัวข้อไม่ใช่คำถาม
— SwiftArchitect

2
ในบทความนี้พวกเขาอธิบายว่าพวกเขาทำวิศวกรรมย้อนกลับ Pokemon Go
— anders

คำตอบ:


1569

วิธีง่ายๆ: ใช้เครื่องมือออนไลน์http://www.javadecompilers.com/apkอัปโหลด apk และรับซอร์สโค้ด


โพรซีเดอร์สำหรับการถอดรหัสไฟล์. apk วิธีการทีละขั้นตอน:

ขั้นตอนที่ 1:

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

  2. ตอนนี้เปลี่ยนชื่อนามสกุลของไฟล์. apk นี้เป็น. zip (เช่นเปลี่ยนชื่อจาก filename.apk เป็น filename.zip) และบันทึก ตอนนี้คุณสามารถเข้าถึงไฟล์ classes.dex ฯลฯ ในขั้นตอนนี้คุณสามารถดู drawable แต่ไม่ใช่ไฟล์ xml และ java ดังนั้นดำเนินการต่อ

ขั้นตอนที่ 2:

  1. ตอนนี้แยกไฟล์. zip นี้ในโฟลเดอร์เดียวกัน (หรือโฟลเดอร์ใหม่)

  2. ดาวน์โหลด dex2jarและแตกไปยังโฟลเดอร์เดียวกัน (หรือโฟลเดอร์ใหม่)

  3. ย้ายไฟล์ classes.dex ไปยังโฟลเดอร์ dex2jar

  4. ตอนนี้ให้เปิดพร้อมท์คำสั่งและเปลี่ยนไดเรกทอรีเป็นโฟลเดอร์นั้น (หรือโฟลเดอร์ใหม่) จากนั้นเขียนd2j-dex2jar classes.dex(สำหรับ mac terminal หรือ ubuntu write ./d2j-dex2jar.sh classes.dex) แล้วกด Enter ตอนนี้คุณมีไฟล์ classes.dex.dex2jar ในโฟลเดอร์เดียวกัน

  5. ดาวน์โหลด java decompilerดับเบิลคลิกที่ jd-gui คลิกที่ไฟล์ open และเปิดไฟล์ classes.dex.dex2jar จากโฟลเดอร์นั้น: ตอนนี้คุณจะได้ไฟล์คลาส

  6. บันทึกไฟล์คลาสเหล่านี้ทั้งหมด (ใน jd-gui คลิกไฟล์ -> บันทึกแหล่งที่มาทั้งหมด) ด้วยชื่อ src ในขั้นตอนนี้คุณจะได้รับซอร์ส java แต่ไฟล์. xml ยังคงไม่สามารถอ่านได้ดังนั้นให้ดำเนินการต่อ

ขั้นตอนที่ 3:

ตอนนี้เปิดโฟลเดอร์ใหม่อีกอัน

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

  2. ดาวน์โหลดรุ่นล่าสุดของapktool และ apktool ติดตั้งหน้าต่าง (ทั้งสามารถดาวน์โหลดได้จากลิงค์เดียวกัน) และวางไว้ในโฟลเดอร์เดียวกัน

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

  4. ตอนนี้เรียกใช้คำสั่งเช่นapktool if framework-res.apk(ถ้าคุณไม่ได้รับมันที่นี่ ) และต่อไป

  5. apktool d myApp.apk (ที่ myApp.apk หมายถึงชื่อไฟล์ที่คุณต้องการถอดรหัส)

ตอนนี้คุณจะได้รับโฟลเดอร์ไฟล์ในโฟลเดอร์นั้นและสามารถอ่านไฟล์ xml ของ apk ได้อย่างง่ายดาย

ขั้นตอนที่ 4:

ไม่ใช่ขั้นตอนเพียงคัดลอกเนื้อหาของทั้งสองโฟลเดอร์ (ในกรณีนี้ทั้งสองโฟลเดอร์ใหม่) ไปยังโฟลเดอร์เดียว

และเพลิดเพลินไปกับรหัสที่มา ...


26
@prankulgarg ในจุดที่ 5 ของขั้นตอนที่ 3 ฉันได้รับข้อผิดพลาดดังต่อไปนี้: ไม่สามารถเข้าถึง jarfile E: \ apktojava \ testt \\ apktool.jar

55
แทนการเขียนdex2jar classes.dexใน cmd ลองd2j-dex2jar classes.dex เนื่องจาก dex2jar classes.dex cmd นี้เลิกใช้แล้ว
— Umesh

23
สำหรับผู้ที่ไม่สามารถหาframework-res.apkได้ ดาวน์โหลดได้จากที่นี่
— atulkhatri

12
ผู้ที่ไม่พบ d2j-dex2jar.sh ให้ดาวน์โหลด dex2jar จากที่นี่: dex2jar.googlecode.com/files/dex2jar-0.0.9.15.zip
— Reaz Murshed

14
สำหรับคนที่ติดอยู่ในขั้นตอนที่ 2: 4 ดาวน์โหลดรุ่นนี้และมันจะแก้ปัญหา: sourceforge.net/projects/dex2jar/files/dex2jar-2.0.zip/downloadมันทำเพื่อฉัน @delive
— siriuseteor77

126

นี่เป็นคำอธิบายทางเลือก - ในกรณีที่มีคนติดอยู่กับคำอธิบายข้างต้น ทำตามขั้นตอน:

  1. ดาวน์โหลดapktool.bat(หรือapktoolสำหรับ Linux) และapktool_<version>.jarจาก http://ibotpeaches.github.io/Apktool/install/
  2. เปลี่ยนชื่อไฟล์ jar จากด้านบนเป็น apktool.jarและวางทั้งสองไฟล์ในโฟลเดอร์เดียวกัน

  3. เปิดกล่อง doscmd.exe ) และเปลี่ยนเป็นโฟลเดอร์นั้น ตรวจสอบว่ามีการติดตั้ง Java Environment (สำหรับ Linux ตรวจสอบหมายเหตุเกี่ยวกับไลบรารีที่ต้องการด้วย)
  4. ราคาเริ่มต้น: apktool decode [apk file]

    ผลลัพธ์ระดับกลาง : ไฟล์ทรัพยากร,AndroidManifest.xml

  5. เปิดเครื่องรูดไฟล์ APK ด้วยตัวขยายที่คุณเลือก

    ผลกลาง :classes.dex

  6. ดาวน์โหลดและดึงข้อมูลdex2jar-0.0.9.15.zipจาก http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=
  7. ลากและวางลงclasses.dexบนdex2jar.bat(หรือป้อน<path_to>\dex2jar.bat classes.dexในกล่อง DOS สำหรับการใช้งาน Linuxdex2jar.sh )

    ผลกลาง :classes_dex2jar.jar

  8. แกะ classes_dex2jar.jar (อาจเป็นตัวเลือกขึ้นอยู่กับ decompiler ที่ใช้)
  9. แยกไฟล์คลาสของคุณ (เช่นกับJD-GUIหรือDJ Decompiler )

    ผลลัพธ์ : ซอร์สโค้ด

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


6
ฉันอาจเพิ่มว่ามีทางเลือกที่ทันสมัยสำหรับเส้นทาง APKTool-> dex2jar-> JD-GUI นี้! ลองใช้ตัวถอดรหัส APK และ DEX แบบโอเพนซอร์สที่ชื่อ Jadx: sourceforge.net/projects/jadx/files นอกจากนี้ยังมีเวอร์ชันออนไลน์ที่นี่: javadecompilers.com/apk
— Andrew Rukin

1
ได้รับอนุญาต (อ่าน: ถูกกฎหมาย) เพื่อแยกไฟล์ APK ใด ๆ ดูคำถามต่อไปนี้: stackoverflow.com/questions/9674557/…
— Rakete1111

1
ทำไมไฟล์เหล่านั้นapktoolส่งคืนsmali? จะรับjavaไฟล์ได้อย่างไร
— rminaj

108

แม้ว่าคุณจะสามารถถอดรหัสAPKไฟล์ของคุณได้แต่คุณอาจประสบปัญหาใหญ่อย่างหนึ่ง:

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

น่าเศร้าที่สิ่งต่าง ๆ เช่นนี้ได้ฆ่าหลายโครงการ
สำหรับอนาคตฉันขอแนะนำให้เรียนรู้ระบบควบคุมเวอร์ชันเช่นCVS , SVNและgitเป็นต้น

และวิธีสำรองข้อมูล


19
บริการอย่าง Dropbox ก็ช่วยได้เช่นกัน
— Jeremy Logan

1
และมีวิธีการเขียนซีดีอยู่เสมอ
— JerryGoyal

52

นอกจากนี้ยังมีแอปพลิเคชั่นใหม่ในPlay Storeซึ่งสามารถถอดรหัส apk (แอปพลิเคชันระบบ) และดูรหัสต้นฉบับได้จากสมาร์ทโฟนของคุณ มันบันทึกไฟล์ลงในการ์ด SD ของคุณเพื่อให้คุณสามารถดูบนคอมพิวเตอร์ของคุณได้เช่นกัน มันไม่จำเป็นต้องรูทหรืออย่างอื่น

เพียงติดตั้งและสนุก ฉันคิดว่านี่เป็นวิธีที่ง่ายที่สุดในการแยกแอปออก


1
อันนี้ง่ายที่สุด
— Midhun Vijayakumar

@MidhunVijayakumar คุณสามารถไปที่การแปลง apk เป็นรหัสที่มาโดยใช้นี้
— Sajeev

28

apktoolเป็นสิ่งที่ดีที่สุดที่คุณสามารถลองได้ ฉันบันทึก xml ไว้ด้วยแล้ว แต่จริงๆแล้วฉันไม่รู้ว่ามันจะทำงานอย่างไรกับโค้ด. java

ฉันอยากจะแนะนำให้คุณมีที่เก็บรหัสแม้ว่าคุณจะเป็น coder เพียงคนเดียวก็ตาม ฉันใช้Project Lockerสำหรับโครงการของตัวเอง มันให้คุณฟรี svn และ git repos


คุณจะพบว่า apktool จำเป็นถ้าคุณต้องการแยกทรัพยากร (เช่นรูปภาพจากแอปพลิเคชัน Android จริง ๆ แล้วเครื่องมือไม่มีคู่แข่งเลย!) เวอร์ชั่นออนไลน์ของ apktool มีให้ที่นี่: www.javadecompilers.com/apktool
— Andrew Rukin

23

บทความทั้งสองนี้อธิบายวิธีรวมการใช้apktoolและdex2jarการใช้APKไฟล์และสร้างโครงการ Eclipse ที่สามารถสร้างและเรียกใช้

http://blog.inyourbits.com/2012/11/extending-existing-android-applications.html

http://blog.inyourbits.com/2012/12/extending-existing-android-applications.html

โดยทั่วไปคุณ:

  1. ใช้ apktoolเพื่อดึงไฟล์ทรัพยากรออกจาก apk
  2. ใช้dex2jarเพื่อรับไฟล์ jar ที่มีคลาสในรูปแบบที่ Eclipse จะชอบ
  3. สร้างโปรเจ็กต์ Eclipse ชี้ไปที่ไฟล์รีซอร์สและไฟล์ jar ใหม่
  4. เปิดไฟล์ jar ด้วยยูทิลิตี้ zip และลบทรัพยากรที่มีอยู่
  5. เปิดไฟล์ jar ด้วยJDGuiเพื่อดูซอร์สโค้ด
  6. ใช้ซอร์สโค้ดอะไรก็ได้ที่คุณต้องการจากJDGuiนั้นติดไว้ในคลาสภายใน Eclipse และทำการแก้ไข
  7. ลบคลาสนั้นออกจากไฟล์ jar (ดังนั้นคุณไม่มีคลาสเดียวกันที่กำหนดไว้หลายครั้ง)
  8. เรียกใช้

2
ฉันรู้ว่าคำถามนี้ยังคงตอบฉันอยากจะส่งข้อมูล: มี decompiler ออนไลน์สำหรับ Android apks decompileandroid.com อัปโหลด apk จากเครื่องท้องถิ่นรอสักครู่ดาวน์โหลดซอร์สโค้ดในรูปแบบซิป
— Snehal Masne

2
เสียงดี. แล้วเว็บไซต์ decompileandroid ก็มีสำเนาของแหล่งข้อมูลของคุณทั้งหมด! ฉลาด!
— DDSports

คำถามหนึ่งฉันมี apk decompiled แต่ใน jd gui ฉันไม่รู้ว่ามี class จริงของ java หรือไม่คุณรู้หรือไม่ว่ามี apk decompiled มีคลาส Java จริงหรือไม่

21

apktool จะทำงาน คุณไม่จำเป็นต้องรู้ที่เก็บคีย์เพื่อดึงซอร์สโค้ด (ซึ่งน่ากลัวนิดหน่อย) ข้อเสียเปรียบหลักคือแหล่งที่มาจะถูกนำเสนอในรูปแบบ Smali แทน Java ไฟล์อื่น ๆ เช่นไอคอนและ main.xml ผ่านมาได้อย่างสมบูรณ์แบบและอาจคุ้มค่ากับเวลาของคุณในการกู้คืนไฟล์เหล่านั้นอย่างน้อย ในที่สุดคุณจะต้องเขียนโค้ด Java ใหม่ตั้งแต่ต้น

คุณสามารถค้นหา apktool ที่นี่ เพียงดาวน์โหลด apktool และผู้ช่วยที่เหมาะสม (สำหรับ Windows, Linux หรือ Mac OS) ฉันแนะนำให้ใช้เครื่องมือเช่น 7-zip เพื่อแกะออก


16

มีสองสามวิธีในการทำสิ่งนี้:

  1. ใช้ฟีเจอร์ "Profile or Debug APK" ใน Android Studio 3.0

    ช่วยให้คุณเปิดและสำรวจ APK ใน Android Studio คลาสจะถูกจำแนกเป็น smali ทรัพยากรจะไม่ถูกดึงออกมาและสิ่งต่าง ๆ เช่น "ไปที่คำจำกัดความ", "ค้นหาการอ้างอิงทั้งหมด" และการดีบักไม่ทำงานหากไม่มีซอร์สโค้ด (android studio 3.0 canary 9) คุณสมบัติเพิ่มเติม smali บางคนอาจทำงานร่วมกับsmalidea

    หุ่นยนต์สตูดิโอ

    เลือกไฟล์

    รหัส

  2. ใช้jadx

    Jadx ถอดรหัสรหัสในไฟล์ต้นฉบับ APK เป็น java ที่กำหนด

    jdax-img

  3. ใช้apktool

    Apktool เป็นเครื่องมือบรรทัดคำสั่งที่แยกทรัพยากรและถอดรหัสรหัสเป็น smali สำหรับ apk ที่กำหนด คุณสามารถคอมไพล์ใหม่ได้โดยใช้ apktool นี่คือตัวอย่างของการใช้งานจริง:

    $ apktool d test.apk
    I: Using Apktool 2.2.4 on test.apk
    I: Loading resource table...
    I: Decoding AndroidManifest.xml with resources...
    I: Loading resource table from file: 1.apk
    I: Regular manifest package...
    I: Decoding file-resources...
    I: Decoding values */* XMLs...
    I: Baksmaling classes.dex...
    I: Copying assets and libs...
    I: Copying unknown files...
    I: Copying original files...
    $ apktool b test
    I: Using Apktool 2.2.4 on test
    I: Checking whether sources has changed...
    I: Smaling smali folder into classes.dex...
    I: Checking whether resources has changed...
    I: Building resources...
    I: Building apk file...
    I: Copying unknown files/dir...

ฉันได้ลอง jadx แล้ว แต่ถึงกับ helloworld ที่เรียบง่ายแม้ว่ามันจะแยกออกเป็น java แต่ก็พยายามที่จะเปิดโครงการใน android studio และรวบรวมกลับไปเป็น apk ล้มเหลวด้วยเหตุผลหลายประการ (ไฟล์ทำซ้ำ ฯลฯ ) มีวิธีใดบ้างที่สร้างจาวาที่สามารถคอมไพล์กลับไปเป็น apk ได้?
— ransh

1
@ransh ฉันมักจะใช้ jadx เพื่ออ่านรหัสแล้ว apktool เพื่อแก้ไขรหัส apktool ไม่ได้สร้างจาวา แต่สามารถทำการคอมไพล์ใหม่ได้
— 0xcaff

0xcaff ขอขอบคุณสำหรับการชี้แจง ที่เหมาะสมตอนนี้ เพราะพยายามรวบรวม decompile java ใน android studio ไม่ทำงาน
— ransh

16

อาจเป็นแหล่งที่ง่ายต่อการดูแหล่งที่มา:

ในสตูดิโอของ Android Build -> Analyze APK -> Select the apk that you want to decompile2.3
คุณจะเห็นมันเป็นรหัสที่มา

ลิงก์สำหรับการอ้างอิง:
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2


9
มันแสดงรายการคลาสและวิธีการ แต่ไม่ให้รหัสแหล่งที่มา
— WSS

คุณสามารถรับไฟล์ด้านบนได้โดยการเปลี่ยน ".apk" เป็น ".zip"
— M. Usman Khan

7

ฉันจะแสดงวิธีอื่นในการถอดรหัสไฟล์. apk

คุณสามารถทำตาม 2 ขั้นตอนแรกจาก " prankul garg " ดังนั้นคุณมีโอกาสอื่น:

ขั้นตอนที่ 3 ':

ดาวน์โหลด"JD-GUI"ที่พบได้ง่าย เปิดไฟล์. jarของคุณใน "jd-gui.exe" (ไฟล์> เปิดไฟล์> 'พบไฟล์. jarของคุณ') หลังจากโพรซีเดอร์นี้คุณสามารถบันทึกรีซอร์สทั้งหมดใน. zipไฟล์

ดังนั้น,

วันที่ 1 - คุณต้องเปลี่ยนชื่อไฟล์. apkเป็น . zip

2nd - คุณต้องถอดรหัสไฟล์. doc (หากคุณต้องการถอดรหัสไฟล์. apkเป็นdex2jarเป็นไปได้)

อันดับที่ 3 - คุณต้องถอดรหัสไฟล์. jarด้วยJD-GUI


20
คำตอบนี้ให้อะไรที่คนอื่นไม่ทำ
— Jørgen R

คุณไม่จำเป็นต้องเปลี่ยนชื่อเป็น zip ฉันสามารถเปิดไฟล์ apk โดยตรงด้วย 7-zip
— miva2

7

เครื่องมือออนไลน์ด้านล่าง:

http://www.javadecompilers.com/apk

ทำได้โดยคลิกเพียงครั้งเดียว: decompiled .java files + resources + xml (ในไฟล์. zip หนึ่งไฟล์) พร้อม decompiler ที่ดีมาก (jadx ส่งคืนรหัส java ในสถานที่ / ฟังก์ชั่นที่คอมไพล์อื่น ๆ แสดงความคิดเห็นภายในฟังก์ชันเช่น android assembler / รหัสเครื่อง)


ใช่มันยอดเยี่ยม แต่แทนที่จะชื่อฟังก์ชั่นมันเปลี่ยนชื่อฟังก์ชั่นทั้งหมดเป็น CS1001 และอื่น ๆ ดังนั้นวิธีการรับรู้เหล่านี้ และอีกอย่างหนึ่งที่เราสามารถใช้ apk ที่ถอดรหัสแล้วนี้โดยตรงเป็นโครงการสตูดิโอ Android ของเรามันจะใช้งานได้หรือไม่
— Zia Ur Rahman

ถ้าอย่างนั้นเราจะใช้ในการแปลความหมายของ apk ถ้าเราไม่สามารถใช้ฟังก์ชั่นการทำงานของมันในแอพของเรา
— Zia Ur Rahman

@ZiaUrRahman ฉันไม่รู้ อย่างไรก็ตามในกรณีของฉันฉันถอดรหัสรหัสเพื่อวิเคราะห์อัลกอริทึม คุณตรวจสอบว่าโค้ดที่ถอดรหัสจากเครื่องมือนั้นสามารถรวบรวมได้โดย android studio โดยอัตโนมัติหรือไม่หรือต้องการ "การประมวลผลของมนุษย์" บ้างไหม?
— Kamil Kiełczewski

1
ฉันนำเข้าโครงการ decompiled ใน android studio แต่ไม่มี gradle ที่นั่นและโครงการมีไฟล์จำนวนมาก แต่ไม่เข้าใจจนกว่าเราจะรัน เพียงแค่มันไม่ทำงาน ฉันจำเป็นต้องทำให้โครงการ decompiled อย่างเต็มที่ฟังก์ชั่นใน Android สตูดิโอแล้วได้รับฟังก์ชั่นหลักของบางคนแล้วต้องการใช้ / ฝังในโครงการของฉันเอง ดังนั้นมีวิธีใดที่จะทำเช่นนี้?
— Zia Ur Rahman

6

ไซต์นี้https://www.apkdecompilers.com/ทำโดยอัตโนมัติ

ฉันลองเว็บไซต์ที่กล่าวถึงในคำตอบที่ยอมรับก่อน แต่มันไม่ได้ผลสำหรับฉัน


ผมไม่สามารถดึงโค้ด Java ของฉัน ... มัน appeare somethins เช่นไฟล์ที่แนบมาและ ..
— Iman kazemayni

@imankazemayni ในลิงก์ด้านบน "เรียกดู" ไปยังไฟล์ APK ของคุณและคลิกที่ "Decompile APK ของคุณ" จะใช้เวลาสักครู่และควรให้โค้ดต้นฉบับแก่คุณหากรหัสนั้นไม่ได้เข้ารหัส
— M. Usman Khan

คุณรู้หรือไม่ว่า Multidex มีผลต่อการเข้ารหัส?
— iman kazemayni

6

ฉันเองแนะนำShow Java Android Appเพื่อรับซอร์สโค้ด คุณสามารถดาวน์โหลดได้จาก play store หรือจากที่นี่


คอมไพเลอร์ออนไลน์ส่วนใหญ่ไม่ทำงาน แต่แอพนี้ใช้งานได้ ขอบคุณ
— นิล

4

Apktoolสำหรับวิศวกรรมย้อนกลับบุคคลที่สาม, ปิด, แอพ Android ไบนารี

มันสามารถถอดรหัสทรัพยากรเป็นรูปแบบเกือบต้นฉบับและสร้างใหม่หลังจากทำการปรับเปลี่ยนบางอย่าง

ทำให้สามารถดีบักโค้ด smali ทีละขั้นตอนได้ นอกจากนี้ยังทำให้การทำงานกับแอปง่ายขึ้นเนื่องจากโครงสร้างไฟล์เหมือนโครงการและระบบอัตโนมัติของงานซ้ำ ๆ เช่นการสร้าง apk เป็นต้น

http://ibotpeaches.github.io/Apktool/


3

apktoolเป็นวิธีที่จะไป มีบริการ apktool ออนไลน์เช่นกัน: http://www.javadecompilers.com/apktool

มีข้อ จำกัด บางอย่างที่ชัดเจนเนื่องจากบริการ 'ลักษณะออนไลน์': คุณอาจแยกและวิจัยสินทรัพย์และไฟล์รายการ แต่ไม่สามารถคอมไพล์แอปพลิเคชันใหม่ได้ในขณะนี้

ถึงกระนั้นนี่เป็นวิธีที่ไม่ยุ่งยากในการ "เปิด" แอปพลิเคชัน Android


3

คุณสามารถลองDexPatcher มันยังรวมเข้ากับ Android Studio มันใช้ApktoolและDex2Jarภายใน
คุณสามารถใช้เครื่องมือเหล่านี้ได้อย่างอิสระเช่นกัน Apktoolถอดรหัส apk และแยกไฟล์. dexซึ่งสามารถแปลงเป็น jar โดยใช้ Dex2Jar Jar สามารถ decompiled โดยใช้JD-GUI คุณสามารถดูรหัส Java ด้วยความช่วยเหลือของเครื่องมือนั้น แม้ว่าจะไม่สามารถรับประกันความคล้ายคลึงกันของรหัสที่ถอดรหัสกับรหัสจริงได้ มีเครื่องมือobfuscation โค้ดขั้นสูงที่มีอยู่ในท้องตลาดซึ่งทำให้โค้ดยุ่งเหยิงเพื่อทำให้ถอดรหัส / ทำความเข้าใจได้ยาก เช่น. Proguard


สวัสดีวิธีใช้ DexPatcher กับ Android Studio
— ravi152

ไม่สามารถอธิบายทุกสิ่งในความคิดเห็นได้ Google เป็นเพื่อนของคุณ :) มีบทช่วยสอน youtube ที่ดีเช่นกัน
— Lakshmikant Deshpande

2

ขึ้นอยู่กับสภาพของคุณถ้า Android apk ของคุณ:

สภาพที่ 1: ไม่แข็ง (โดย Tencent Legu / Qihoo 360 / ... )

ตัวเลือก 1: ใช้บริการออนไลน์

เช่น:

ใช้ www.javadecompilers.com

ไปที่:

เพื่อถอดรหัสอัตโนมัติจาก apk ไปเป็นซอร์สโค้ดจาวา

ขั้นตอน

uploadไฟล์ apk + คลิกRun+ รอสักครู่ + คลิกDownloadเพื่อรับ zip + unzip ->

sources/com/{yourCompanyName}/{yourProjectName}

คือซอร์สโค้ด Java ที่คุณคาดหวัง

Choice2: ถอดรหัส / ถอดรหัสด้วยตัวเอง

ใช้เครื่องมือที่เกี่ยวข้องเพื่อถอดรหัส / ถอดรหัสด้วยตัวเอง:

ใช้jadx/ jadx-guiแปลงapkเป็นjava sourcecode

ดาวน์โหลดjadx-0.9.0.zipจากนั้นคลายซิปที่จะได้รับbin/jadxจากนั้น:

  • โหมดบรรทัดคำสั่ง:
    • ใน terminal รัน: jadx-0.9.0/bin/jadx -o output_folder /path_to_your_apk/your_apk_file.apk
    • output_folder จะแสดงการถอดรหัสsourcesและresources
      • sources/com/{yourCompanyName}/{yourProjectName} เป็นที่คาดหวังของคุณ java sourcecode
  • โหมด GUI
    • ดับเบิลคลิกเพื่อเรียกใช้jadx-0.9.0/bin/jadx-gui(Linux's jadx-gui.sh/ Windows's jadx-gui.bat)
    • เปิดapkไฟล์
    • มันจะถอดรหัสอัตโนมัติ -> ดูซอร์สโค้ด Java ของคุณ
    • save all หรือ save as Gradle project

เช่น:

สภาพที่ 2: แข็ง (โดย Tencent Legu / Qihoo 360 / ... )

วิธีการหลักของ3 steps:

  1. apk/app to dex
  2. dex to jar
  3. jar to java src

คำอธิบายรายละเอียด:

ขั้นตอนที่ 1: apk/app to dex

ใช้เครื่องมือ ( FDex2/ DumpDex) ถ่ายโอนข้อมูล / เชื่อมต่อไฟล์ (หนึ่งหรือหลายdexไฟล์) จากแอปที่รันอยู่

ขั้นตอน

เตรียมสภาพแวดล้อม

  • rootเอ็ดหุ่นยนต์
  • ติดตั้ง apk android ของคุณ
    • ไปยังโทรศัพท์หรือโปรแกรมจำลอง
  • ติดตั้งXposed Installer
  • ติดตั้งFDex2/ DumpDexลงใน XPosed แล้วเปิดใช้งาน
  • ติดตั้ง apk android ของคุณไปยังโทรศัพท์ / โปรแกรมจำลอง

เททิ้ง dexจากแอปที่รันอยู่

  • เรียกใช้FDex2จากนั้นคลิกชื่อ apk ของคุณเพื่อเปิดใช้งานภายหลังเพื่อดักจับ / ขอ dex

  • (ในโทรศัพท์ / โปรแกรมจำลอง) เรียกใช้แอปของคุณ
  • ค้นหาและคัดลอกแหล่งข้อมูล apk ทั้งหมดใน /data/data/com/yourCompanyName/yourProjectName
    • ในโฟลเดอร์รูทปกติจะพบdexไฟล์หลายไฟล์

ขั้นตอนที่ 2: dex to jar

ใช้เครื่องมือ ( dex2jar) แปลงไฟล์ (เฉพาะแอพที่มีตรรกะ) dexไปเป็นjarไฟล์

ดาวน์โหลดdex2jarได้dex-tools-2.1-SNAPSHOT.zip , unzip ได้dex-tools-2.1-SNAPSHOT/d2j-dex2jar.shแล้ว

sh dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f your_dex_name.dex

เช่น:

dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.xxx.yyy8825612.dex
dex2jar com.xxx.yyy8825612.dex -> ./com.xxx.yyy8825612-dex2jar.jar

ขั้นที่ 3: jar to java src

ใช้เครื่องมืออย่างใดอย่างหนึ่ง:

แปลง jarเป็นjava src

for จาก jar เป็น java src การแปลงเอฟเฟกต์:

Jadx> Procyon>CRF >>JD-GUI

ดังนั้นแนะนำให้ใช้: Jadx /jadx-gui

ขั้นตอน

  • ดับเบิลคลิกเพื่อเรียกใช้ jadx-gui
  • เปิด dexไฟล์
  • File -> save all

เช่น:

ส่งออก java src:


คำอธิบายโดยละเอียดเพิ่มเติมสามารถดูการสอนภาษาจีนออนไลน์ ebook ของฉัน:


2

Android studio ให้คุณวิเคราะห์ไฟล์ apk ใด ๆ

1 - จากเมนูสร้างเลือกวิเคราะห์ตัวเลือก apk และเลือกไฟล์ apk 2 - สิ่งนี้จะส่งผลให้คุณมีไฟล์ classes.dex และไฟล์อื่น ๆ 3 - คลิกที่ classes.dex ซึ่งจะแสดงรายการโฟลเดอร์แพ็คเกจไลบรารีและไฟล์ต่างๆให้คุณ 4 - จากและการตั้งค่าสตูดิโอ android ติดตั้งปลั๊กอินที่เรียกว่า "Dex to Jar" 5 - คลิกที่ไฟล์กิจกรรมใด ๆ ของโครงการสกัดของคุณและเลือก dex เพื่อ jar จากเมนูสร้าง

ซึ่งจะส่งผลให้คุณเห็นรหัสจริงของไฟล์ java ของคุณ

ไชโย


1

วิธีที่ง่ายที่สุดคือการใช้ Apk OneClick Decompiler นั่นคือแพคเกจเครื่องมือในการแปล & ถอดรหัส APKs (Android package)

คุณสมบัติ

  • คุณสมบัติทั้งหมดรวมอยู่ในเมนูคลิกขวาของ Windows
  • แยกคลาส APK ไปเป็นซอร์สโค้ด Java
  • แยก APK เพื่อโค้ด smali และถอดรหัสทรัพยากร
  • ติดตั้ง APK ไปยังโทรศัพท์โดยคลิกขวา
  • คอมไพล์ไฟล์ APK ใหม่อีกครั้งหลังจากแก้ไขโค้ด smali และ / หรือทรัพยากร ระหว่างการคอมไพล์ใหม่:
  • ปรับภาพ png ให้เหมาะสม
  • ลงชื่อ apks
  • zipalign

ที่ต้องมี

ต้องติดตั้ง Java Runtime Environment (JRE)

คุณสามารถดาวน์โหลดได้จากลิงค์นี้Apk OneClick Decompiler

สนุกไปกับมัน


1

ฉันพบต่อไปนี้เป็นวิธีที่ง่ายที่สุด:

  1. เปลี่ยนชื่อแอปของคุณ apk เป็น app.zip (เปลี่ยนนามสกุลจาก apk เป็น zip)
  2. แตกไฟล์ zip ลงในโฟลเดอร์
  3. ใช้เครื่องมือJADXเพื่ออ่านซอร์สโค้ดซึ่งมีอยู่ในไฟล์ classes.dex

1

มีแอพสำหรับสิ่งนั้นและโดยทั่วไปใช้เวลาเพียงไม่กี่คลิกและคุณก็ทำเสร็จแล้ว https://github.com/Nuvolect/DeepDive-Android

  1. เลือกแอปภายใต้ "แอพที่ติดตั้ง" เลือกแอปของคุณ หากไม่มีคุณสามารถโหลด APK
  2. เลือก "แยก APK"
  3. เลือก "Unpack APK"
  4. เลือก "Decompile with Jadx" การดำเนินการนี้อาจใช้เวลาสองสามวินาทีหรือสองสามนาทีขึ้นอยู่กับความเร็วของอุปกรณ์ของคุณ

หลังจากนั้นคุณสามารถเรียกดูซอร์สโค้ดดาวน์โหลดไปยังคอมพิวเตอร์เครื่องอื่นที่มี elFinder หรือค้นหาโดยใช้ Lucene

นอกจาก Jadx แล้วยังมีตัวถอดรหัส CFR และ Fernflower


0

ฉันขับบ้าไปหลายวันแล้วที่พยายามทำให้ dex2jar ทำงานบนแล็ปท็อป fedora 31 เทียบกับ apk ที่เพิ่งจะไม่ทำงาน สคริปต์ python 3 นี้ใช้เคล็ดลับในไม่กี่นาทีและการติดตั้ง jd-gui ทำให้ไฟล์คลาสอ่านง่าย

http://java-decompiler.github.io/

https://github.com/Storyyeller/enjarify

โดยเฉพาะนี่คือสิ่งที่ฉันวิ่ง:

# i installed apktool before the rest of the stuff, may not need it but here it is
$> cd /opt
$> sudo mkdir apktool
$> cd apktool/
$> sudo wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool
$> sudo wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.4.1.jar
$> sudo mv apktool_2.4.1.jar apktool.jar
$> sudo mv apktool* /usr/bin/
$> sudo chmod a+x /usr/bin/apktool*

# and enjarify
$> cd /opt
$> sudo git clone https://github.com/Storyyeller/enjarify.git
$> cd enjarify/
$> sudo ln -s /opt/enjarify/enjarify.sh /usr/bin/enjarify

# and finally jd-gui
$> cd /opt
$> sudo git clone https://github.com/java-decompiler/jd-gui.git
$> cd jd-gui/
$> sudo ./gradlew build

# I made an alias to kick of the jd-gui with short commandline rather than long java -jar blahblahblah :)
$> echo "jd-gui='java -jar /opt/jd-gui/build/launch4j/lib/jd-gui-1.6.6.jar'" >> ~/.bashrc

ตอนนี้เราน่าจะสามารถรัมต่อไปนี้เพื่อรับไฟล์คลาส:

$> enjarify yourapkfile.apk

และเพื่อเริ่ม jd-gui:

$> jd-gui

จากนั้นเพียงแค่เปิดไฟล์คลาสของคุณ!



0

ใช้เครื่องมือนี้ http://www.javadecompilers.com/

แต่เมื่อไม่นานมานี้คลื่น decompilers ใหม่ได้เข้าสู่ตลาด: Procyon, CFR, JD, Fernflower, Krakatau, Candle

ต่อไปนี้เป็นรายการตัวถอดรหัสข้อมูลที่แสดงบนเว็บไซต์นี้

CFR - ฟรีไม่มีซอร์สโค้ดใช้ได้http://www.benf.org/other/cfr/ ผู้แต่ง: Lee Benfield

decompiler ที่อัปเดตดีมาก! CFR สามารถถอดรหัสคุณสมบัติ Java ที่ทันสมัย ​​- โมดูล Java 9, Java 8 lambdas, สวิตช์ Java 7 String และอื่น ๆ มันจะทำให้การเปลี่ยนคลาสไฟล์จาก JVM langauges อื่น ๆ เป็น java ได้อย่างดีเยี่ยม!

JD - ฟรีสำหรับการใช้ที่ไม่ใช่เชิงพาณิชย์เท่านั้นhttp://jd.benow.ca/ ผู้แต่ง: Emmanuel Dupuy

อัปเดตในปี 2558 มีอินเทอร์เฟซภาพและปลั๊กอินเป็นของตัวเองเพื่อ Eclipse และ IntelliJ เขียนด้วยภาษา C ++ เร็วมาก รองรับ Java 5

Procyon - โอเพ่นซอร์ส, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler ผู้แต่ง: Mike Strobel

Fernflower - โอเพ่นซอร์ส, https://github.com/fesh0r/fernflower ผู้แต่ง: Egor Ushakov

อัปเดตในปี 2558 เครื่อง decompiler เชิงวิเคราะห์ Java ที่มีแนวโน้มมากตอนนี้กลายเป็นส่วนสำคัญของ IntelliJ 14. ( https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler ) รองรับ Java จนถึงเวอร์ชัน 6 (คำอธิบายประกอบ, generics, enums)

JAD - ให้ไว้ที่นี่ด้วยเหตุผลทางประวัติศาสตร์เท่านั้น ฟรีไม่มีซอร์สโค้ดกระจกดาวน์โหลด jad ผู้แต่ง: Pavel Kouznetsov

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