วันพุธที่ 25 กันยายน พ.ศ. 2556

ทำความเข้าใจกับ Batch File Virus ตอน พิเศษ

เนื่องด้วยติดตามดูผลงานตัวเอง...จากหลายๆ บล็อกพบว่า...เนื้อหาเกี่ยวกับไวรัสเป็นที่สนใจของเด็กร้อนวิชา...ที่อยากจะสร้างไวรัสคอมพิวเตอร์ขึ้นมาแกล้งเพื่อน และมียอดวิวที่สูง...เลยสนองความต้องการของเด็กเหล่านี้ซะ...555 ไม่ได้หมายความว่า "พี่แมวตาเดียว" จะสอนเขียนไวรัสนะ...แต่วันนี้เราจะมาเขียนตัวฆ่าไวรัสกัน อย่างไีรก็ดี...เด็กรุ่นใหม่ที่เขียนโปรแกรมไม่เป็นเยอะมากและก็ไม่คิดจะเขียนให้เป็นด้วย...ขอแค่ คัดลอกอะไรก็ได้ลง Notepad และก็เอาไปแกล้งเพื่อน...โถ่...เด็ก...
      ท้าวความ...เมื่อก่อนตอนได้คอมพิวเตอร์เครื่องแรกมาใหม่ๆ ผมเองโดนไวรัสคอมพิวเตอร์เล่นงานซะ...อ้วม...กับค่าลงโปรแกรมและซ่อมวินโดวส์ และไวรัสสมัยนั้น...โคตะระ...ห่า...ฆ่าอยากฉิบ...ไวรัสในสมัย DOS นั้นไม่มีรูปแบบเป็น Pain text แบบสมัยนี้นะครับ...มันเป็น Binary ล้วนๆ อ่านไม่ออกหลอกว่ามันทำงานอย่างไร...หรือกล่าวได้ว่ามันเป็น Assembly Code หรือ ภาษาเครื่อง คุณไม่มีทางรู้เลยว่ามันคืออะไรมีอันตรายไหม...และเกาะติดแฟ้ม .EXE, .COM ได้อย่างไร ด้วยความแค้นและผสมความเจ็บใจจึงเริ่มศึกษาอย่างจริงๆ จังๆ ว่ามันทำงานอย่างไร...ในยุคนั้น Internet ไม่มีฐานความรู้ภาษาไทยให้มากขนาดนี้...ต้องเปิดตำราศึกษา Assembly และ C และระบบปฏิบัติการ DOS จึงพอทำความเข้าใจได้คร่าวๆ ว่า ไวรัสนั้นทำงานด้วยการอาศัยติดแฟ้มคำสั่งไม่ว่าจะเป็น .EXE, .COM, .DLL, .OVL, .BIN, .SYS ก็ตามโดยมันจะมองที่ส่วนหัวของนามสกุลดังกว่าว่าเป็น MZ หรือเปล่า ถ้าไม่เป็น มันจะเปลี่ยนเป็น ZM เพื่อบอกว่ามันติดเชื้อแล้ว ซึ่งเจ้า MZ หรือ 2 Byte แรกของไฟล์คำสั่งนั้นเป็น ซิกแนลเจอร์ ของแฟ้มคำสั่งบน Windows และ DOS ไม่รู้ว่ามันย่อมาจากคำว่า Machine Zip หรือเปล่า เดาเอา
      พอเริ่มเข้าใจว่าไวรัสทำงานอย่างไรมีกี่ประเภท...และหลบซ่อนตัวอย่างไร...จึงเริ่มเป็นนักฆ่าไวรัสแหละ...แต่พอมาถึงยุคไวรัสมาโคร...ก็เริ่มอยากศึกษาไวรัสมาโครมันทำงานอย่างไร...โดยไวรัสมาโครที่เขียนตัวแรก...ได้มาจากการลองดักจับไวรัสดังนี้
