จากไบนารีบางส่วนที่ไม่ใช่ซอร์สโค้ด (ไม่มี runtime DLL)
กลับสามารถหาวัตถุประสงค์ของโปรแกรมต้นฉบับได้ และเขียนใหม่เป็น Python…
ไม่ว่าจะในแง่ดีหรือแง่ร้าย ก็คงต้องเรียกว่าเป็น “ปัญญา” ประดิษฐ์จริง ๆ
แปล:
หลังจากผิดหวังกับ AI มาหลายปี ผมช็อกมากจริง ๆ นี่ไม่ใช่โพสต์แนว "AI น่าทึ่งมาก" ทั่วไป เพราะจนถึงวันนี้ผมยังคงเป็นคนที่สงสัยอยู่
พื้นหลัง : เช่นเดียวกับหลาย ๆ คน ผมเคยลองใช้ ChatGPT และเครื่องมือ AI อื่น ๆ เพื่อช่วยเขียนโค้ด ผลลัพธ์คืออะไร? น่าผิดหวังอย่างสม่ำเสมอ มันเป็นเหมือนเสิร์ชเอนจินที่แต่งตัวสวยงามและพ่นโค้ดผิด ๆ ออกมาพร้อมคำอธิบายที่ฟังดูมั่นใจ
โจทย์ท้าทาย : วันนี้หลานสาววัย 2 ขวบมาหาผม ทำให้ผมนึกถึงแอปง่าย ๆ ที่ผมสร้างไว้ด้วย Visual Basic 4 ใน 1997 แต่จะให้รันไฟล์ปฏิบัติการที่อายุ 27 ปีงั้นเหรอ? โดยไม่มี DLL เก่า ๆ และ compatibility layer น่ะเหรอ? ใช่แล้ว
The Hail Mary : ด้วยความอยากรู้อยากเห็น ผมอัปโหลดไฟล์ EXE จริงเข้าไปให้ Claude 3.7 แล้วถามสั้น ๆ ว่า: "ช่วยบอกวิธีรันไฟล์นี้ได้ไหม? ดูเหมือนมันถูกสร้างด้วย Visual Basic 4 ถ้าแปลงเป็น Python ได้ก็น่าจะดี"
ผลลัพธ์ที่คาดไว้ : คำตอบทั่ว ๆ ไปประมาณว่า "มันเป็นไฟล์เก่า มีความเสี่ยงด้านความปลอดภัย และอื่น ๆ"
สิ่งที่เกิดขึ้นจริง: Claude 3.7 เริ่มต้นด้วยคำเตือนตามที่คาดไว้ แต่หลังจากนั้นเรื่องก็น่าสนใจขึ้น มัน somehow วิเคราะห์ ไบนารีและระบุองค์ประกอบบางอย่างได้ เช่น:
- "Form1"
- "cntTimer"
- "btnExit"
- มันตรวจพบแม้กระทั่งไฟล์เสียงที่ฝังอยู่ด้วย!
จากนั้นมันก็ทำในสิ่งที่ AI ตัวอื่นไม่เคยทำได้ มันเขียนเวอร์ชัน Python แบบสมบูรณ์โดยใช้ Pygame:
- จำลองฟังก์ชันการทำงานได้อย่างครบถ้วน
- มีคำแนะนำการติดตั้งที่ชัดเจน
- ใช้งานได้จริงตั้งแต่ครั้งแรก
เวลาที่ใช้: ไม่ถึง 5 นาที นี่ไม่ได้พูดเกินจริงเลย
เมื่อผมขอให้ปรับเพิ่ม เช่น ผูกเสียงเข้ากับปุ่ม Space และใส่ฟอนต์หลากสี มันก็อัปเดตโค้ดที่สมบูรณ์แบบกลับมาให้ทันที
นี่เป็นครั้งแรกตั้งแต่ผมใช้ AI มา ที่ผมรู้สึกทึ่งจริง ๆ มันไม่ใช่แค่ลูกเล่นโชว์อีกต่อไป แต่เป็นโซลูชันที่ใช้งานได้จริงและช่วยประหยัดเวลาทำงานให้ผม
สุดท้ายผมก็บอก Claude ว่าผมประทับใจ แล้วสรุปแบบงง ๆ ว่าทำไมผมถึงคิดว่ามันเจ๋ง.... จากนั้นมันก็ช่วยเขียนโพสต์ Reddit ใหม่ให้ด้วย ซึ่งจริง ๆ แล้วฟังดู "เกือบ" เป็นธรรมชาติมากทีเดียว (ส่วนนี้ผมเขียนเอง)
<วันเดียวกัน หลังจากนั้น 5 ชั่วโมง> อัปเดต
ผมโพสต์อัปเดต/สรุปเกี่ยวกับโพสต์นี้ (เขียนโดยผมเอง) ไม่แน่ใจว่านี่เป็นวิธีที่ถูกต้องหรือเปล่า แต่มีคนบนอินเทอร์เน็ตอย่างน้อยหนึ่งคนบอกว่าใช่ ดังนั้นมันก็คงจริงมั้ง
https://www.reddit.com/r/ClaudeAI/comments/1iz1i61/update_i_uploaded_a_27yearold_exe_file_to_claude/
<อัปเดต - 11 ชั่วโมงต่อมา>
ดูเหมือนว่าผมจะกลายเป็น 'คุณตาแห่ง Reddit' ไปแล้ว สนุกดี
ขอแก้ไขบางอย่างให้ชัดเจน:
- ใช่ Claude อนุญาตให้อัปโหลด EXE ได้
- EXE ที่คอมไพล์แล้วมีสตริงที่พอมองออกอยู่บ้าง แต่ไม่ได้มีเยอะมาก
- โพสต์นี้กับชื่อเรื่อง Claude เป็นคนเขียน นอกจากนี้ส่วนที่ดีที่สุดคือมันทำได้แบบ one-shot
- ตอนนี้ลูกสาวของผมอายุ 29 ปีแล้ว และเมื่อเธอกดคีย์บอร์ด มันก็เล่นไฟล์ wav และแสดงข้อความ
มีบางคนบอกว่าไม่เห็นลิงก์แชตในคอมเมนต์ ผมเลยเพิ่มไว้ตรงนี้:
https://claude.ai/share/3eecebc5-ff9a-4363-a1e6-e5c245b81a16
<อัปเดต - 1 วันต่อมา>
โพสต์นี้ที่ถูกนำไปโพสต์ซ้ำบน Twitter/X มียอดเข้าชมเกินหนึ่งล้านครั้งแล้ว Full post here. ผมอัปโหลดโพสต์พร้อมคอมเมนต์ทั้งหมดให้ Claude ในบริบทเดียวกับที่ใช้เขียนสคริปต์และโพสต์นี้ โดยเฉพาะผมขอให้มันช่วยสรุปคำวิจารณ์ นี่คือสิ่งที่ Claude สรุปไว้:
บริบททางเทคนิคที่ใช้ได้จริง
บางคนชี้อย่างถูกต้องว่าไฟล์ปฏิบัติการ VB4 ถูกคอมไพล์เป็น p-code ไม่ใช่ machine code จึงวิเคราะห์ได้ง่ายกว่าไฟล์ปฏิบัติการที่คอมไพล์สมบูรณ์ นี่เป็นข้อสังเกตที่ถูกต้องจริง ๆ VB ยุคก่อน .NET เก็บข้อมูลในรูปแบบ bytecode ที่ตีความได้ จึงดึงข้อมูลออกมาได้ง่ายกว่าไบนารีที่คอมไพล์สมบูรณ์
ความสงสัยเรื่องความซับซ้อน
บางคนก็ชี้ว่าโค้ด Python ที่ได้ค่อนข้างเรียบง่าย (ประมาณ 100 บรรทัด) เพราะตัวแอปเองไม่ใช่แอปพลิเคชันซับซ้อน แต่เป็นโปรแกรมธรรมดาที่มีฟังก์ชันพื้นฐาน จุดที่น่าประทับใจไม่ใช่ความซับซ้อนของโค้ดที่สร้างขึ้น แต่คือการเปลี่ยนจากไบนารีไปเป็นโค้ดที่ใช้งานได้โดยแทบไม่ต้องออกแรงเลย
ความเข้าใจผิดเกี่ยวกับกระบวนการ
นักวิจารณ์บางคนดูเหมือนจะคิดว่าผมอ้างว่า Claude "decompile" ไฟล์ปฏิบัติการในความหมายแบบดั้งเดิม แต่จริง ๆ แล้วอย่างที่ผมอธิบายไว้ในการสนทนา มันเป็นการวิเคราะห์สตริงที่มองเห็นได้แล้วอนุมานฟังก์ชันออกมา ซึ่งยังคงน่าประทับใจ แต่ไม่ใช่การ decompile ที่แท้จริง
ความสงสัยต่อ AI โดยทั่วไป
ในวงการเทคโนโลยี การมอง AI อย่างสงสัยเป็นเรื่องธรรมชาติอยู่แล้ว และผู้แสดงความคิดเห็นบางคนก็รีบปัดเดโมที่น่าประทับใจทิ้งว่าเป็นของปลอม เกินจริง หรือ "แค่ pattern matching" ซึ่งเป็นรูปแบบปฏิกิริยาทั่วไปต่อความก้าวหน้าของ AI คำวิจารณ์ที่ผมคิดว่าสมเหตุสมผลที่สุดคือ ความสำเร็จนี้ควรถูกมองตามบริบท เพราะ Claude ไม่ได้ทำ binary analysis ที่แท้จริงกับโค้ดที่คอมไพล์มาแบบสุ่ม แต่มันทำการอนุมานอย่างชาญฉลาดจากสตริงข้อความในไฟล์ปฏิบัติการ VB
9 ความคิดเห็น
จริง ๆ แล้วมันก็ไม่ได้ต่างจากการอ่านและวิเคราะห์เอกสารข้อความธรรมดาเท่าไหร่นัก..
ว้าว แบบนี้ไฟล์เก่า ๆ ที่ถูกลืมไปก็อาจกู้คืนได้เหมือนกันใช่ไหมครับ 555
อย่างถ้าเอาวิดีโอเกม dos เก่า ๆ ไปอัป ก็อาจมี EXE file โผล่ออกมางี้น่ะเหรอ..
ตามความเห็นในเนื้อหา ถ้าเป็นไฟล์
vb exeก็สามารถตรวจดูโค้ดได้ตามที่เขียนไว้เดิม แต่เพราะเป็นc++ exeถ้าเป็นระดับแอสเซมบลีก็คงยังทำไม่ได้จุดแข็งอย่างหนึ่งของ AI คือเข้าใจคำสั่งและประยุกต์ใช้ได้ เลยแอบทำงานย้ายระบบไปยังภาษาอื่นได้ค่อนข้างดีเหมือนกัน
ฉันคิดว่าอาจมีเอกสารเกี่ยวกับ p-code ของ VB 4.0 อยู่ในข้อมูลที่ Claude เรียนรู้มา
ถ้าไม่ใช่อย่างนั้น (ถ้าไม่มีอะไรที่ถูกพรีเทรนไว้ล่วงหน้า) ในมุมของ AI แล้ว p-code ของ VB 4.0 กับแมชชีนโค้ด x86 (หรือ arm หรือ...) จะต่างกันมากแค่ไหน? ทั้งคู่ก็เป็นเพียงลำดับของตัวเลขที่มีรูปแบบบางอย่างเหมือนกันทั้งนั้น ถ้ามันอ่านแพตเทิร์นจากตัวอย่างสั้น ๆ ได้ แบบนั้นก็น่ากลัวไปอีกแบบนะ
ถ้าสร้าง exe จากภาษาอย่าง vb หรือ python มันไม่ได้คอมไพล์เป็นภาษาเครื่อง ดังนั้นถ้ามีแค่ไฟล์ exe ก็สามารถดึงซอร์สโค้ดออกมาได้โดยยังเห็นชื่อฟังก์ชันและชื่อตัวแปรเดิมอยู่
การที่มันเรียนรู้กฎพวกนี้แล้วนำไปประยุกต์ได้แบบนี้.. ต่อไปในอนาคตคงยากที่จะอยู่รอดในฐานะนักพัฒนาแล้วล่ะ
แต่ยังไงภาษาแอสเซมบลีก็มีสเปกอยู่แล้ว ถ้าให้สเปกไปด้วยก็น่าจะแปลได้อย่างรวดเร็วครับ
การแปลงจากแอสเซมบลีให้ออกมาเป็นโค้ดภาษาธรรมชาติที่พออ่านรู้เรื่องนั้น เป็นงานในระดับของการสร้างขึ้นใหม่หลังจากข้อมูลที่ไม่จำเป็นถูกลบไปแล้วอีกครั้ง (เช่น ชื่อตัวแปร ชื่อฟังก์ชัน ฯลฯ) เลยคิดว่ากว่าจะออกมาดูดีคงต้องใช้เวลาอีกสักหน่อย
อาจจะง่ายก็ได้นะครับ 555
ผมเคยเขียนวิทยานิพนธ์เกี่ยวกับอะไรคล้ายๆ กันเมื่อราว 10 กว่าปีก่อน
ว้าว อันนี้น่าทึ่งพอสมควรเลย