เป็นไปได้ที่จะ "ถอดรหัส" ไฟล์ Windows .exe หรือไม่ หรืออย่างน้อยก็ดูสภา


237

เพื่อนของฉันดาวน์โหลดมัลแวร์บางตัวจาก Facebook และฉันอยากรู้ว่ามันทำอะไรโดยไม่ติดเชื้อตัวเอง ฉันรู้ว่าคุณไม่สามารถคอมไพล์ไฟล์. exe ได้ แต่อย่างน้อยฉันสามารถดูในแอสเซมบลีหรือแนบดีบักเกอร์ได้หรือไม่

แก้ไขเพื่อบอกว่าไม่ใช่. NET ที่สามารถเรียกทำงานได้ไม่มีส่วนหัว CLI


3
มัลแวร์จาก facebook ?? คุณช่วยอธิบายได้มั้ย
Aditya Mukherji

ขออภัยในการตอบกลับช้าสุด ... แต่วิธีที่ฉันคิดว่ามันเกิดขึ้นก็คือ: เธอวิ่งมัลแวร์ชิ้นหนึ่งซึ่งบางครั้งสแปมที่อยู่ติดต่อทั้งหมดของเธอบน FB (ฉัน) พร้อมลิงก์ไปยัง "วิดีโอ" ที่ขอให้คุณ ดาวน์โหลด "codec ใหม่" ฉันถือว่ามันทำตัวเหมือนหนอนในแง่นี้
swilliams

คำตอบ:


447

ด้วยดีบักเกอร์คุณสามารถผ่านแอสเซมบลีโปรแกรมแบบโต้ตอบ
ด้วยdisassemblerคุณสามารถดูแอสเซมบลีของโปรแกรมในรายละเอียดเพิ่มเติม
ด้วยdecompilerคุณสามารถเปลี่ยนโปรแกรมกลับไปเป็นซอร์สโค้ดบางส่วนโดยสมมติว่าคุณรู้ว่ามันถูกเขียนด้วยอะไร (ซึ่งคุณสามารถค้นหาด้วยเครื่องมือฟรีเช่นPEiD - ถ้าโปรแกรมบรรจุแล้วคุณจะต้องคลายไฟล์ก่อน) หรือตรวจจับได้ง่ายถ้าคุณไม่สามารถหา PEiD ได้ทุกที่ DIE มีชุมชนนักพัฒนาซอฟต์แวร์ที่แข็งแกร่งในGitHubในปัจจุบัน)

แก้จุดบกพร่อง:

  • OllyDbgฟรีตัวดีบั๊ก 32 บิตซึ่งคุณสามารถค้นหาปลั๊กอินและสคริปต์ที่ผู้ใช้ทำมากมายเพื่อให้มีประโยชน์มากขึ้น
  • WinDbgฟรี Microsoft เป็นดีบักเกอร์ที่มีความสามารถ WinDbg มีประโยชน์อย่างยิ่งสำหรับการดู Windows internals เนื่องจากมันรู้เพิ่มเติมเกี่ยวกับโครงสร้างข้อมูลมากกว่าตัวแก้จุดบกพร่องอื่น ๆ
  • SoftICE , SICE ถึงเพื่อน การค้าและการพัฒนาหยุดลงในปี 2549 SoftICE เป็นเครื่องมือที่ไม่ยอมใครง่ายๆที่ทำงานภายใต้ระบบปฏิบัติการ (และหยุดทั้งระบบเมื่อเรียกใช้) SoftICE ยังคงถูกใช้งานโดยผู้เชี่ยวชาญหลายคนแม้ว่าอาจจะยากที่จะได้รับและอาจไม่ทำงานกับฮาร์ดแวร์บางตัว (หรือซอฟต์แวร์ - กล่าวคือมันจะไม่ทำงานบนการ์ด Vista หรือ NVIDIA gfx)

Disassemblers:

  • IDA Pro (commercial) - ด้านบนของ disassembler / debugger สาย ใช้งานโดยมืออาชีพส่วนใหญ่เช่นนักวิเคราะห์มัลแวร์ ฯลฯ มีค่าใช้จ่ายค่อนข้างน้อย (มีรุ่นฟรีแต่มีข้อ จำกัด ค่อนข้างมาก)
  • W32Dasm (ฟรี) - เก่าไปนิด แต่ก็ทำงานเสร็จแล้ว ฉันเชื่อว่า W32Dasm นั้นถูกปล่อยออกมาในวันนี้และมีแฮ็กที่ผู้ใช้สร้างขึ้นมากมายเพื่อเพิ่มฟังก์ชันการทำงานที่มีประโยชน์มาก คุณจะต้องมองไปรอบ ๆ เพื่อหารุ่นที่ดีที่สุด