1. คัดลอกเอกสารเวิร์ดที่ติดเชื้อมาใส่ ฟล็อปปี้ดิสก์
2. เสียบในเครื่องไม่ติดเชื้อ
3. เปิดไฟล์เวิร์ดที่ติดเชื้อเพื่อดักจับ
4. เพื่อไม่ให้ไวรัสทำงานได้สมบรูณ์ เลยถอดฟล็อปปี้ดิสก์ซะ...เพื่อให้ไวรัสติดกับดัก...(ได้ผล...) ไวรัสรันคำสั่งไปได้ครึ่งทางก่อนทำการซ่อนตัวอย่างถาวร...เกิด Error ในสคริปมาโครไวรัส ทำให้ Visual Basic Application แสดงบรรทัด Error ของไวรัสมาโคร
5. 555 หวานหมู...ไม่นึกมาก่อนว่าไวรัสมาโีครที่หาตัวยากสมัยนั้น...ถูกดักจับด้วยวิธีพื้นๆ จากนั้นคัดลอกโค้ดใส่ Notepad เพราะรู้ว่าไวรัสไม่มีทางรันบน Notepad ได้
6. พึ่งมารู้ที่หลังว่า...ดักจับไวรัสที่หลบซ่อนตัวดีที่สุดในโลกตัวหนึ่งชื่อ Bablas.W32 Macro
จากนั้นเป็นต้นมาศึกษามาโครอย่างจริงจังเพื่อเขียนไวรัสมาโครเผยแพร่ และเสียบมันในร้านเน็ต...ร้านพิมพ์งานเอกสาร...รวมถึงลูกค้าที่ชอบมาเซฟงานที่ร้านก็จะไ้ด้มันกลับไป
      พอมาถึงยุคไวรัสที่ทำงานบน Hypertext ไวรัสพวกนั้น...ผมไม่มีโอกาสได้ศึกษามันเพราะติดงานประจำ และยุคแห่งความเป็นเด็กคึกคะนองก็หมดไปพร้อมๆ กับรู้ตัวว่าทำผิด แต่ยังชอบศึกษาด้านความปลอดภัยระบบกับไวรัสอย่างเสมอ มายุคที่วินโดวส์ XP ออกตลาดใหม่ๆ Hypertext ไวรัสหมดไป...ก็เริ่มหันมาเขียนตัวป้องกันไวรัสที่บล็อก AutoIt หรือ สแกนมาโครไวรัส...ซึ่งเป็นเพียงอดีต...จึงไม่รุ่ง

ทำไมไม่เขียนไวรัสแพร่กระจายต่อ
1. ผิดกฎหมาย
2. นักฆ่าซอมบี้...ต้องเก่งกว่าซอมบี้อยู่แล้ว (เปลี่ยนข้าง)
3. ไม่เล่งเห็นประโยชน์
4. เขียนเป็นตั้งแต่ Binary Virus จนถึง สคริปไวรัส แต่ Antivirus เอาไปกินหมด
5. เพราะไม่มีผู้สร้าง Antivirus คนใด...เขียนไวรัสของตัวเองให้ Antivirus ยี้ห้ออื่นฆ่าแทน

คำถามข้างคาใจหลายๆ คน
1. ผู้เขียนแอนตี้ไวรัส...เป็นผู้ปล่อยไวรัสเองใช่หรือไม่...
ผมจะย้อนถามเขาเหล่านั้นว่า...ผู้ผลิตอาวุูธนิวเครียร์...จะนำอาวุธนั้นมาบอมประเทศตัวเองใช่หรือไม่
และถ้าจะโง่บอมประเทศตัวเอง...จะรบกับประเทศอื่นที่มีนิวเครียร์อย่างไร...
2. ผู้เขียนไวรัส...คือคนที่เขียนแอนตี้ไวรัสนั้นแหละ...
ผมว่าถูกแต่ถูกบางส่วน...ไวรัสส่วนใหญ่ไม่ได้มาจากผู้เขียนแอนตี้ไวรัส...แต่มันมาจากมือใหม่ๆ ที่แอนตี้ไวรัสตรวจจับได้และฆ่าได้...แต่ถ้าเมื่อไหร่ที่มันเขียนจากผู้ผลิตแอนตี้ไวรัส...มันจะตรวจจับไม่ได้...(ตำรวจไม่จับตำรวจ) ฉนั้น...ไวรัสที่เรามักตรวจพบ...เป็นเพียงไวรัสกระจอก...และไวรัสระดับเครดิต(ไวรัสฆ่ายาก รอเสียเงิน) ส่วนไวรัสที่นักพัฒนาแอนตี้ไวรัสเขียนขึ้น...แอนตี้ไวรัสชนิดนั้นจะไม่พบหรือ แต่ใช่ว่ายี้ห้ออื่นจะหาไม่พบ...ถ้าผม...ผมเขียนไวรัสที่แอนตี้ไวรัสของตัวเองจับไม่ได้...แต่ถูกคู่แข่งยี้ห้ออื่นจับได้...เสียชื่อแย่...สู้ไม่เขียนจะดีกว่า...
3. ถ้าเขียนไวรัสเป็นจะสร้างไวรัสที่ฆ่าไม่ตาย...และแพร่ไปทั่วโลกให้โด่งดัง...
สำหรับผม...คำถามนี้...ฝันเฟื่อง...และเป็นคำถามที่มาจากผู้ที่เขียนไวรัสไม่เป็นเท่านั้น...เพราะในโลกความเป็นจริง...ไวรัส...
3.1 ถูกดักจับได้
3.2 ไม่สามารถติดเชื้อจากอากาศ...มันต้องมีโฮสต์และแหล่งที่มา...จึงถูกตรวจสอบได้เสมอ
3.3 ไวรัสมนุษย์ต่างดาวหรือลบหลีกการตรวจจับได้ในระยะแรกๆ เท่านั้น ไวรัสเหมือนสิ่งมีชีวิต...มันมีพฤติกรรมไม่พึ่งประสงค์ เครื่องหนึ่งอาจจะไม่เจอ...แต่อีกสิบเครื่องสภาพแวดล้อมไม่เหมือนกัน...ยังไงก็เจอ
4. ถ้าเขียนไวรัสได้...จะทำให้เครื่องคอมพิวเตอร์พังแบบไม่มีทางซ่อม...
คำถามนี้...ปัญญาอ่อนสุดๆ เพราะซอฟต์แวร์กับฮาร์ดแวร์มันเป็นคนละส่วนกันเป็นคู่ขนาดกันเสมอ...ถ้าไวรัสเป็นเพียงตัวเลข 12345 ในประจุไฟฟ้าบนฮาร์ดดิสก์ และเป็นเพียงสารสื่อตัวนำ ในแรม...และเป็นเพียงอนุภาคไฟฟ้าใน CPU คุณคิดว่า...มันสามารถทำให้เครื่องคอมพิวเตอร์พังได้อย่างไร แต่ยังมีช่องทางเล่นงานผ่าน BIOS ซึ่งในอนาคตเอง...โปรแกรมที่บรรจุไว้ในสารสื่อตัวนำใน BIOS จะสามารถเขียนและแก้ไขตัวมันเองได้ที่เราเรียกว่า "เฟริมแวร์" เฟริมแวร์จะถูกแก้ไขโดยไวรัสหรือเปล่า...เป็นเรื่องของอนาคต

