มีวิธีการรับซอร์สโค้ดจากไฟล์ 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.