My First DSLR Camera

เมื่อประมาณต้นเดือนที่แล้ว ผมได้ซื้อกล้อง DSLR ตัวแรกในชีวิตของผมมันคือ Nikon D90 ซึ่งมีเรื่อวราวมากมายแต่เพียบชั่ววูบก่อนจะตัดสินใจซื้อมัน ซึ่งมันทำให้ผมได้อยากศึกษาการทำงานของกล้อง Digital มากขึ้น มากขึ้น และมากขึ้น แต่สิ่งที่ได้ศึกษามันเป็นเพียงทฤษฎีเท่านั้น ยังไม่ค่อยมีโอกาสได้เอาไปปฏิบัติจริงเท่าไรนัก เนื่องจากสภาพอากาศไม่เอื้ออำนวย

D90 + SB-900

 

ก่อนอื่นจะต้องท้าวความก่อนเลยว่า ทำไมจึงตัดสินใจซื้อกล้องตัวนี้

เมื่อสักประมาณหนึ่งเดือนครึ่งที่แล้วได้เดินผ่านหน้าร้านกล้องร้านหนึ่งติดประกาศลดราคากล้อง Canon 450D พร้อมเลนส์ kit เหลือไม่ถึง 400 ปอนด์ (มันถูกมากกก) ไอ้เราก็เคยอยากได้กล้องมานานแล้ว แต่ไม่มีความรู้เรื่องกล้องอะไรเลย แค่เพียงอยากได้กล้องที่มันปรับได้มากกว่าทั่วไปหน่อย เอาไว้ถ่ายเล่นเวลาไปเที่ยว ประกอบกับมาอยู่ที่นี่ได้สักพัก กลับนึกขึ้นได้ว่ามาอยู่ต่างประเทศทั้งที น่าจะมีกล้องดี ๆ สักตัว เอาไว้ถ่ายภาพบรรยากาศต่างประเทศเก็บไว้ ใช้โอกาสให้เป็นประโยชน์ ฯลฯ

นั่นคือความคิดวูบแรกที่อยากจะได้กล้อง (แค่ความรู้สึกอยาก)

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

จากที่ผมได้สนทนากับหลาก ๆ คนเสียงส่วนใหญ่ค่อนข้างจะไปทาง Nikon มากกว่า Canon โดยมีเหตุผลไม่กี่ข้อว่า Nikon เทคโนโลยีมันดีกว่า ภาพมันสีสดและคมชัดกว่า ซึ่งหนึ่งในนั้นมีเพื่อนผมซึ่งเป็นนักข่าวและเจ้าของกล้อง Canon 5D อยู่ด้วย แต่ในสิ่งที่ดีกว่านี้ ก็มีข้อแตกต่างทางด้านราคา ไม่ว่าจะเป็นตัวกล้อง เลนส์ และอุปกรณ์ต่างๆ ซึ่งแพงกว่าพอสมควร

พอสรุปได้ว่าจะซื้อกล้องยี่ห้อ Nikon แล้วนั้นผมจึงรวบรวมข้อมูลทั้งจากคนกลุ่มเดิมนั้น และ web ต่าง ๆ บ้างก็บอกให้เล่น D80 ก่อน บ้างก็เชีย D90 ไปเลย ผมจึงค้นคว้าหาข้อแตกต่างและเปรียบเทียบความคุ้มค่าของสองตัวนี้ รวมถึง D300 ด้วย ซึ่งพอจะจะสรุปเหตุผลในการซื้อกล้องตัวนี้ของผมได้ว่า 

- D80 เป็นกล้องเก่า ออกมาเมื่อสองปีที่แล้ว ราคาเพิ่งลงหลังจากที่ D90 ออกมา ซึ่งถ้าจะซื้อก็ซื้อของใหม่ที่เทคโนโลยีดีกว่าไปเลย จะได้ใช้นานๆ ไม่เบื่อ
- D90 ออกมาใหม่ด้วยคุณสมบัติใหม่ ๆ เพียบ อย่างเช่น ถ่ายวิดีโอได้, ใช้ ISO ได้สูงกว่าและจัดการกับ Noise ได้ดีกว่า และที่สำคัญนำเทคโนโลยีจากรุ่นใหญ่มาใส่เอาไว้ เช่นเซนเซอร์ของ D300 ทำให้ได้ภาพที่คมชัดและแม่นยำ, จอ LCD 3 นิ้ว
- D90 ที่ website นี้ได้ทำการทดสอบ sensor ของ D3 D300 D90 D80 ผลปรากฎว่า ความคมชัดของ D90 นั้นเทียบเท่า (เหมือนเป๊ะ) กับ D300 และ D3 (โอ้โห้ ราคาถูกกว่ามาก แต่คุณภาพเท่า ของอย่างนี้ใครจะไม่เอา)
- D300 รุ่นที่ใหญ่ขึ้นมากับราคาที่เพิ่มอีกมาก แต่ออกมาก่อน D90 สิ่งที่ D300 มีมากกว่า D90 (เท่าที่คิดได้) คือ D300 นั้นมีจุดโฟกัสมาก (เท่าไรจำไม่ได้แล้วแต่เต็มเลย) แต่ส่วนตัวผมคงไม่ใช้จุดเหล่านั้น และ D300 ใช้วัสดุที่แข็งแรงกว่าและมีการซีลแน่นหนากว่า เหมาะแก่การเอาไปถ่ายในป่า ทะเลทราย ฯลฯ

 