decompilers:

  • Visual Basic: VB Decompilerเชิงพาณิชย์สร้างรหัสไบต์ที่สามารถระบุตัวได้บ้าง
  • Delphi: DeDe , ฟรี, สร้างซอร์สโค้ดคุณภาพดี
  • C: HexRays , พาณิชย์, ปลั๊กอินสำหรับ IDA Pro โดย บริษัท เดียวกัน ให้ผลลัพธ์ที่ยอดเยี่ยม แต่เสียค่าใช้จ่ายเป็นจำนวนมากและจะไม่ถูกขายให้กับใคร (หรืออย่างนั้นฉันได้ยิน)
  • .NET (C #): dotPeek , ฟรี, decompiles แอสเซมบลี. NET 1.0-4.5 เป็น C # รองรับไฟล์. dll, .exe, .zip, .vsix, .nupkg และ. winmd

เครื่องมือที่เกี่ยวข้องบางอย่างที่อาจเป็นประโยชน์ในสิ่งที่คุณกำลังทำอยู่คือตัวแก้ไขทรัพยากรเช่นResourceHacker (ฟรี) และตัวแก้ไขเลขฐานสิบหกที่ดีเช่นHex Workshop (เชิงพาณิชย์)

นอกจากนี้ถ้าคุณกำลังทำวิเคราะห์มัลแวร์ (หรือใช้ SICE) , ผมบริสุทธิ์ใจแนะนำการทำงานทุกอย่างภายในเครื่องเสมือนคือVMware Workstation ในกรณีของ SICE มันจะปกป้องระบบจริงของคุณจาก BSOD และในกรณีของมัลแวร์มันจะปกป้องระบบจริงของคุณจากโปรแกรมเป้าหมาย คุณสามารถอ่านข้อมูลเกี่ยวกับการวิเคราะห์มัลแวร์กับ VMware ที่นี่

โดยส่วนตัวแล้วฉันใช้ Olly, WinDbg & W32Dasm และเครื่องมือยูทิลิตี้เล็ก ๆ

นอกจากนี้โปรดจำไว้ว่าการแยกส่วนหรือแม้กระทั่งการดีบักซอฟต์แวร์ของผู้อื่นมักจะเป็นการต่อต้าน EULA อย่างน้อย :)


16
ฉันขอขอบคุณย่อหน้าสุดท้ายที่มีอยู่ทั่วไปคำแนะนำที่ดี แต่มันก็น่าขบขันในบริบทของคำถาม: ฉันสงสัยว่าไวรัสมาพร้อมกับ EULA! ;-)
PhiLho

4
ที่จริงแล้วมัลแวร์และโทรจันบางสายอาจมี EULAs อยู่ในนั้น (โอ้ชาวรัสเซียพวกนั้น .. ) แน่นอนว่าพวกเขาอาจถูกมองข้าม (และ) โดยนักวิจัยเพราะสามารถสันนิษฐานได้ว่าไม่มีใครจะมาฟ้องพวกเขาได้ .. นอกจากนี้พวกเขามักจะเขียนไม่ดีเกินไปที่จะหมายถึงอะไรในศาลในกรณีใด ๆ
anon6439

2
โปรดทราบว่าเวอร์ชันก่อนหน้าของ IDA Pro นั้นฟรีสำหรับการใช้งานที่ไม่ใช่เชิงพาณิชย์
Simon Buchan

6
โปรดทราบว่ามัลแวร์ส่วนใหญ่ในวันนี้ (มัลแวร์ที่รวบรวมอย่างน้อย) สามารถตรวจสอบได้อย่างง่ายดายว่ามันกำลังทำงานอยู่ใน VMWare, พีซีแบบเสมือน, WINE, VirtualBox และอื่น ๆ อีกมากมาย
Mick

หากคุณกำลังทำงานใน VM ระวังการโจมตี Blue Pill
Siqi Lin

44

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

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

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

ไฟล์ไบนารีเป็นเพียงชุดของรหัสเหล่านั้น (มักเรียกว่า "รหัส op") และข้อมูล ("ข้อโต้แย้ง") ที่รหัส op ทำหน้าที่

ตอนนี้ภาษาแอสเซมบลีเป็นภาษาคอมพิวเตอร์ที่แต่ละคำสั่งในภาษานั้นหมายถึง op-code หนึ่งเดียวบนโปรเซสเซอร์ มีการแปลโดยตรง 1: 1 ระหว่างคำสั่งภาษาแอสเซมบลีและรหัส op-processor นี่คือเหตุผลที่แอสเซมบลีการเข้ารหัสสำหรับโปรเซสเซอร์ x386 แตกต่างจากแอสเซมบลีการเข้ารหัสสำหรับตัวประมวลผล ARM