เริ่มทำความเข้าใจไวรัสแบบใกล้ตัวขึ้น?
1. ไวรัสต้องอาศัยโฮสต์หรือพาหะ...ฉนั้นต้องทำความเข้าใจก่อนว่า...แฟ้มอะไรบ้างบนวินโดวส์ที่สามารถเขีียนสคริปได้
1.1 .VBS, .JS, .VBE, .JSE, .BAT, .CMD, และสคริปพาเวอร์เชลล์ในอนาคต รวมถึงสคริปที่ยังไม่กล่าวถึงอีกมาก...ที่สามารถทำงานได้โดยการ Open หรือ ดับเบิ้ลคลิก
1.2 แฟ้มคำสั่ง และ Link คำสั่ง รวมถึง Junction ในอนาึคต แฟ้มเหล่านี้ระบบปฏิบัติการสร้างขึ้นให้เรียกใช้งานได้ทันทีหรือดับเบิ้ลคลิก หรือ Open หรือ Shell อื่นๆ แบบอัตโนมัติ ไวรัสสามารถสิ่งสถิตย์ได้หมด
1.3 เอกสารที่มีการเรียก Hyperlink หรือ Macro ติดไวรัสได้หมดเช่นกัน เช่น .HTM, .DOC, .XLS, .PDF .CDR และเอกสารของ มาโครมิเดียเช่นกัน
สรุป...มีแฟ้มไม่กี่ประเภทที่ไม่มีไวรัส...เช่น ภาพ...เพลง...แอคไควบีบอัดทั้งหลาย...วีดีโอบางไฟล์อาจมีลิงค์ที่เรียกไวรัสจากอินเตอร์เน็ตได้...ที่ผ่านมาผู้เขียนยังเคยพบ ไวรัสที่ฝากตัวเองไว้ใน .RAR ก็มี...ด้วยการอาศัยการเรียกคำสั่ง shell บน DOS เปิดแฟ้มติดเชื้อและเขียนตัวเองทับแฟ้ม .EXE ในนั้้น มันทำได้ จึงสรุปได้ว่า แฟ้มที่เป็นข้อความเช่น .TXT, .MP3, .JPG, ,BMP, .PNG, .ICO อีกมากมาย...ที่เขียนโปรแกรมใส่ไปในแฟ้มเหล่านั้นไม่ได้...มันจะไม่ติดไวรัสนั้นเอง