My D90

 

 

จึงติดสินใจแน่แล้วว่าจะซื้อ D90 ถึงจะแพงกว่า D80 และ 450D หน่อย แต่ผมคิดว่าคุ้มค่ากับสิ่งที่ได้มา แต่มันยังไม่จบ !!
มีพี่ผมคนนึง แกเล่น Nikon เหมือนกันแต่แกบอกว่า

ไม่ต้องซื้อกล้องแพงมากก็ได้ เก็บเงินไว้ซื้อเลนส์ดีกว่า
เอ็งไม่ต้องเอา lens kit เลยเพราะว่ามันขยะ ขายมือสองก็ไม่มีราคา

ผมเลยหยุดคิดสักแป๊บนึง  แล้วถามต่อไปว่า แล้วผมควรจะมีเลนส์ไรมั่ง

ถ้าจะใช้ตัวเดียวเที่ยวทั่วโลก เอ็งเอา 18-200 VR ไปเลย แจ่ม

ตอนนี้ในหัวผมเริ่มคิดว่า งบมันเริ่มเพิ่มจากตอนแรกมากมาย.. แต่เอาก็เอาวะ ผมตัดสินใจซื้อ 18-200 เหมือนกันครับ แต่เป็น Sigma 18-200 OS ซึ่งผมคิดว่ามันไม่ต่างกันเท่าไร แต่ราคาต่างกันเยอะ ประกอบกับดู Review ในห้อง lab ปรากฎว่า Sigma ให้ภาพที่คมชัดกว่าในช่วง Tele (ตั้งแต่ใช้มารู้สึกว่าไม่ค่อยเลนส์นี้เท่าไร เพราะว่าหมุน Focal length แล้วมันหนืด ๆ และเวลาหันหน้าเลนส์ลงพื้น มันจะยืดออกเอง ส่วนมาก Auto focus ก็รู้สึกว่ามันไม่ค่อยถูกใจ ยังช้าอยู่เลย ขนาดข้าง ๆ เลนส์เขียนว่า HSM แล้วนะ)

แล้วเราก็ยังอยากได้เลนส์ wide อีกด้วย (ซึ่งตอนนั้นไม่มีความรู้เรื่องถ่ายภาพเลย) เลยซื้อ Sigma 10-20 อีกอันซึ่งคิดว่าสักวันยังไงก็ต้องมี และคงไม่ซื้อ Nikon 12-24  แน่นอนนนน ฮาา…

สรุปชุด Kit ของผมกระเป๋าค่อนข้างฉีกไปกับ D90 + 50mm f/1.8 + Sigma 18-200 OS + Sigma 10-20…

 

D90 + SB-900

 

มันยังไม่จบ เมื่อก่อนคริสมาส หลังจากที่ได้ลองเล่นกับกล้องได้ไม่นาน กิเลศก็เริ่มเพิ่มขึ้น ผมติดสินใจซื้อ Flash เพราะได้เห็นภาพสวย ๆ ใน Flickr ซึ่งในการถ่ายนั้นต้องใช้ Off camera flash (flash ที่ไม่ได้อยู่บนกล้อง) โชคดีมากครับ ผมได้รู้จัก Nikon CLS ซึ่งช่วยเราได้มาก เราสามารถสั่ง Flash ที่วางอยู่ให้ยิงได้โดยใช้ Built-in Flash ติดกับตัวกล้อง มิหนำซ้ำ ยังสามารถใช้ Flash ของมัน Control ตัวอื่นได้อีกด้วย แจ๋ว…

ถามมาก็หลายคน ส่วนมากบอก SB-800 แต่… มีคนนึง(น้าหง่า)บอก SB-900 ไปเลย .. จัดไปซะ…

 

My SB-900

 