การถอดประกอบเป็นเพียงแค่นี้: โปรแกรมอ่านผ่านไบนารี่ (รหัสเครื่อง), แทนที่ op-codes ด้วยคำสั่งภาษาแอสเซมบลีที่เทียบเท่ากันและส่งผลลัพธ์เป็นไฟล์ข้อความ การเข้าใจสิ่งนี้เป็นสิ่งสำคัญ หากคอมพิวเตอร์ของคุณสามารถอ่านไบนารีได้คุณก็สามารถอ่านไบนารีได้ด้วยตนเองไม่ว่าจะด้วยตนเองพร้อมตาราง op-code ในมือของคุณ (ick) หรือผ่าน disassembler

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

(อย่าเข้าใจฉันผิดมีความพยายามทำเช่นนั้นพวกเขาทำงานเช่นเดียวกับ DRM ในไฟล์เพลง)

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

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

อย่างไรก็ตามนี่เป็นคำอธิบายที่ค่อนข้างแวววาว แต่ฉันหวังว่ามันจะช่วยได้ ทุกคนสามารถแก้ไขข้อผิดพลาดใด ๆ ในส่วนของฉันได้ สักพักหนึ่ง. ;)


1
รายละเอียดนี้เกี่ยวกับการถอดแยกชิ้นส่วน แต่ฉันชอบที่จะได้ยินรายละเอียดของ decompiling เป็นไปได้ไหมที่จะไร้ผล? คำเตือนของมันคืออะไร?
โพร

@ มี: การแปลโค้ดเนมเป็นความท้าทายที่ยากมากซึ่งมักจะเป็นไปไม่ได้ เครื่องมือเพิ่มประสิทธิภาพก้าวร้าวเกินกว่าจะแปลซอร์สโค้ดไปเป็นอะไรเลย คุณไม่สามารถถอดรหัสอะไรได้เลย
IIsspectable


11

ดีบักเกอร์ที่ดีสามารถทำสิ่งนี้ได้ ลองOllyDbg (แก้ไข: ซึ่งมี disassembler ที่ยอดเยี่ยมที่ยังถอดรหัสพารามิเตอร์การโทร WinAPI!)




6

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

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


4

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


ใช่ฉันคิดเกี่ยวกับเรื่องนี้ แต่ฉันไม่อยากให้ยุ่งยากกับการตั้งค่า VM เพื่อฆ่ามัน :)
swilliams

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

4

บูมเมอแรงอาจคุ้มค่าที่จะเช็คเอาท์


ไม่ได้จริงๆ มันขัดข้องและเบิร์นสำหรับสิ่งที่ซับซ้อนกว่าโปรแกรมที่น่ารำคาญที่สุด
shoosh

4

สิ่งที่คุณต้องการคือซอฟต์แวร์ประเภทหนึ่งที่เรียกว่า "Disassembler"

google ด่วนให้ผลตอบแทนนี้: ลิงก์


คุณไม่ได้อธิบายเรื่องนี้
scitronboy

3

ฉันไม่อยากจะเชื่อเลยว่าไม่มีใครพูดอะไรเกี่ยวกับImmunity Debuggerยัง

Immunity Debugger เป็นเครื่องมือที่มีประสิทธิภาพในการเขียนหาประโยชน์วิเคราะห์มัลแวร์และย้อนกลับไฟล์ไบนารีของวิศวกร มันเริ่มต้นขึ้นอยู่กับรหัสที่มา Ollydbg 1.0 แต่มีการแก้ไขข้อผิดพลาดชื่อ resoution มีPython API ที่รองรับเป็นอย่างดีเพื่อความสะดวกในการขยายดังนั้นคุณสามารถเขียนสคริปต์ของ Python เพื่อช่วยในการวิเคราะห์

นอกจากนี้ยังมี Peter คนหนึ่งจากทีม Corelan ที่เขียนชื่อmona.pyเครื่องมือยอดเยี่ยม btw


2

หากคุณต้องการรันโปรแกรมเพื่อดูว่ามันทำอะไรโดยไม่ติดคอมพิวเตอร์ของคุณให้ใช้กับเครื่องเสมือนเช่นVMWareหรือ Microsoft VPC หรือโปรแกรมที่สามารถแซนด์บ็อกซ์โปรแกรมเช่นSandboxIE




2

ฉันจะบอกว่าในปี 2019 Ghidra ( https://ghidra-sre.org/ ) คุ้มค่าที่จะเช็คเอาท์ มันเป็นโอเพนซอร์ซ (และฟรี) และมีความสามารถในการวิเคราะห์รหัสที่ยอดเยี่ยมรวมถึงความสามารถในการถอดรหัสกลับไปสู่รหัส C ที่อ่านได้อย่างเป็นธรรม


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