สำหรับแบตช์ไฟล์ไวรัส...มีกี่ประเภท
1. มีหัวเป็น rem{วรรค}ตามด้วยโค้ดไวรัส Binary Virus>แฟ้มไวรัส.COM
2. @echo{วรรค}ตามด้วยโค้ด Binary Virus >แฟ้มไวรัส.COM
3. อาศัย Debug.EXE รันไวรัสและหลบซ่อน
4. อาศัยตัวเองใน AutoExec.NT และรอแพร่เชื้อ
5. อาศัยใน StartUp Key
6. อาศัยใน StartUp Folder
7. อาศัยใน Shell หรือ ActiveX ใน Registry
8. อาศัยตัวมันเองแพร่เชื้อและติดเชื้อโดยตรง
9. เขียนทับแฟ้ม .EXE ใน ZIP หรือ RAR
10. ทำงานผ่าน .LNK  หรือ ช็อตคัท...หรือ Hyperlink ต่างๆ
11. คาดว่าในอนาคต...ถ้าหาทางเจาะ...เมโทรยูไอ หรือหน้าจอมือถือได้...ไวรัสรวมถึงแบตช์ไฟล์ไวรัสจะกลับมาระบาดอีกครั้ง...

วันจันทร์ที่ 23 กันยายน พ.ศ. 2556

ปูพื้นฐาน (ขั้นเทพ) Batch File ตอน 11

ไปป์ปิ้ง หรือต่อท่อ ให้กับคำสั่ง...แบตช์ไฟล์นั้นจะทำงานได้ไม่สมบรูณ์เลย...ถ้าไม่มีคำสั่งพวกนี้...และคำสั่งพวกนี้คืออะไร...ยกตัวอย่างเช่น คุณต้องการส่งข้อความ Yes ไปที่คำสั่ง Format C: ถ้าใน VB6 คุณอาจใช้ Sendkey เพื่อจำลองแป้นพิมพ์ แต่ภาษาบน Console นั้น API ไม่ได้ตอบรับกับภาษาพวกนี้...ตัวระบบปฏิบัติการจึงสร้างการต่อท่อคำสั่งขึ้นมาที่เรียกว่า "Piping" หรือ "Pipe"
อย่างที่เคยยกตัวอย่างในหลายๆ บทความว่า...การยิงคำสั่งออกไปที่แฟ้มข้อมูลก็ดี...หรือการเชื่อมต่อคำสั่งมารวมกันก็ดี...ผู้เขียนอาจจะยังไม่ได้อธิบายในส่วนนี้ละเอียดมากนัก...เพราะมันจะกลายเป็นบล็อกวิชาการ...ถ้าเราศึกษาอะไรสักอย่างโดยไม่มีแรงจูงใจ...บล็อกนี้...ยอดวิวคงยังไม่เยียบหมื่นอย่างทุกวันนี้...จึงเอาวิชาการหรืออะไรที่หนักสมองมาไว้เป็นช่วงๆ ให้ไม่รู้สึกเบื่อ แต่วันนี้...คุณเจอของหนักแน่
มาทำความเข้าใจอุปกรณ์ของ DOS ก่อนว่า...ถูกสงวนไว้ตั้งแต่ DOS ยุคโบราณ 7 อุปกรณ์ ดังนี้
1. Nul  อุปกรณ์ว่าง...หรือผลของคำสั่งไปยังความว่างเปล่า
2. Con อุปกรณ์จอภาพ...และหน้าจอ...
3. Prn  อุปกรณ์เครื่องพิมพ์...หรือส่งผลของคำสั่งพิมพ์ทางปริ้นท์เตอร์ตัวที่เป็น Default
4. Com(หมายเลข) อุปกรณ์ประเภทการสื่อสารแบบ พอตท์อนุกรม
5. Lpt(หมายเลข)  อุปกรณ์ประเภทการสื่อสารแบบ พอตท์ขนาน
6. Aux อุปกรณ์ แอกซิเลียรี่ (ผู้เขียนว่ามันต้องอยู่ในเครื่องยุคเก่า)
7. Clock$ อุปกรณ์ ระบบนาฬิกา
อุปกรณ์เหล่านี้...มันจะถูกจองไฟล์แฮนเิดิล...เพื่อไม่ให้ ใครก็ตามนำ Handle ส่วนนั้นไปใช้ได้ครับ...และจะถูกสงวนใช้ไว้แม้กระทั้งระบบปฏิบัติการวินโดวส์ทำงานแล้วก็ตาม...