ถึงปัจจุบันก็หมดไปเยอะเหมือนกัน แต่ผมต้องพยายามมีสมาธิอยู่กับมัน ไม่ใช่แค่ความต้องการชั่วครั้งชั่วคราว แต่หลังจากที่ได้ซื้อกล้องทำให้ผมได้เรียนรู้อะไรเยอะขึ้นๆ แต่ส่วนใหญ่จะเป็นทฤษฎีเกี่ยวกับกล้องและแสงซะมากกว่าประสบการณ์ (แน่นอนประสบการณ์ต้องใช้เวลา) แต่อย่างน้อยผมก็คิดว่าหากเรารู้และเข้าใจทฤษฎีและวิธีจัดการกับภาพ เราจะสามารถพัฒนาและเพิ่มประสบการณ์ได้เร็วกว่า เดินออกไปข้างนอกแล้วถ่ายไปเรื่อยโดยที่ไม่เข้าใจความสัมพันธุ์ นับเป็นการเริ่มต้นที่ดี

ท้ายสุดของบทความนี้ ต้องขอบคุณเพื่อน ๆ พี่ ๆ ทุก ๆ คนที่ให้คำแนะนำและเป็นแรงบันดาลใจให้เข้าสู่วงการ (ตอนนี้เข้ามาได้ครึ่งก้าวแล้ว) 
เพื่อนปิง – นักข่าวและเจ้าของ website pingbook.com เชียร์ตลอด แต่ให้ความรู้มากมาย ส่วนมากเชียร์ของแพง -_-’ (ผมตั้งงบในใจจะซื้อขาตั้งกล้องไม่แพง มันเชียร์ Manfrotto รุ่น Carbon fiber 055 แพงสุดเลย, อีกทั้ง 24-70 ซึงผมไม่คิดว่าจะซื้อในเร็ววัน)
จารย์ปั๋ง – อธิบายเรื่องรูรับแสงจนผมเข้าใจ และสามารถใช้ในการติดสินใจเลือกซื้อเลนส์ได้
เพื่อนอาร์ม – เชียร์ของมือสอง อีเบย์ หากผมไม่มั่นใจราคาก็จะถามคนนี้ก่อนเลย (คือคิดในใจว่า กูเล่นทั้งที ต้องไม่ซื้อแพงกว่าที่ไทยโว้ย)
เพื่อนน้าหง่า – ช่วยอธิบายทฤฎีอะไรสักอย่าง จำไม่ได้แล้ว และแนะนำเรื่อง Flash
โกพีท –  พี่ชายที่เมกา – แนะนำเลนส์และของแพงอีกคน (เฮียแกแนะนำ 12-24, 24-70, 70-200 ซึ่งผมไม่คิดจะซื้อสักตัวตอนนี้)
พี่โหน่ง Intoxica – ให้ความรู้ด้านเทคนิคการถ่ายภาพ การจัดไฟช่วย ภาพของแกเป็นแรงบันดาลใจให้ผมซื้อ Flash ด้วยนะคร๊่าบ
- และคนอื่น ๆ ผมไม่ได้กล่าวถึง เน่อ

 

My Camera Bag

 

ปล. ความจริงไม่ค่อยอยากเขียนโม้เรื่องตัวเองเท่าไร ไม่ค่อยมีความรู้เลย แต่อยากจะเกริ่นไว้ก่อนที่จะลงบทความต่อไป ซึ่งเกี่ยวกับ วิทยาศาสตร์การถ่ายภาพ (ไม่ใช่ศิลปะเน้อ ใครคิดว่าการถ่ายภาพเป็นแค่ศิลปะอย่างเดียว ส่วนตัวผมไม่ใช่เด็กติสท์อะไรทั้งนั้น คิดตรงไมตรงมาอย่างเดียว ฮ่า ๆ) ซึ่งเป็นความรู้ทั่วไปเกี่ยวกับกล้อง Digital (ไม่มี Rules of thirds มาเกี่ยวแน่นอน สิ่งที่จะเขียนเป็นสูตรและตัวเลขทั้งนั้น แต่จะพยายามรวบรวมความสัมพันธุ์เข้าหากันให้หมด)

Nam Nuang (แหนมเนือง) DIY

What’s up !
I’ve been in London for almost 8 months and really miss Thai food so much, actually what I am going to show you today isn’t Thai food, but adapted Vietnamese food.

 

I went to Vietnamese restaurants a few times so far, but haven’t found any good place yet. What I like the most is Nam Nuang (Here, it’s called BBQ pork with paper rice), so I had to learn how to make it !

This is my first time for Nam Nuaug, which I got the recipes from a Thai website I couldn’t remember. The most significant thing for this menu is definitely the sauce. Does anyone know how to make the sauce ? You might be surprised if I tell you the secret behind this.

 