คำสั่ง > อุปกรณ์
การยิงคำสั่งรูปแบบนี้...คือการส่งผลการทำงานของคำสั่ง DOS ไปยังอุปกรณ์ที่ว่ามาทั้ง 7 หรือ ไฟล์ข้อมูลก็ได้ครับ (ไฟล์ข้อมูลไม่ถือเป็นอุปกรณ์เพราะจะถูกอ้างอิง Handle ใหม่เสมอ)
เช่น
DIR > PRN ; ส่งผลคำสั่ง DIR ไปที่เครื่องพิมพ์
Echo Test Message>Readme.txt ; ส่งข้อความ Test Message ไปที่่แฟ้ม Readme.txt

คำสั่ง >> อุปกรณ์
การยิงคำสั่งรูปแบบนี้...คือการส่งผลการทำงานเหมือนตัวอย่างแรก เพียงแต่ไปป์ปิ้งตัวนี้จะส่งผลต่อท้ายอุปกรณ์หรือต่อเติมไฟล์ที่มีอยู่แล้ว(ไม่เขียนทับ) เพื่อให้เกิดการต่อเนื่องของผลลัพธ์นั้นเอง
เช่น
Echo Message Line 2 >>Readme.txt ; ส่งข้อความ ไปยังแฟ้ม Redme.txt อีกครั้งโดยอยู่บรรทัดที่ 2

คำสั่ง | คำสั่ง
การเชื่อมต่อคำสั่งนี้...คือการนำคำสั่ง 2 คำสั่งไปมารวมกันหรือมีผลลัพธ์เดียวกัน
่เช่น
Echo Y | del *.mp3 ; หมายถึง ตอบ Y เมื่อ คำสั่ง Delete ถามว่า Yes หรือ No
(ไปป์ปิ้งตัวนี้ค่อนข้างใช้งานยาก...แต่มันเป็นสุดยอดของ ไปป์ทั้งมวลเพราะมันทำให้เกิดผลคำสั่งที่ไม่น่าจะเป็นไปได้...นอกเสียจากบางคนจะหาวิธีใช้งานและประยุกต์ใช้และเผยแพร่ให้ได้รู้นั้นเอง)

คำสั่ง < อุปกรณ์ 
การรับคำสั่งนี้...ส่วนมากเป็นการรับแฟ้มข้อมูลเข้ามายั้งผลของคำสั่ง 
เช่ืน
Debug.exe < Script.txt
FTP.exe < Script.txt
TelNet.exe < Script.txt

คำสั่ง & คำสั่ง
คือการนำบรรทัดคำสั่งมา้เชื่อมไว้ในบรรทัดเดียวกันเช่น
Echo Line1 & Echo Line2

คำสั่ง && คำสั่ง
คือการทำงานเกี่ยวกับ Errorlevel (ย้อนกลับไปดู IF Errorlevel) คำสั่งนี้จะคล้าย IF ERRORLEVEL เพียงแต่คำสั่งจะสั้นลงมาเท่านั้น
เช่น
Findstr "Text" readme.txt && Msg %username% พบข้อความใน Redme.txt

คำสั่ง || คำสั่ง
คือการทำงานเกี่ยวกับ Errorlevel เช่นกัน เพียงแต่เทียบได้กับคำสั่ง IF NOT ERRORLEVEL
เช่น
Findstr "Text" Redme.txt || Msg %username% ไม่พบข้อความใน Readme.txt

คำสั่ง > แฟ้มข้อมูล >&1
คำสั่ง > แฟ้มข้อมูล >&2
ไปป์ตัึวนี้...แสดงถึงการส่งผลของคำสั่งไปยังแฟ้มที่ต้องการและแฟ้มนั้นจะถูกจอง ไฟล์แฮนเดิลหมายเลขที่กำหนดได้เพื่อประโยชน์ในการใช้งานครั้งต่อไปคล้าย VB6
เช่น
Dir *.mp3 /s >ชื่อเพลง.txt >&1
มีค่าเท่ากับ
Open ชื่อเพลง.txt for input as #1
  ...
Close #1
เพียงแต่ แฮนเดิลที่ถูกจองนี้จะถูกปิดหลังจากจบเซกชั้น นั้นเอง

วันพฤหัสบดีที่ 12 กันยายน พ.ศ. 2556

จาก Batch File มาสู่ยุค Power Shell Windows 7- 8 ตอน 1

เมื่อค่ำผมได้ลองสำผัส Power Shell แบบเขียนสคริปเอง...พบว่ามันซับซ้อน...มากๆ การทำงานจากอดีตที่ Batch File ทำงานไม่ได้เลย...กลับกลายเป็นอีกยุคของภาษาด้าน Console เลยทีเีดียว...เครื่องมือก็มีในระดับ Hypertext ที่การำทำงานหรือสคริปคำสั่งต่างถูกรวบรวมไว้เป็น Element ที่สามารถเลือกใช้งานได้ทันที ... ไม่เหมือน DOS ที่ทำอะไรทีต้องกางตำรา มันเป็นภาษาที่สามารถทำงานได้ทั้ง Linux และ Windows ครับ... เพราะ Power Shell Script นี้เป็นมาตราฐานด้านเครื่อข่ายคอมพิวเตอร์ระดับไคเอนท์ ที่ใครก็ตามถ้าเป็นภาษานี้ไม่ตกงานแน่ในอนาคต...ส่วนคู่้มือ...และ ตำรา่ยังมีอยู่น้อยมากครับ...เหมาะสำหรับการเปิดตัวหนังสือเสียด้วยซ้ำ หน้าตามันเป็นอย่างนี้ครับ
1. การเขียนสคริปจะมี Windows PowerShell ISE ช่วยเรื่องรูปแบบภาษาและคำสั่ง ส่วนการทำงานมันทำผ่าน Winndows PowerShell เลย Batch File ก็สามารถรันในนั้นได้ครับเีีพียงแต่ต้องเปลี่ยนนามสกุล

2. หน้าตา PowerShell ISE จะเป็นแบบนี้...


3. ลองพิมพ์คำสั่ง Echo ทดสอบดู จะได้ผลตามตัวอย่างครับ...


4. ลองพิมพ์คำสั่งของ PowerShell บ้าง จะเป็นแบบนี้

5. เมื่อบันทึก...หน้าตาของ PowerShell Script จะเป็นแบบที่เห็น...

การเลือกใช้ PowerShell ISE นั้น...ผมแนะนำว่า...ตัวที่ใช้งานบนวินโดวส์ 8 ดีที่สุดตอนนี้...เพราะแค่พิมพ์ว่า Write{ขีด}(Write-) จะปรากฎ Element ของคำสั่งต่อไป ส่วนในวินโดวส์ 7 นั้นห่วยแตกครับ...ต้องหาำสั่งใช้งานเองเหมือนอยู่บน DOS จึงยังยกตัวอย่างอะไรได้ไม่มากในตอนนี้...ขอทำการศึกษาวิธีนำ PowerShell ISE บน 8 มาไว้บน 7 ก่อน และจะบอกคำสั่งใช้งานวันหลัง...

วันพุธที่ 11 กันยายน พ.ศ. 2556

อนุบาล แฮกเกอร์(หมวกเทา)

ผมเรียบเีรียงเนื้อหาความรู้ที่สะสมมารวบเป็นรูปเล่มแล้วครับ...(จากหลา่ยอาจารย์) มาเป็นเอกสารให้ดาวน์โหลด...และอ่านฟรี...


Download PDF File

ลองนำไปอ่านดูนะครับ...

วันอังคารที่ 10 กันยายน พ.ศ. 2556

ปูพื้นฐาน(ขั้นเทพ) Batch File ตอน 10

วันนี้...เราจะมาดูการทำงานเกี่ยวกับ Net กันบ้าง...ซึ่งเครื่องที่บ้านผม...ไม่มีเน็ตให้ใช้ครับอยู่หลังเขา...สัญญาณเ้ข้าไม่ถึง...มีแต่เน็ตมือถือ...เลยต้องมาสาิธิตจากที่ทำงานเอา... นั้นแหละครับการทำงานในเน็ต ก็สมดังชื่อ คำสั่งที่มีความสำคัญมากในเกี่ยวกับเน็ตบนวินโดวส์ ได้แก่ NET.EXE ครับ ซึ่งมันอาศัยใน System Folder ของระบบปฏิบัติการ...ไวรัสและผู้ไม่หวังดีจะลบแฟ้มนี้ทิ้งได้ถ้าต้องการไม่ให้มันทำงาน ฉนั้นการสร้างคำสั่ง Batch อย่างที่ผมสอนมาแล้วคือยัดใส Include ของ Batch to EXE ซะ เพื่อที่โปรแกรมจะได้ทำงานอย่างสมบรูณ์ มันทำงานอะไรได้บ้างเช่น
@Echo off
net use x: \\10.1.1.30\C: /user:Computer1 password /persistent:no
net use y: \\10.1.1.36\C: /user:xxx xxx /persistent:no
net use z: \\10.1.1.40\C: /user:xxx xxx /persistent:no
xcopy y:\zzz x:\Bxxx
xcopy z:\zzz x:\Cxxx
แมบไดร์ฟ และคัดลอกข้อมูลเสมือนเป็นเครื่องที่ทำงานอยู่ที่เดียวกันได้
ส่วนใครอยากรู้ว่้า NET ทำงานอย่างไรดูจา่กเวปไซต์ของต่างประเทศที่ การใช้งาน NET COMMAND
แต่หากต้องการนำมันมาเขียนเป็นโปรแกรมของเราเอง...ผมจะประยุกต์แบบง่ายๆ ให้ก่อนดังนี้
@echo off
:: Create BIOS Keyboard Service Binary
:: -----------------------------------
( echo e 100 B4 00 CD 16 88 E0 B4 4C CD 21
  echo.
  echo rcx
  echo 0a
  echo w
  echo q
)|debug getkey.com
:: -----------------------------------
:: End Module Binary