All you need for the sauce are :
- 1 x Potato – cooked, smashed.
- Pork soup – 500 ml
- Sugar  - 1 cup 
- Salt – 1 teaspoon
- Fish sauce – 1 tablespoon 
- Tamarind paste – 2 tablespoon
- Pickled garlic water – 2 tablespoon
- Pig liver – 2 small pieces, cooked smashed.

Firstly, put half cup of sugar into a small pot without water and bring to boil. Wait until it turns brunt-sugar-brown color, then add pork soup and rest of sugar, bring to boil again. 
To make it more sticky, put smashed cooked potato in. Flavor it with all ingredients except pig liver and heat it for about 5 minutes to ensure that it becomes smooth and creamy. Finally, add cooked smashed pig liver.
 

 

DSCN1942.JPG

DSCN1944.JPG

DSCN1946.JPG

 

When finish the first part of making the sauce, you will need extra things for the sauce to be more tasteful and yummy for Thai. Putting chili with vinegar and grind peanut is needed.

 

DSCN1949.JPG

DSCN1950.JPG

 

Looks great huh ?
Once you’ve done the sauce, Let me tell you the things you’ll need.
- Rice paper – I bought from China town.
-  Pak Preaw (ผักแพรว) – China town
- Chili
- Garlic
- Green apples – replacement for green mangoes. 
- Banana – I couldn’t find green one.
- Rice vermicelli  (เส้นหมี่ขาว)
- Iceberg Lettuce (ผักกาดแก้ว)
- Pork and Meat balls. I bought from Tesco.
 

And it is the time to put them together !!

 

DSCN1953.JPG

DSCN1956.JPG

DSCN1959.JPG

DSCN1960.JPG

DSCN1962.JPG

DSCN1965.JPG

DSCN1966.JPG

 

What do you think ?

Reversing a router for fun and profit.

เนื่องจากเรื่องที่จะเขียนต่อไปนี้ มีความละเอียดอ่อนด้านจริยธรรมและกฏหมาย จึงจะขอเขียนเป็นภาษาไทย

 

เรื่องมันก็มีอยู่ว่า เมื่อสองวันก่อนบังเอิญผมได้ไปอ่านเจอในกระทู้ ๆ หนึ่งใน web remote-exploit.org แต่ก็เป็นกระทู้ที่นานมาแล้วแหละ สักประมาณเดือน เม.ย. 2008 ซึ่งเขียนไว้ว่า router ที่ให้ลูกค้า broadband นำไปใช้ของบริษัทใหญ่แห่งหนึ่งในประเทศที่ผมอยู่ตอนนี้ ซึ่งดังในด้านให้บริการดู TV ผ่านดาวเทียมแบบเสียรายเดือน โดยที่ตัว router ที่ให้มานั้น จะถูก SET Password เป็นแบบ WPA อยู่แล้ว โดยมี Password เป็นตัวอักษร 10 หลัก 

ซึ่งฟังดูก็ปกติดี ใช้ WPA ปลอดภัยจากการโจมตี อย่างดีก็ต้องใช้เวลาถอดรหัส ไม่น่ามีอะไรผิดปกติ แต่ที่ผิดปกติมันอยู่ที่
ตัว software ของ router ยี่ห้อ NETGEAR ซึ่ง Firmware จะเป็น Firmware ที่ทาง Netgear ทำเป็นพิเศษเพื่อให้บริษัทที่แปลเป็นไทยว่า “ท้องฟ้า” นี้ โดยที่ username, password และ wpa passkey ของตัว router นั้นจะถูก set มาจากโรงงาน ซึ่งสามารถคำนวณได้จาก mac address ซึ่งเพียงแค่รันโปรแกรม net stumbler, airodump ก็สามารถเห็นได้โดยง่าย

จากนั้นผมก็เริ่มค้นหาจาก Google ว่าพอมีเบาะแสอะไรบ้างเกี่ยวกับเรื่องนี้ เพราะคนที่ใช้ router ตัวนี้อยู่ที่ประเทศนี้ ไม่น่าจะมีต่ำกว่าครึ่งล้านคน ปรากฏว่าไปพบ web นึง ซึ่งเป็นไปแล้วจริง ๆ ที่เพียงแค่กรอก mac address ลงไป ก็ได้ username, password และ wpa passkey โอ้ว ยังไงกันเนี่ย แต่ทางคนเขียน web ไม่ได้มีจุดประสงค์ให้คนนำไปใช้ในทางที่ผิด จึงกำหนดให้เข้าไปใช้ได้ วันละ 3 ครั้งเท่านั้น

เอาหล่ะ ค้นหาใน google อยู่หลายชั่วโมง ไม่มีเบาะแสอะไรเพิ่มเติม ก็เลยต้องลองเล่นกันมันสักหน่อย