set /a a=1
:MainMenu
color 0B
cls
echo.
echo       _/  _/  ______/ __/ ___/ ______/ _____/ __/  _/   
echo      _/  _/  _/   _/  _/_/ _/ _/   _/     _/ _/   _/    
echo     _/  _/  ____/_/  _/   _/ _/   _/     _/  __/ _/     
echo    __/ __/ _/   _/  _/   _/ ______/     _/ ______/      
echo.
echo.
call :Menu 97 "#Net Command 1.00.#"
if %a% == 1 (call :Menu 97 "[ Check Workgroup ]" & title ตรวจสอบ computer name ใน workgroup เดียวกัน) else (call :Menu 03 "[ Check Workgroup ]") 
if %a% == 2 (call :Menu 97 "[ WhoIs Share     ]" & title ดูไฟล์ในเครื่องที่แชร์อยู่) else (call :Menu 03 "[ WhoIs Share     ]")
if %a% == 3 (call :Menu 97 "[ WhoIs Logon     ]" & title ตรวจสอบผู้ใช้ที่เข้าใช้งานเครื่องเรา) else (call :Menu 03 "[ WhoIs Logon     ]")
if %a% == 4 (call :Menu 97 "[ Service Running ]" & title ตรวจสอบเซอร์วิสที่รันอยู่) else (call :Menu 03 "[ Service Running ]")
if %a% == 5 (call :Menu 97 "[ Hidden IP       ]" & title สอนตัว) else (call :Menu 03 "[ Hidden IP       ]")
if %a% == 6 (call :Menu 97 "[ Unhidden IP     ]" & title ยกเลิกการสอนตัว) else (call :Menu 03 "[ Unhdiden IP     ]")
if %a% == 7 (call :Menu 97 "[ Exit Program    ]" & title ออกจากโปรแกรม) else (call :Menu 03 "[ Exit Program    ]")
call :Menu 03 "-------------------"
if %a% == 8 (call :Menu 97 "[ Anti Netcut     ]" & title เซ็ตคำสั่งป้องกัน Netcut) else (call :Menu 03 "[ Anti Netcut     ]")
echo.
echo Press Airrow Key select form menu
getkey.com

if %errorlevel% == 28 goto :EndMenu
if %errorlevel% == 72 goto :Up
if %errorlevel% == 75 goto :Left
if %errorlevel% == 77 goto :Right
if %errorlevel% == 80 goto :Down
goto :MainMenu
:Down
:Left
set /a a=%a%+1
if %a% == 9 set /a a=1
goto :MainMenu
:Up
:Right
set /a a=%a%-1
if %a% == 0 set /a a=8
goto :MainMenu

:EndMenu
if %a%==1 net view & pause
if %a%==2 net share & pause
if %a%==3 net session & pause
if %a%==4 net start & Pause
if %a%==5 net config server /hidden:yes & pause
if %a%==6 net config server /hidden:no & pause
if %a%==7 goto :End
if %a%==8 call :AntiNetcut
goto :MainMenu

:Menu color text
pushd %temp%
for /F "tokens=1 delims=#" %%a in ('"prompt #$H# & echo on & for %%b in (1) do rem"') do (
  <nul set/p"=%%a" >"%~2"
)
findstr /v /a:%1 /r "^$" "%~2" nul
del "%~2" > nul 2>&1
popd
echo.
goto :EOF

:AntiNetCut
for /f "tokens=1,2,13"  %%a in ('ipconfig') do if "%%b"=="Gateway" (
  for /f "tokens=1,2 eol=I" %%d in ('arp -a %%c') do call :SetStaticARP %%e
  goto :EOF
)
goto :EOF
:SetStaticARP %1
for /f "tokens=1,14"  %%a in ('ipconfig') do if "%%a"=="IPv4" (
  arp -s %%b %1
  msg %username% Set Static IP %%b in %1
)
arp -a
pause
goto :EOF