โชคดีที่ทราบมาว่าตัว NETGEAR DG834G นี้ใช้ OS Linux เป็นระบบปฏิบัติการ ซึ่งแน่นอนมี License เป็นแบบ GPL คือหากมีการนำไปพัฒนา ต้องเปิดเผย Source code ด้วย ทาง Web netgear จึงมีให้โหลด firmware ของเจ้า router ทุกตัวที่ออกสู่ท้องตลาด รวมถึงตัวที่เจ้าบริษัท “ท้องฟ้า” นำมาขายให้ลูกค้าด้วย

โชคก็ไม่ดีเสมอไป ตัว firmware ที่โหลดมามี Source code ก็จริง แต่เฉพาะส่วนที่เป็น Linux ส่วนโปรแกรมอื่นที่ทาง Netgear พัฒนาขึ้นมาเอง ไม่ได้อยู่ในเงื่อนไข GPL แต่ก็ยังดีที่มีเป็น binary file เราจึงต้องมาแกะ กัน

หลังจากที่โหลดมาและแตก fileแล้ว ผมก็ได้ลองเล่นกับ binary file ต่าง ๆ ปรากฏว่าไปเจอ file นึงมีเบาะแส น่าจะเป็น file ที่เราต้องการ เพราะดูจากคำสั่งพวก plain text ภายใน file แล้วเหมือนกับทำหน้าที่หลายอย่าง file นั้นคือ /usr/sbin/rc นั่นเอง

 

 kengz:sbin kittikan$ strings rc | grep iwconfig
iwconfig ath0 essid "%s"
iwconfig ath0 channel %d
iwconfig ath0 key %s [%d]
kengz:sbin kittikan$ file rc
rc: ELF 32-bit MSB executable, MIPS, version 1 (SYSV), dynamically linked (uses shared libs), stripped
kengz:sbin kittikan$

 

ตอนแรกผมก็ไม่รู้หรอกนะครับว่าเจ้า router เนี่ยมันใช้ cpu ตระกูลไหน แต่พอลองใช้คำสั่ง file ดูก็พบว่ามันเป็น CPU MIPS ซึ่งทำงานแบบ MSB Mode 

MSB หรือ Most Significant Bit คือประเภทของการเรียงข้อมูลใน memory ซึ่งมีอีกชื่อนึงว่า Big Endian ซึ่งคนละแบบกับตระกูล Intel ที่เราใช้กันจะเป็น LSB หรือ Little Endian ซึ่งสองแบบนี้จะเรียงข้อมูลสลับลำดับกัน (เฉพาะตอนเก็บลง mem ข้อมูลใน register ไม่เกี่ยว)

จากนั้นผมก็ไม่รอช้า เปิดโปรแกรม ida pro ที่มีให้ disassemble ออกมาเลยซึ่งหน้าตาที่ได้ ก็คล้าย ๆ แบบนี้


.text:0040E0BC li $gp, 0xFBFA214
.text:0040E0C4 addu $gp, $t9
.text:0040E0C8 addiu $sp, -0xD0
.text:0040E0CC sw $ra, 0xD0+var_8($sp)
.text:0040E0D0 sw $s3, 0xD0+var_C($sp)
.text:0040E0D4 sw $s2, 0xD0+var_10($sp)
.text:0040E0D8 sw $s1, 0xD0+var_14($sp)
.text:0040E0DC sw $s0, 0xD0+var_18($sp)
.text:0040E0E0 sw $gp, 0xD0+var_C0($sp)
.text:0040E0E4 lw $v0, (off_100002F4 - 0x100082D0)($gp)
.text:0040E0E8 lw $t9, (off_100003E4 - 0x100082D0)($gp)
.text:0040E0EC addiu $a0, $sp, 0xD0+var_2F
.text:0040E0F0 lbu $v0, 0x7330($v0)
.text:0040E0F4 move $a1, $0
.text:0040E0F8 li $a2, 9
.text:0040E0FC jalr $t9
.text:0040E100 sb $v0, 0xD0+var_30($sp)
.text:0040E104 lw $gp, 0xD0+var_C0($sp)
.text:0040E108 addiu $a0, $sp, 0xD0+var_B8
.text:0040E10C move $a1, $0
.text:0040E110 lw $t9, (off_100003E4 - 0x100082D0)($gp)
.text:0040E114 li $a2, 0x80
.text:0040E118 jalr $t9
.text:0040E11C addiu $s3, $sp, 0xD0+var_30
.text:0040E120 lw $gp, 0xD0+var_C0($sp)
.text:0040E124 move $a0, $s3
.text:0040E128 move $a1, $0
.text:0040E12C lw $t9, (off_100003E4 - 0x100082D0)($gp)
.text:0040E130 li $a2, 0xA
.text:0040E134 sh $0, 0xD0+var_38($sp)
.text:0040E138 jalr $t9
.text:0040E13C sb $0, 0xD0+var_36($sp)
.text:0040E140 lw $gp, 0xD0+var_C0($sp)
.text:0040E144 addiu $a1, $sp, 0xD0+var_20
.text:0040E148 move $s1, $0
.text:0040E14C lw $a0, (off_100002F4 - 0x100082D0)($gp)
.text:0040E150 lw $t9, (myPipe_ptr - 0x100082D0)($gp)
.text:0040E154 move $s2, $0
.text:0040E158 jalr $t9
.text:0040E15C addiu $a0, 0x72D4
.text:0040E160 lw $gp, 0xD0+var_C0($sp)
.text:0040E164 addiu $v0, $s1, 1

 

งง เลย ใช่ไหมหล่ะครับ ไม่ต้องแปลกใจครับ ผมก็งง ผมไม่เคย reverse MIPS มาก่อน ซึ่ง Instruction set ก็ไม่เหมือนกับ Intel และ register ก็ชื่อแปลก ๆ มากมาย ตั้งแต่ s0, s1, s2… a0, a1, a2… v0, v1,… โอยจำได้ไม่หมด คำสั่งก็งง ๆ ยิ่งไปกว่านั้นในการเรียก function ยังทำให้งงไปใหญ่ ส่วนโปรแกรม IDA Pro ที่ผมใช้ disassemble มันออกก็ยังทำได้ไม่ดี ไม่ resolve พวก symbol และ reference ให้ บอกตามตรง อ่านแทบไม่รู้เรื่อง

จึงต้องหามาพึ่งพี่ google เพื่อดูคู่มี Instruction set ของ MIPS ว่าตัวไหนทำอะไรได้บ้าง (ผมไม่ได้อ่านหมดนะครับ ไล่โปรแกรมไป แล้วสงสัยตัวไหนแบบละเอียดค่อยดู) และพยายามหาเทคนิคการ Reverse engineer สำหรับ MIPS ปรากฏว่าในโลกนี้แทบไม่มีใคร reverse MIPS เท่าไรนัก ที่เจอมีแค่คนเดียวคือคุณ Julian http://www.cr0.org/paper/mips.elf.external.resolution.txt เขียนไว้คร่าว ๆ ว่าการเรียก function ของ MIPS แบบ ELF เป็นลักษณะไหน

จากพิจารณาตามที่คุณ julian บอกไว้แล้ว ผมจึงต้องความหา uclibc toolchian มาเพิ่มใช้ objdump สำหรับ MIPS รวมถึง readelf ด้วย ผมลองมาแกะข้อมูลต่าง ๆ และยัดค่าต่าง ๆ ลงใน file ที่ได้จากมา IDA โดยใช้ perl script และ tool ตามที่ตา Julian บอกไว้ จึงทำให้ code ที่แกะได้มา ดูดีขึ้นมาก แทบจะเริ่มอ่านรู้เรื่องแล้ว ดังเช่นแบบนี็

.text:0040D924 li $v0, 0x62
.text:0040D928 beq $v1, $v0, loc_40D998
.text:0040D92C lw $t9, (create_upnp_cfg_ptr - 0x100082D0)($gp) # create_upnp_cfg -> $t9
.text:0040D930 jalr $t9
.text:0040D934 nop
.text:0040D938 lw $gp, 0xA8+var_98($sp)
.text:0040D93C move $a2, $s0
.text:0040D940 addiu $a0, $sp, 0xA8+var_90
.text:0040D944 lw $a1, (off_100002F4 - 0x100082D0)($gp) # aTmpNvram -> $a1
.text:0040D948 lw $t9, (off_100003A4 - 0x100082D0)($gp) # sprintf -> $t9 (sub_40FEE0)
.text:0040D94C jalr $t9
.text:0040D950 addiu $a1, 0x724C # "route add -net 239.0.0.0 netmask 255.0.0.0 %s"
.text:0040D954 lw $gp, 0xA8+var_98($sp)
.text:0040D958 lw $t9, (off_10000500 - 0x100082D0)($gp) # system -> $t9 (sub_40FC30)
.text:0040D95C jalr $t9
.text:0040D960 addiu $a0, $sp, 0xA8+var_90
.text:0040D964 lw $gp, 0xA8+var_98($sp)
.text:0040D968 addiu $a0, $sp, 0xA8+var_90
.text:0040D96C lw $a1, (off_100002F4 - 0x100082D0)($gp) # aTmpNvram -> $a1
.text:0040D970 lw $a2, (off_100002F4 - 0x100082D0)($gp) # aTmpNvram -> $a2
.text:0040D974 lw $t9, (off_100003A4 - 0x100082D0)($gp) # sprintf -> $t9 (sub_40FEE0)
.text:0040D978 addiu $a1, 0x727C # "%s&"

 