:End
del getkey.com
set a=
color



โปรแกรมน่าตาเป็นแบบนี้

จะมี Title เป็นภาษาไทย เมื่อเลื่อนเมนู...ลองนำไปใช้งานดูนะครับ...

ยังไงยังมีคำสั่งเกี่ยวกับ เน็ตเวิร์ค อีกเยอะ ครับ...จะทยอยมาสอนกันนะครับ...

วันพฤหัสบดีที่ 5 กันยายน พ.ศ. 2556

ปูพื้นฐาน (ขั้นเทพ) Batch file ตอน 9

การแสดงข้อความสี...โดยไม่ใช้ Debug
ส่วนใหญ่การแสดงสีใน CMD นั้นผู้ใช้งานส่วนใหญ่ จะใช้คำสั่ง Color แต่ ติดปัญหาตรงที่ Color นั้นไม่สามารถแสดงสีที่ต้องการเป็นบรรทัด หรือเฉพาะคำได้...แต่ยังไงมาถึงตรงนี้แล้ว...เรามีทางเลือกคือเลือกใช้งานฟังก์ชั่นที่สามารถแสดงสีที่แตกต่างได้ใน CMD ซึ่งคำสั่งของ DOS มีเพียงคำสั่งเดียวคือ FindStr เจ้าคำสั่งนี้...มันจะแสดงชื่อแฟ้มข้อมูลที่ค้นหาคำออกมาเป็นสีที่ต้องการได้ แต่ต้องประยุกต์ใช้งานให้เ็ป็นสักนิด...มาดูกัน

:CEcho color text
pushd %temp%
echo. >%2
findstr /v /a:%1 /R "^$" "%~2" nul
popd
goto :eof

โปรแกรมนี้เล็กกระทัดรัดมันทำงานอย่างไร
:CEcho color text ; ชื่อโปรแกรม CEcho เวลาเรียกใช้เช่น Call :CEcho 0A Testing...
pushd %temp% ; บรรทัดนี้จะให้แฟ้มขยะชืิ่อเดียวกับข้อความไปเก็บในโฟลเดอร์ชัวคราวรอลบทิ้ง
echo. >%2 ; สร้างแ้ฟ้มขึ้นมาโดยไม่มีข้อความใด
findstr /v /a:%1 /R "^$" "%~2" nul ; แสดงสีข้อความตามที่กำหนด
popd ; กลับสู่โฟลเดอร์ที่ทำงานอยู่
goto :eof ; จบโปรแกรม

มาดูภาพการทำงานของมัน
@echo off
call :CEcho 02 "Testing... Message1"
call :CEcho 84 "Testing... Message2"
call :CEcho 17 "Testing... Message3"
call :CEcho 9A "Testing... Message4"
call :CEcho 3C "Testing... Message5"
pause
goto :eof

:CEcho color text
pushd %temp%
echo. >%2
findstr /v /a:%1 /R "^$" "%~2" nul
popd
goto :eof


การทำงานจะปรากฎดังภาพ...แต่ข้อเสียคือ มันมีสัญลักษณ์ : ติดมาด้วยเนื่องจาก... FindStr นั้นจะมี : คั่นระหว่างชื่อแฟ้มและข้อความ...ยังไงก็แก้ขัดไปก่อน...เพราะการลบมันออกต้องอาศัยฟังก์ชั่นที่มากกว่านี้หลายบรรทัด...เกรงว่า...ว่าจะงงเสียก่อน...วันนี้ลองแค่นี้ดูก่อน...

ที่นี้...ในบางครั้งเราอยาก Echo แบบหลายครั้ง ในบรรทัดเดียวทำได้ไหม...
ทำได้ครับ...คำสั่งเป็นแบบนี้
@echo off
echo|set /p=echo same line : 
pause
หน้าตาของการแสดงข้อความในบรรทัดเดียวกันเป็นยังไงมาดู

จะเห็นว่า มีข้อความว่า echo same line : 
จากนั้นคำสั่ง pause จะแสดงผลการทำงานต่อคำสั่ง Set /p อีกที...ทำให้สามารถแสดงข้อความในบรรทัดเดียวกันได้ ทีนี้...มาดูตัวอย่าง
@echo off
echo|set /p=Text 1 : 
echo|set /p=Text 2 : 
echo|set /p=Text 3 : 
echo|set /p=Text 4 : 
echo|set /p=Text 5 : 
echo|set /p=Text 6 : 
pause>nul
ผลการทำงานคือ

จะเห็นว่า...ข้อความต่อกันในบรรทัดเดียวกัน...