ทำให้ดูคร่าว ๆ ออกว่า มีการเรียกอะไรตรงไหนเกิดขึ้นบ้าง แต่ปัญหาต่อไปที่เจอก็คือ ไม่เข้าใจ step การทำงานลึก ๆ เพราะในการทำ reverse engineering นั้นต้องสามารถไล่ step การทำงานได้จึงจะสามารถ เขียน algorithm ตามนั้นได้ ซึ่งผมต้องเสียเวลาถึงครึ่งวันในการเข้าใจการทำงานของมัน ซึ่งผมก็ได้เขียนโปรแกรมที่แกะ algorithm ออกมาเป็นภาษา perl (อีกแล้ว) และทดลองดูปรากฏว่าได้ output เหมือนกับ web ของนาย julian

ตัวอย่างโดยการใส่ mac address เป็น 11:22:33:44:55:66 อันบนเป็นของนาย Julian อันล่างเป็นของผม

แฮะ ๆ มี bug นิดหน่อยเนื่องจากใน algorithm มีคำสั่งคุณด้วย ผมลัพธ์ที่ได้ของ MIPS จะมีขนาด 64bit

จากการที่ได้ลองทำครั้งนี้ ทำให้รู้ถึงคำสั่งของ MIPS และเทคนิคเกี่ยวกับ MSB รวมถึงการเรียก function ของ ELF ดีขึ้นมาก ซึ่งผมคิดว่ามีหลายประเทศไม่น้อย ที่มีการใช้เทคนิคนี้ในการ generator wifi password ให้กับลูกค้า…

ผมไม่สามารถเปิดเผย algorithm และ code ส่วนนั้นได้ เนื่องจากเหตุผลด้านจริยธรรมและกฏหมาย (ethical and legal issue) หากใครมีข้อสงสัย สอบถามได้ฮะ

เมื่อถูกท้าทาย

หลังจากที่ไม่ได้เปิด Facebook มานาน วันนี้ลองเข้าไปดูเล่น ๆ ปรากฎว่ามี Invitation มาให้เล่นเกมส์ word challenge
ไอ้เราก็ลองเล่นไปเล่นมา รู้สึกสนุกดีนะ แต่คิดศัพย์ไม่ค่อยออกเลย ก็เลยเขียน script มาช่วยค้นหาศัพย์ ซึ่งเขียนด้วย perl

ก่อนอื่นก็ไปหา dictionary ก่อนเลยไม่ค่อยมีที่ถูกใจ จนมาพบกับ web นึงซึ่งค่อนข้างดูแปลก (รึเปล่า)

นั่นคือ http://zyzzyva.net/ ตรงข้างล่างมีรวบรวมศัพย์หลาย ๆ แบบ เราก็เลยจับเอามายำกันซะ ให้เหลือศัพย์ที่มีความยาว 3 – 6 ตัวอักษร

จากนั้นก็เขียน perl เพื่อมา search ศัพย์จากตัวอักษรที่มีอยู่ ซึ่ง algorithm ไม่มีอะไรมาก คืออ่าน file เข้ามาแล้วก็ก็จัดการเรียงตัวอักษรซะใหม่ แล้วจึงค่อยจัดเก็บเข้า mem แบบ hash จะได้ไม่ต้องมาวน loop เพื่อ search หลาย ๆ รอบ จากนั้นก็ส่วนของการรับ input ก็เขียนให้เอาตัวอักษรมา 3 – 6 ตัวทุก combination มา search ใน hash ที่เตรียมไว้

ตอนแรกก็พิมพ์ตาม ศัพย์ที่มีใน dictionary นั่นแหละ แต่ทำไปทำมาชักไม่สะดวก โชคดีที่ perl มี Module ชื่แ Win32::GuiTest ซึ่งมีคำสั่ง Sendkey ของ windows… เสร็จโจรเลยหล่ะ ทีนี้ ผลลัพธ์ที่ได้คือ… ดัง VDO


ส่วน code นั้นก็เขียนแบบง่ายๆ มีเนื้อหาดังนี้

use Win32::GuiTest qw(FindWindowLike GetWindowText
SetForegroundWindow SendKeys);
use Win32::Clipboard;

load_word();
$min = 3;
$max = 6;

while(1)
{
	print "Input : ";
	$input = ;
	chomp($input);

	SetForegroundWindow(658262);
	doit($input);
}

sub doit
{
	my $set = shift;
	@answer = "";
	@list2 = "";
	for(my $i=$max;$i >= $min;$i--)
	{
		@list = "";
		find_com($set,"",0,$i);
		@list = sort(@list);
		foreach $l (@list)
		{
			push @list2,$l;
		}
	}

	my %ww = "";

	foreach $l (@list2)
	{

		if($word{$l})
		{
			for(my $i = 0;$i < $word{$l}; $i++)
			{
				if(!$ww{$words{$l}[$i]})
				{
					#print "$l = $words{$l}[$i]\n";
					push @answer, $words{$l}[$i];
					$ww{$words{$l}[$i]} = 1;
				}
			}
		}
	}
	print "\n\n";

	@answer = sort {length $a <=> length $b || $a cmp $b} @answer;
	foreach $ans (@answer)
	{
		if($ans eq "")
		{
			next;
		}
		if(length($ans) == 6)
		{
			print ">>> $ans\n";
			next;
		}
		SendKeys("$ans~");
		print "Trying $ans\n";
	}

	print "\n\n";
}

sub find_com
{
	my $set = shift;
	my $this_text = shift;
	my $count = shift;
	my $max = shift;
	for(my $i = $count;$i < length($set) ; $i++)
	{
		my $the_text = $this_text . substr($set,$i,1);
		if(length($the_text) == $max)
		{
			my $x = rearrange($the_text);
			push @list,$x;

		}
		elsif(length($set) - $i < $max - $count)
		{
			return;
		}
		else
		{
			find_com($set,$the_text,$i+1,$max);
		}
	}
}

sub rearrange
{
	my $text = shift;
	my @tmp;
	for(my $i = 0 ; $i < length($text) ; $i++)
	{
		my $sub = substr($text,$i,1);
		push @tmp, $sub;
	}
	@tmp = sort(@tmp);
	return join("",@tmp);
}

sub load_word
{

	open(READ,"enable1.txt");
	@data = ;
	close(READ);
	chomp(@data);

	my $set = shift;
	my $min = 3;
	my $max = 6;

	foreach $line (@data)
	{
		if(length($line) < 3 || length($line) > 6)
		{
			next;
		}
		$re = rearrange($line);
		if(!$word{$re})
		{
			$words{$re}[0] = $line;
			$word{$re} = 1;
		}
		else
		{
			$words{$re}[$word{$re}] = $line;
			$word{$re}++;
		}
	}
}

Rard Nah in London (ราดหน้า ใน ลอนดอน)

IMG_0916.JPG

Hi, Long time no see.
After never update the blog for quite a long time (actually, it’s really a long time). I’ve decided to update the blog again! (Applause !!). I’ve been living in UK for about 5 months. The weather was terrible when I had just arrived but it’s better now (I hope so).

The thing is ‘Living Cost’ here is quite expensive, especially for accommodations, transportations and food. I had to live unambitiously everyday since then. So, I’ve improved my cooking skill a lot ! I’ll show you what i’ve done today !

I just have finished cooking Ba-Mee Rard Nah (บะหมี่ราดหน้า) and have taken 4 – 5 photos. It’s not so bad. Actually, I think it’s perfect and lovely. Let see how I made this !

 

IMG_0909.JPG

First of all, I’ve got chicken breast, asparagus, shiitake mushroom, garlic, spinach (you might not see, it’s on the top right corner of the picture) and chinese fresh noodle. I prepared garlic oil (กระเทียมจียว) by putting sliced chopped garlic in hot oil and stir-fried it until the garlic turned yellow.

IMG_0912.JPG

After I had finished preparing garlic oil. I scalded the noodle by pouring boiling water into it, make sure you do not take this too long because the noodle will be softer than you want. Then I put a little amount of garlic oil into to ensure it’s going to be too dry.  

 

IMG_0913.JPG

Heat the pan again with garlic oil left in the pan. After the oil is hot enough, Put chicken and stir fry it ! After chicken had been cooked, I put asparagus first and then mushroom, Try to add some sauces like, Oyster sauce(น้ำมันหอย), Fish sauce(น้ำปลา), Knor(คนอร์ผง), Soya sauce(ซอสแม็กกี้) and Sugar.

IMG_0914.JPG

I poured hot water into it, In my taste I like a lot of water, so I use a bit more water. Taste it again, added more ingredients. 

IMG_0915.JPG

After it had been boiling for a short period, I just added watered tapioca flour to make it a bit thick and tough. Bring it to boil again, put spinach and pour it on top of the noodle.

IMG_0916.JPG

Finally, I’ve got Ba-mee Rard Nah (บะหมี่ราดหน้า) like a picture above. I’m sure, It will make you mouth-watered. 

Return top