Pages

1/31/2011

MHTML Vulnerability

เพิ่งมีvulnerability ออกมาใหม่เมื่ออาทิตย์ที่แล้ว ที่เป็นที่กล่าวถึงกันมาก
นั่นคือ MHTML vulnerability  จาก Ph4t0m
(อ่านที่นี่ http://www.exploit-db.com/exploits/16071/)
พอมีคนพูดกันมากๆ เรื่องดังๆ ก็ค่อยน่าสนใจจะอ่านหน่อย

เริ่มแรกคือ..  อะไรคือ MHTML?

Wikipediaบอกว่า MHTML ย่อมาจาก MIME HTML (Multipurpose Internet Mail Extensions HTML)
ซึ่งเป็นมาตรฐานที่ออกมานานแล้ว  เสนอตั้งแต่ปี1999  ดังนั้นbrowserหลายๆตัวก็สามารถอ่านไฟล์ประเภทนี้ได้ (นามสกุล .mht)   และที่ใช้หลักๆก็คือในemail  ที่เราจะสามารถเขียนHTMLและแทรกรูปลงไปในemailได้ด้วย

MHTML มันเป็นยังไง?
หลักๆก็คือ ฟอร์แมทแบบ MHTML นี้ เราสามารถใส่ข้อมูลได้หลายประเภท หลายๆข้อมูลลงไปในไฟล์ๆเดียวได้
เช่นรวม html(ในรูป text) เข้ากับ jpg(ในรูป base64) หรือข้อมูลประเภทอื่นๆ  ลงไปในไฟล์ๆเดียวได้
หน้าตามันก็เป็นราวๆนี้
Content-Type: multipart/related;
 type="text/html";
 boundary="_ASEP"

--_ASEP
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: abcde

<HTML>
<BODY>
<IMG src=3D"mhtml:file://C:\Documents and Settings\Anidear\Desktop\abcde.mht!logo"><BR>ABC<BR>DEF
</BODY>
</HTML>

--_ASEP
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Location: logo

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRo
fHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIR
whMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/w
AARCAAQABADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QA
tRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2J
yggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eX
qDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2
uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL
/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvA
VYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dX
Z3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1
dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDG0D4RaDei1bVb3UrSG9z9
mnR4yjEMVKtleDkcf/XGTX/hFoNkLptKvdSu4bLH2md3jCKSwUKuF5OTz/8AWOOl0P4l+AR
4Ug0zWdRmdkDqES1kwm5ycg45PNGufEvwCfCk+maNqMyM4RSj2smH2uDknHB4rm/ecv8AVz
2/9j9vayte3Tltfe++3yv5H//Z

--_ASEP--


โอเค ตรงนี้จะเริ่มอธิบาย format ของ MHTML ละ
มาตัดกันเป็นส่วนๆดีกว่า
Content-Type: multipart/related;    หมายถึงข้อมูลชุดนี้ทั้งหมด(ทั้งไฟล์)ประกอบด้วยข้อมูลหลายๆส่วนนะ
boundary="_ASEP"   หมายถึงว่าข้อมูลแต่ละชุด ใช้คำว่า "ASEP" ในการตัดแบ่งข้อมูล
ดังนั้นข้อมูลชุดแรกเลยจะอยู่ระหว่างเครื่องหมายนี้     "--_ASEP"

พอเรามาดูข้อมูลชุดแรกนี้
จะเห็นว่าเริ่มต้นเราต้องอธิบายก่อนว่า ข้อมูลชุดนี้คืออะไร
ซึ่งนั่นก็คือสองบรรทัดนี้
Content-Type: text/html; charset="utf-8"  ตรงนี้บอกถึงชนิดข้อมูลในส่วนนี้ว่าคืออะไร
Content-Transfer-Encoding: quoted-printable   หมายถึง  ข้อมูลชุดนี้มีการเข้ารหัสแบบไหน ซึ่งคำนี้หมายถึงจะข้อมูลนี้ไม่ได้เข้ารหัสแบะจะถูกนำมาตีความและแสดงผลออกมาทางbrowserได้
Content-Location: abcde      หมายถึง  ข้อมูลชุดนี้มีชื่อว่า abcde  (เอาไว้เรียกใช้ทีหลังได้)

หลังจากบรรยายลักษณะข้อมูลในส่วนนั้นแล้ว
หลังจากนั้นก็คือข้อมูลล่ะ
เนื่องจากข้อมูลส่วนแรก มันเป็นชนิด text/html จึงสามารถอ่านออกได้เลย
แต่ในบางทีเราต้องการแทรกรูปเข้าไป
ก็จะเห็นได้ในข้อมูลส่วนที่สอง  จะมีภาษาที่อ่านไม่ออกนั่น เรียกว่า การเข้ารหัสแบบbase64
ซึ่งข้อมูลที่แท้จริงของรูปนั้น (รู้ว่าเป็นรูปเพราะ Content-Type: image/jpeg) มันเป็นbinary
ไม่สามารถเอามาใส่ไฟล์แบบนี้ได้โดยปกติ  จึงนิยมทำให้เป็นbase64  ซึ่งก็จะทำให้ binary นั้นอยู่ในรูปที่อ่านได้อย่างที่เห็น

ส่วนวิธีเรียกใช้ข้อมูลที่อยู่คนละส่วนกันนั้น  ก็จะเห็นได้จากในข้อมูลส่วนที่เป็น html ตรง img tag
ก็คือจะใช้เป็น

<IMG src=3D"mhtml:file://C:\Documents and Settings\Anidear\Desktop\abcde.mht!logo">

คือใช้ mhtml:  เพื่อบอกว่าข้อมูลที่จะอ้างถึงนี่มันเป็นแบบ mhtml นะ  จะได้ให้ browser คิดถึงเรื่องตัดไฟล์ด้วย
file://C:\Documents and Settings\Anidear\Desktop\abcde.mht  นี่คือpath ของไฟล์ๆนี้
และสุดท้ายที่สำคัญสุดคือ
!logo  นี่คือการอ้างถึง  ข้อมูลรูปของเรา  ที่เขียนกำหนดเอาไว้ว่า  Content-Location: logo

*เนื่องจากบนระบบนี้ การเขียนเครื่องหมายเท่ากับจะโดนมองเป็นตัวอักษรพิเศษ   ดังนั้นจึงต้องใช้ "=3D"  ซึ่งหมายถึง เครื่องหมาย  เท่ากับ "="  ธรรมดา แทน

อีกเทคนิคนึงในการอ้างถึงข้อมูลส่วนต่างๆของMHTML คือการระบุเป็น Content-ID  เช่น
Content-ID: logoimg
ใส่ไว้ที่บริเวณเดียวกันกับส่วนอธิบายข้อมูล
ถ้าใช้วิธีนี้  จะทำให้เราสามารถอ้างถึงข้อมูลจากในไฟล์เดียวกันได้เลยโดยไม่ต้อง ระบุpathยืดยาว
ดังนั้น โค้ดส่วนที่เป็น img ก็จะเป็นแบบนี้แทน
<IMG src=3D"cid:logoimg">
ง่ายขึ้นเยอะ

ว่าจะเริ่ม exploit  แต่ว่าเอาไว้ทีหลังดีกว่า  เริ่มยาวเกินไปละ
แค่นี้ก่อนแล้วกัน

Twit ด้วยเสียง

สืบเนื่องมาจากสถานการณ์ใน Egypt ที่ทางการประกาศเคอร์ฟิว ห้ามให้ใช้ Internet ส่งผลให้ชาวอียิปต์ลำบากเป็นจำนวนมาก
ทาง Twitter ซึ่งร่วมมือกับ Google และ Saynow จึงร่วมกันเปิดให้บริการ twitด้วยเสียงขึ้นสำหรับชาวอียิปต์โดยเฉพาะ

โดยสิ่งที่ต้องทำก็คือ  ใช้โทรศัพท์เพื่อโทรต่างประเทศมายังหมายเลขดังต่อไปนี้ +16504194196 หรือ +390662207294 หรือ +97316199855 เพื่อทำการฝากข้อความ tweet ไว้
โดย tweet ที่ฝากไว้นี้ จะปรากฎอยู่ในช่องของ http://twitter.com/speak2tweet  โดยมี hashtag ว่า #egypt

คลิ๊กที่รูปเพื่อดูรูปใหญ่ได้

และเมื่อกดเข้าไปที่shorten link (ซึ่งเป็นของ bit.ly) ก็จะพาไปสู่หน้าของ SayNow.com เพื่อกดฟังเสียงtweetได้
หน้าตาระบบSayNow

อันนึงที่น่าสนใจคือ


เสียงที่โพสต์ขึ้นมานี้มีทั้งภาษาอียิปต์ และภาษาอังกฤษ (ซึ่งแน่นอนฟังภาษาอียิปต์ไม่ออกอยู่แล้ว)
แต่ได้ฟังแล้วก็คิดถึงสถานการณ์ตอนประกาศเคอร์ฟิว ทำรัฐประหารเหมือนกัน อาการเดียวกันเลย
ในเวลาเดียวกัน ก็สงสารที่เขาถูกตัดการติดต่อสื่อสารไปขนาดนี้  สมัยนั้นเรายังใช้twitter/facebookรับข่าวสารได้

ขอให้โลกนี้สงบสุข

1/28/2011

First ten-thousand viewers!!!

หันมาดูอีกที อ้าวคนอ่านครบ 10,460 คนแล้วเหรอ??? ว้าว
ไม่อยากเชื่อว่าจะมีคนเข้ามาดูได้เยอะขนาดนี้
ปกติblogเล่นๆปีสองปีที่ผ่านมา เขียนบ้างไม่เขียนบ้าง คนดูยังไม่ถึงพันคนเลย
นี่เพิ่มมาหมื่นกว่าคนในเวลาไม่กี่เดือน
I'm very very happy.

ถึงแม้ว่าตอนนี้จะเขียนเป็น Eng บ้าง Thai บ้าง เพราะว่าอยากจะกระจายความคิดเห็น/ความรู้
ให้มันตรงกับกลุ่มเป้าหมายของโพสต์นั้นๆ เช่นอะไรอยากให้คนไทยรู้ก็โพสต์ไทย อะไรมันglobalหน่อยก็โพสต์อังกฤษ(คิดว่าคนไทยคงอ่านได้) แต่ผลออกมาก็อย่างที่เห็นในภาพนี้
คนดูจาก United States กับคนดูจาก Thailand เกือบเท่ากันเลย ไม่น่าเชื่อ
ยิ่งไปกว่านั้น นี่ก็ไม่น่าเชื่ออีกเหมือนกัน เพราะว่าโพสต์ส่วนใหญ่ในนี้เกี่ยวกับ Ubuntu Linux
แต่ว่า ก็ยังมีจำนวนคนดูที่ใช้ Windows เท่าๆกันกับ Linux ด้วยอ่ะ เจ๋ง

Anyway, my top post that has highest number of viewers is....
"http://blog.anidear.com/2010/11/using-firesheep-in-ubuntu-finally.html"
with 3,814 viewers , I've never thought that it'll attract this many people.

I'm glad that you're reading my blog posts no matter you're anywhere in the world, thank you.

Migrating Windows XP from VirtualBox to VMWare

Some one just recommended me to use VMWare instead of Virtualbox, saying that it's faster and VMWare Player is also free as same as Virtualbox. I said I'll check it out.

Since I already installed my Windows XP SP3 and all patches, I don't want to waste my time redo it again. So, I'll find a way to migrate it into VMWare player.

Problem is, VMWare is very proprietary , it doesn't even have any import/conversion tool for other brands to use with it. Comparing to Virtualbox, it supports more of virtual hard drive format - it supports its own format (.vdi) and also VMWare format such as VDMK, VHD.

Well, after awhile, I found a way to convert my WindowsXP.vdi into other format by using VirtualBox itself.
VirtualBox has a tool called "VBoxManage" which I can use to convert its hdd format into VHD fomat (I picked this format because it's common format between both software and it's an open format)
VBoxManage clonehd WindowsXP.vdi WindowsXP.vhd --format vhd

Now, I can create new VM on VMWare and set it to use my WindowsXP.vhd as its hard drive.

Unfortunate me, after I boot I found another problem.
It's Blue Screen of Death (BSOD)!!!

Well I guess it's common for VMWare, huh? because I found many threads talking about this. The BSOD with error code 0x7B. Anyway, I have been trying out several methods and finally, I found a solution.

The problem is, VMWare always set a newly imported hard drive as "SCSI".
In VirtualBox, the hard drive was set as a normal IDE , so I don't have to installed SCSI driver in my Windows XP.
With the situation like this, I found a post here (http://www.biztalkgurus.com/blogs/biztalksyn/archive/2010/08/13/running-vmware-with-vhds-getting-rid-of-the-stop-0x7b-bsod-error.aspx)
saying that editing VMWare config works.
Of course, I tried it out.

I edited my "Windows XP Professional.vmx" by changing the hard disk configuration from
To
(I remove the last line (present=false) as well)

In the end, I restart the VM, and It works flawlessly.

Thai Word List

Thai WordList
และแล้วก็ทำขึ้นมาจนได้ สำหรับ wordlist ที่ใช้คำไทยแล้วเขียนแบบพิมพ์บนแป้นอังกฤษ
เสียเวลาอยู่พักนึงสำหรับการแกะ keyboard symbol ของภาษาอังกฤษและภาษาไทยมาmapเข้าด้วยกัน
แต่ตอนนี้ที่ใช้อยู่ ก็ใช้เป็นแบบ String เอาละ
แล้วใช้ Regular Expression เพื่อทำการ translate ทีละตัวอักษรระหว่างไทย-อังกฤษละ
เพราะแบบนี้ง่ายกว่า

Code
ตัวโค้ดเขียนด้วย Ruby (อีกแล้ว) และเอาขึ้น githubไปแล้ว
ไปดูเพิ่มได้ที่
https://github.com/anidear/thai-word-list

ส่วนตัวคำภาษาไทย
ตอนนี้ที่ทำ มีคำภาษาไทยเป็นชื่อคนอยู่ราว 10,693 คำ (ชื่อ - นามสกุล นับแยกกัน)
อ้อ คำทั้งหมดนี่ไม่ซ้ำกันด้วยนะ เพราะว่าใช้ระบบhashmapจัดเก็บมา ถ้าซ้ำมันทับไปเลย
ใครสนใจลองเอาไปดูเล่นได้
https://github.com/anidear/thai-word-list/tree/master/wordlist


ตอนนี้ก็เหลือว่า
1. จะเอาคำเพิ่มจากไหนดี
ตอนนี้ที่ทำไปแล้วมีแต่ชื่อกับนามสกุลอย่างเดียว (ตรงนี้เอาเพิ่มด้วยก็ได้ ถ้าหาได้นะ)
ส่วนคำศัพท์ประเภทอื่น เช่นชื่อหนัง ชื่อดารา หรือคำนามทั่วๆไป
มีใครมี idea ว่าจะหาคำศัพท์เพิ่มจากไหนก็บอกได้นะ

2. ระบบอ่านคำภาษาไทยเป็นคำอังกฤษยังไม่มี
โชคดีที่ว่าแหล่งที่เอาข้อมูลชื่อมานั่นมันมีคำเขียนเป็นอังกฤษอยู่แล้ว
แต่ว่าถ้าเจอคำทั่วๆไป คงต้องหาระบบอ่านทีละพยางค์มาช่วยละ
ยังไม่มี idea เลย

1/20/2011

W3AF - A Framework To Own The Web

เพิ่งอ่านข่าวมาว่ามี tool ตัวใหม่ออกมา ชื่อ W3AF (Web Application Attack and Audit Framework)
เวอร์ชั่น 1.0-RC5 เพิ่งออก วันที่ 18 มกราคม 2011
เขียนโดย Andrés Riancho ชาวอาร์เจนตินา ผู้เป็นคนก่อตั้งบริษัทBonsai และเป็น director ของweb security ของ Rapid7 ด้วย

ที่น่าสนใจคือ ชื่อที่เขียนมาเนี่ย ดูว่า tool ตัวนี้เทพมาก "A Framework To Own The Web"
เห็นว่ามีระบบตรวจสอบ XSS, SQL injection, มีการใส่ shell แถมยังมีระบบหน้าจอGUIให้ใช้งานได้ง่ายด้วย
และ tool ตัวนี้เขียนด้วยภาษา python เป็นหลัก (น่าแปลกที่เครื่องมืออีกตัวของ Rapid7 ที่ชื่อ Metasploit ดันเขียนด้วย Ruby ???)

น่าสนใจ... แต่เอาไว้ว่างๆก่อนค่อยมาดูอีกที

หน้าหลัก project : http://w3af.sourceforge.net
หน้าวีดีโอเดโม : http://w3af.sourceforge.net/videos/video-demos.php
วีดีโอ แสดงการใช้งาน audit+grep : http://www.youtube.com/watch?v=Biu9jzi-orY
Presentation by Andres Riancho(@OWASP 2008) : http://www.youtube.com/watch?v=xY9xWw9s4T4
PaulDotCom Ep.151 : http://pauldotcom.com/wiki/index.php/Episode151

1/19/2011

Mapping Character Between Thai Keyboard Layout To English Keyboard layout

ต่อจาก โพสต์ที่แล้ว http://blog.anidear.com/2011/01/starting-wordlist-for-thai-language.html

ตอนนี้ก็เริ่มมาหาว่า จะทำยังไงให้ map ระหว่าง keyboard layout ภาษาไทยไปอังกฤษได้ (หรือจากอังกฤษมาไทยได้)
วิธีที่basicสุดๆเลยก็คือ นั่งกด ทีละตัวๆ ระหว่างไทยและอังกฤษ เพื่อทำเป็นตารางขึ้นมา

อืม... ก็ไม่ได้ผิดอะไรนะวิธีนี้ แต่ดูมันถึกเกินไปหน่อย เพราะนอกจากจะต้องไล่กดทีละปุ่มบนkeyboardแล้ว ยังต้องมาไล่อีกรอบนึง เพราะว่าตัวหนังสือก็มีแบบกดshiftค้างไว้ด้วย เหนื่อยแน่ แล้วก็ดูไม่ค่อยมาตรฐานเท่าไหร่เพราะอาจจะมีkeyอะไรลืมกดก็ได้

ก็เลยคิดอีกวิธีขึ้นมา ว่ามันน่าจะมีระบบ keyboard layout อยู่แล้วนะ
ยิ่งใน Linux ทุกอย่างแทบจะเป็นtext file หมด น่าจะเอามาทำอะไรได้
พอค้นไปค้นมา ก็ไปเจอไฟล์หลักๆ มาสามไฟล์
http://cvsweb.xfree86.org/cvsweb/*checkout*/xc/programs/xkbcomp/symbols/th?rev=HEAD&content-type=text/plain
http://cvsweb.xfree86.org/cvsweb/*checkout*/xc/programs/xkbcomp/symbols/us?rev=HEAD&content-type=text/plain
http://cvsweb.xfree86.org/cvsweb/*checkout*/xc/include/keysymdef.h?rev=1.1.1.4

สามไฟล์นี้คือ th layout, en-us layout, symbol โดยทั้งหมดมาจากpackageที่ชื่อ xc ของ XFree86 ทั้งหมด
คราวนี้ก็เริ่มง่ายละ เพราะว่าข้อมูลต่างๆ ก็พร้อมละ
th layout นี่ก็คือปุ่มกดทุกปุ่มบน keyboard ในภาษาไทย
en-us layout ก็คือปุ่มกดทุกปุ่มบน keyboard ภาษาอังกฤษ
ส่วน keysymdef นี่คือการแปลงจากค่าสัญลักษณ์ของปุ่มกดนั้น ให้กลายเป็นตัวอักษร อย่างเช่น XK_Thai_kokai---> 0xda1 (จาก ก.ไก่ --> 0xda1)

คราวนี้ก็จะเห็นว่าข้อมูลในไฟล์มันรกมาก ในสองไฟล์แรก
ก็เลยจัดการทำความสะอาดซักหน่อย (ด้วย find&replace)
เลยได้เป็นไฟล์ประมาณนี้
จะเห็นว่าเป็น 3 columns โดยมีความหมายดังนี้
อันแรก : keyboard code (keycode) คือรหัสสัญญาณที่keyboardส่งไปให้คอมพิวเตอร์รับรู้ว่าเรากดปุ่มอะไร
อันสอง : ตัวอักษร แบบไม่ได้กดshift
อันที่สาม: ตัวอักษร แบบกดshiftควบคู่ไปด้วย

เช่น บรรทัดที่สาม  AE02  slash  Thai_leknung หมายความว่า
ถ้ากดปุ่ม AE02 แล้ว  กดเฉยๆเลยจะได้เป็น  slash (/)
แต่ถ้ากดปุ่ม shift ค้างไว้แล้วกดปุ่ม AE02  จะได้ออกมาเป็น Thai_leknung (๑)

งานที่เหลือก็คือ  อย่างแรก map keycode นี้เข้าด้วยกัน ระหว่าง ภาษาไทยและภาษาอังกฤษ
อย่างที่สองก็คือ ต้องแปลง symbol ทั้งหลายนี้ ให้มันกลายเป็นตัวอักษรปกติ ด้วย

อ้อ ตัวอักษรอย่าง 0xda1 ที่ว่าเป็นก.ไก่เนี่ย ความจริงต้องตัด d ออกก่อน เหลือจริงๆแค่ 0xa1 ถึงจะเป็น ก.ไก่ จริงๆ ในระบบ tis-620    นั่นก็ต้องเปลี่ยนให้เป็น utf-8 เอาไว้ใช้งานอย่างอื่นอีก

ซึ่ง... ถ้าจะทำแบบธรรมดาก็จะเหนื่อยไปอีกแล้ว  เห็นแล้วมันก็เยอะ  เขียนโปรแกรมดีกว่า
แล้วไหนๆ ก็กำลังอยากเรียน Ruby อยู่แล้วด้วย ก็เขียนซะเลย

#!/usr/bin/ruby

require 'iconv'
require 'optparse'


#read keyboard-char map
def readFile(filename)
 mappingtable={}
 f = File.open(filename, "r")
 f.each_line do |line|
  a=line.split 
  mappingtable[a[0]] = [ a[1],a[2] ]
 end
 return mappingtable
end

#read symbol char-keycode map
def readKeyTranslate(filename)
 mappingtable={}
 f = File.open(filename, "r")
 f.each_line do |line|
  if(line=~/^[#]define/)
   a=line.split 
   mappingtable.store(a[1],a[2])
  end
 end
 return mappingtable
end

#convert from hex to tis620 then to utf8
def convHexToChar(hexchar)
 return nil if hexchar.nil? 
 hexchar.gsub!(/0x./,'')
 char=hexchar.to_i(16).chr
 char = Iconv.conv("UTF8","TIS620", char)
 return char
end


#dealing with program's arguments

$verbose, $thfile, $usfile, $keysymfile = false, 'th.txt', 'us.txt', 'keysymdef.h.txt'
options = {}
OptionParser.new do |opts|
 opts.banner="Usage: switchlayout.rb [options]"
 opts.on("-v", "--verbose", "Run verbosely") {|v| $verbose=options[:verbose]=v}
 opts.on("-u","--usfile [US_KB_FILE]",String,"Specify en-us keyboard file (default=us.txt)") {|us| $usfile=options[:us]=us}
 opts.on("-t","--thfile [THAI_KB_FILE]",String,"Specify Thai keyboard file (default=th.txt)") {|th| $thfile=options[:th] = th}
 opts.on("-k","--keysym [keysymdef.h_FILE]",String,"Specify keyboard symbol file (default=keysymdef.h.txt)") {|keysym| $keysymfile=options[:keysym]=keysym}
 opts.on_tail("-h","--help","Show this message") { puts opts ; exit}
end.parse!

puts "Starting process..."
#reading all neccessary files
thMap = readFile($thfile)
puts "Total #{thMap.size} symbols loaded for Thai Mapping" if $verbose

usMap = readFile($usfile)
puts "Total #{usMap.size} symbols loaded for English(us) Mapping" if $verbose

keyCodeMap = readKeyTranslate($keysymfile)
puts "Total #{keyCodeMap.size} symbols loaded for KeyCode Mapping" if $verbose

#translate from thMap's key symbol to keycode
#note: pair[0]=keycode , pair[1]=[char w/o shift, char w/ shift]
thMap.each do |pair|
 print "#{pair[1]} ----> " if $verbose
 k = pair[1];
 k[0] = convHexToChar(keyCodeMap["XK_#{k[0]}"])
 k[1] = convHexToChar(keyCodeMap["XK_#{k[1]}"])
 puts "#{pair[1]}" if $verbose
end

#translate from usMap's key symbol to keycode
#note: pair[0]=keycode , pair[1]=[char w/o shift, char w/ shift]
usMap.each do |pair|
 print "#{pair[1]} ----> " if $verbose
 k = pair[1];
 k[0] = convHexToChar(keyCodeMap["XK_#{k[0]}"])
 k[1] = convHexToChar(keyCodeMap["XK_#{k[1]}"])
 puts "#{pair[1]}" if $verbose
end

#now mapping from enMap & thMap
$usTothMap = {}
usMap.merge(thMap) do |key, usChar, thChar|
 $usTothMap.store(usChar[0],thChar[0])
 $usTothMap.store(usChar[1],thChar[1])
end

$usTothMap.each {|us,th| puts "#{us} ---> #{th}"} if $verbose
puts "Total characters mapped = "+$usTothMap.size.to_s

#write to file
puts "Writing to file ustothmap.txt"
f = File.open('ustothmap.txt', 'w')
$usTothMap.each {|us,th| f.puts "#{us}\t#{th}"}
f.close
อ่านยากแฮะ แบบไม่มีสีเนี่ย

เสียเวลานั่งงมอยู่นานเหมือนกัน  กว่าจะรู้ว่าอะไรเป็นอะไรใน Ruby
และแล้ว ในที่สุด ก็ได้ออกมาเป็นไฟล์ usTothMap.txt
คราวนี้ก็จะได้ map ระหว่าง en-us กับ th ได้แล้ว

ทั้งหมดมีแค่ 94 ตัวอักษรเองแฮะ
บางทีเสียเวลานั่งพิมพ์เองจะง่ายกว่ามั๊ง  55555

Updating Facebook Filter in Firesheep

I got a comment from Schuby in my another thread, saying that Firesheep doesn't capture Facebook cookie anymore, despite all the settings are correct.

With my curiosity, I checked it out by trying to capture my own Facebook cookie using Ethernet card on the same PC.

It doesn't work, really.


This makes me wonder that Facebook may change its protocol for connecting to it.
Therefore I switched to use Wireshark to try capturing the packages.
Here is  what I got:

In Firesheep's original facebook filter, it requires 3 parameters to be able to imitate other facebook users.
The three parameters are c_user , xs , sid.

Unfortunately, as you may have seen in th picture, there's no 'sid' parameter in the request message sent to facebook.
This is strange. I even tried with login request, logout request and requests to other facebook pages. It's still the same, no sign of 'sid' at all.

This confirms me that Facebook changes its authentication method.

Then, what is the new method? What are the parameters required in the process?

I started analyzing by finding what we have now. If looking close to the parameters sent to the facebook page. We can see that 'c_user' and 'xs' are still here.  And these parameters have been used before in the previous scheme. I guess Facebook is still using them. So I keep them.

Next is to find the replacement for 'sid'. (obviously, only 'c_user' and 'xs' alone do not work)
Here are our candidates :
  openid_p , datr , lu , made_write_conn , sct , W

*note that made_write_conn , sct , W contain the same value.

Which one to pick? and how many new parameters required?    :: I don't know
Only way to find out is to trial&error method.
Simply by just try to add each one into the filter and see if it works.

'openid_p' happens to be my first guess. It's because it contains the word 'id' as in 'sid'. If facebook changes something to represent ID in 'sid' , it might contain the letters 'id' in it  (I guess)

Now, How can I change the filter?

A filter in Filesheep is called a "handler". It resides in Firefox's extension folder after you installed it.
If you're using Firefox under your account, the handler folder is in
~/.mozilla/firefox/jjdjiquj.default/extensions/firesheep@codebutler.com/handlers/
but if you're running firefox using "sudo firefox" or under root's account, the folder is in
/root/.mozilla/firefox/jjdjiquj.default/extensions/firesheep@codebutler.com/handlers
Note that "jjdjiquj" is random, it will be different in your system.

In this folder, you'll find many javascript file (*.js) Each of them responsible for each website.
Our goal today is Facebook, so I'll open just "facebook.js"
name=handler name
url = default place to go after imitating
domains = capture anything under this domain
sessionCookieNames = required cookie parameter need to imitate   <--- and this is what we need to capture
identifyUser = function for Firesheep to identify who is the owner of the cookie we just captured.

Since 'sid' is no longer exist, I started to modify it to be 'openid_p'.

Save & run Firefox & Firesheep.

Well, this time Firesheep started and captured my Facebook account from another browser.
But I can't double click on the account to access that account from Firefox.

'openid_p' is wrong.  One down, five more to go.

It seems too many parameters left. I think it'd take too much time to try all out.
Therefore I did another wireshark capture and analyze it again.

When I looked at the response packet after I logged out from Facebook.
I noticed some parameters are deleted, but some are still alive.


Normally after you log out, it should not left any trace that give other people chance to login into your account, right?
From this I can eliminate 'lu', 'made_write_conn', 'W' because they are not deleted after logout.
The parameters like 'c_user' and 'xs' is deleted right away, this is a good behavior of important parameter.
Now I have narrowed down into one parameter left , it's "sct".
(I also notice the parameter called "presence". I think I would use it later if "sct" fails)

Time to test it out. I change inside the file "facebook.js", from "openid_p" to "sct".
Now it looks like this:

I tested it. And Now It's Working!!!




p.s. This is only done on my machine, no wireless involved.
I'll have to test it on an open wireless somewhere on other day.

Peace out.

Update (Apr 9, 2011):
 - I just had a chance to capture my phone (win mobile 6.5) : the filter used only [ 'datr', 'm_user' ] for domain "m.facebook.com"

1/18/2011

A way to import BackTrack4 repository into Ubuntu (only 32bit)

This is only work for the 32 bit version only.
It is because BackTrack does not maintain 64 bit binary packages at all. 
This is just a note for myself,  if I change to use 32bit OS , I'll add BackTrack's repository into it.


1. Adding PGP credential 
wget -q http://archive.offensive-security.com/backtrack.gpg -O- | sudo apt-key add -

2. Add repository into Apt's sources.list (little modification from the original site)
sudo sh -c 'echo "deb http://archive.offensive-security.com nemesis main microverse macroverse restricted universe" >> /etc/apt/sources.list'

3. Update the repositories
sudo apt-get update

Well.. I think it'll work if I use 32bit version.

See you later, backtrack repo....

Update:

I can't get in http://sun.backtrack-linux.org anymore (for some unknown reason)
So, I tried http://archive.backtrack-linux.org and it works!
seems like they changed it to Moon-edition??
new ReadMe.txt also up in different URL  http://moon.backtrack-linux.org/README.txt
the only different is they change "nemesis" --&gt; "pwnsauce"
** nemesis = version 4 RC2
** pwnsauce = version 4
Anyway, when I try to access its folders from the website, it says "Forbidden" ???
I don't know why yet.

1/15/2011

In Attempt to run Armitage on Linux Mint 10

I'm currently using Linux Mint 10. Why? because it is easy to use after install and it's good for using in daily life, which is true.
But when it comes to server part or hacking, I cannot do anything at all.
Maybe because I'm running the desktop edition, so no package for apache, postgresql, mysql or Sun-Java6(which is not server). And to re-install any new OS again would be tremendous work for me right now.

I wanted to play with Armitage from the day I saw it released, but I just had time to play with it today.
Anyhow, to use Armitage, it requires one database(for metasploit), and Sun's Java (Armitage is running on Java JVM). Unfortunately, I couldn't find it in Synaptic. I need to install it myself.
So, I went to Ubuntu package search and did a search for the package that I think I need.

Installing PostgreSQL
There's no postgresql in Mint. Hopefully, I can find it from Ubuntu repository.
I found that all the required packages are in both security & main repository, for that I added them all. (either use synaptic, or add them into /etc/apt/sources.list )
deb http://security.ubuntu.com/ubuntu maverick-security main
deb http://www.gtlib.gatech.edu/pub/ubuntu/ maverick main
update the package list, then installing postgresql with these command
sudo apt-get update
sudo apt-get install postgresql

this packages are come from ubuntu

After this, it's time to configure the postgresql server.

In the installation process, it will create user named "postgres" in the system for me.
This user acts in the postgresql server's admin role. 
Note that the package creates for me (I don't know the password).
So, it'd be a good idea to change password, both on database server and system.
sudo su - postgres -c psql
ALTER USER postgres WITH PASSWORD ‘password’;
\q
sudo passwd -d postgres
sudo passwd postgres

Next, configuration files:
sudo gedit /etc/postgresql/8.2/main/postgresql.conf

#listen_addresses = ‘localhost’
change to
listen_addresses = ‘*’

#password_encryption = on
change to
password_encryption = on

sudo gedit /etc/postgresql/8.2/main/pg_hba.conf
change "indent" to "md5"

sudo service postgresql restart

Now Postgresql should be up and running.

Installing Sun's Java
It's a recommendation from Armitage that we "must" run it on Sun's Java JVM  (using package "sun-java6-jdk, not OpenJDK which was installed before by Mint).
It's very tricky part, since Mint doesn't provide any Sun's JDK package. 
Therefore I need to install a third-party repository, again. (-__-)
sudo add-apt-repository ppa:sun-java-community-team/sun-java6 
sudo apt-get update
This time, it's in PPA, but it's based on Ubuntu version anyway.

REMEMBER to completely remove any OpenJDK out of the system.
It's a good idea to remove EVERY java package first before installing this (including sun-java-jre).

Then, just install this package  "sun-java6-jdk"
sudo apt-get install sun-java6-jdk

To make sure that's correct version running.
Try this command in console.
java -version
It should show like this.
or try
update-java-alternatives -l
It'll show:
java-6-sun 63 /usr/lib/jvm/java-6-sun


Finally, all pre-requisite is done.
It's time to play with Armitage.


First create new user for metasploit in PostgreSQL server.
In this case, I'll use "msf" and "msfpass" as username and password, and I'll give it SuperUser priviledge.
sudo su - postgres
psql
CREATE USER msf WITH SUPERUSER password 'msfpass';
CREATE DATABASE msf3db;
\q
sudo service postgresql restart

Second step, is to run metasploit in RPC mode
make sure that there is no previous connection file in
/opt/metasploit/config   (possible name is database.yml)
to run metasploit in RPC mode, use this command
sudo msfrpcd -f -U msf -P test
** -f means running in foreground
 -U username
 -P password

At this point, we should have PostgreSQL running with username "msf", Java=Sun's Java
and metasploit running and extracted files from Armitage.tar.gz
Then, it's ready to use.

run Armitage using
sudo java -jar armitage.jar

put in the parameters as
Host: 127.0.0.1
Port: 55553
SSL: yes
User: msf
Pass: test
DB driver: postgresql
DB connect string: msf:"msfpass"@localhost:5432/msf3db
click "Connect"

This is after nmap scan.
Every machine shows here. The black screen means OS is unidentified.
It's very cool that Armitage automatically filter down the attack vectors for you after the host is listed.
(using db_autopwn  , "by port" or "by vulnerability")

I'll learn to use it further more, then maybe i'll post another blog post (or VDO)

1/14/2011

Starting Wordlist for Thai Language

เมื่อวานเพิ่งได้โปรแกรมสำหรับทำ bruteforce มาตัวนึง
โปรแกรมนี้ก็ใช้งานง่าย แค่ใส่ username กับ wordlist (ลิสต์ของคำศัพท์ที่น่าจะเป็นpasswordได้)  ลงไป
ไอ้ username เนี่ย..  ถ้าเราจะเจาะเข้าบัญชีคนไหน เราก็ต้องรู้อยู่แล้วสินะ
แต่ไอ้ wordlist เนี่ย..  ค่อนข้างจะคิดหนักว่าจะหาจากไหนดี  ยิ่งเป็นคนไทยด้วยแล้ว  wordlistของต่างประเทศมันจะใช้ได้รึเปล่า?

พอมาลองนั่งคิดดีๆ
password เนี่ย   คือจะประกอบตัวตัวอักษร a-zA-Z0-9และตัวอักษรพิเศษทั้งหลาย
แต่ก็ไม่น่าเชื่อเลยว่า passwordจำเป็นจะต้องเป็นเฉพาะตัวอักษรภาษาอังกฤษด้วย
นั่นทำให้ความน่าจะเป็นของpasswordลดลงเหลือแค่ ASCII  ที่ 256 ตัว
และถ้าไม่นับอักษรที่ไม่ได้อยู่บนkeyboardแล้ว มันก็เหลือแค่ 94 ตัว เอง
ซึ่ง 94 ตัวเนี่ย  ก็มีคนเอามาสร้างเป็น wordlist เยอะแยะแล้ว
อย่างเช่นในเวปนี้  http://packetstormsecurity.org/Crackers/wordlists/
ก็จะเห็นว่ามีหมดทั้ง ชื่อ นามสกุล ชื่อหนัง บลาๆๆ
แต่ปัญหามันคือ มันชื่ออังกฤษอ่ะ  มันจะเวิร์คเหรอกับของคนไทย?

แล้วคราวนี้ต้องลองมาคิดว่า  คนไทยใช้passwordกันยังไงบ้าง
เนื่องจากถูกข้อบังคับทางด้านภาษาที่กล่าวมา  ก็จะทำให้เราใช้ password กันเป็นภาษาไทยไม่ได้

ดังนั้นคนกลุ่มนึง ก็จะตั้ง password ด้วยตัวเลขล้วนๆ
เช่น ตั้งจากเลขที่ตัวเองชอบ เลขที่บ้าน รหัสไปรษณีย์ เบอร์โทรศัพท์ วันเดือนปีเกิดตัวเองไม่ก็ของแฟน เลขจากบัตรอะไรซักอย่าง   เช่น 123  11111 0821234567 111234
อันนี้ก็ไม่น่ายากสำหรับการ bruteforce เพราะว่าการใช้ตัวเลขอย่างเดียว ทำให้ความน่าจะเป็นหายลงไปเยอะ
จาก94ตัวอักษร เหลือเพียง 10 ตัวอักษร (0-9เอง)  อันนี้จะเร็วที่สุดในการแกะpassword

บางกลุ่มก็ยอมผ่อนตามข้อบังคับนั้น เขาให้ใช้แต่ตัวอักษรอังกฤษ ก็เลยใช้passwordอังกฤษตาม
เช่น john, fernando
อันนี้ก็จะสะดวกสบาย เพราะว่าสามารถใช้ wordlist ของต่างประเทศโจมตีได้ตรงๆเลย

ถ้าเป็นคนต่างประเทศ  เขาก็จะนิยมใช้วิธีที่ว่า เราเอาทั้งคำและตัวเลขมาผสมกัน อันนี้ก็จะเพิ่มความยากเข้าไปได้ ยิ่งถ้าใส่เป็นตัวใหญ่ตัวเล็กผสมกันแล้วยิ่งยากไปใหญ่   เช่น 9PeTeR78  HaCkeR99
แต่นั่นก็ไม่ค่อยมีปัญหามาก เพราะตัวbruceforceดีๆ ก็จะมีการพยายามแทนที่ด้านหน้าด้านหลังของคำดัวตัวเลขอยู่แล้ว  และก็มีการลองผสมตัวใหญ่ตัวเลขให้อยู่แล้ว   ขอให้มันมีคำมาให้เถอะ

แต่เคสต่อไปนี้เนี่ย สำหรับคนไทยโดยเฉพาะ
เนื่องมาจากข้อจำกัดตัวอักษรอังกฤษ
คนกลุ่มนี้ก็ยังอยากพิมพ์ไทยอยู่  ก็จะใช้ภาษาคาราโอเกะ  เช่น "น่ารัก" ---> "narak"
ซึ่งอันนี้ก็ยังไม่อยากมากเพราะยังเป็นภาษาอังกฤษล้วน (แต่เราก็ไม่มีwordlistสำหรับคำพวกนี้นะ)

แต่ถ้าเจอว่าพิมพ์ไทยบนแป้นอังกฤษนี่ล่ะ  อันนี้โหดสุด
เพราะนอกจากจะใช้ทั้งตัวใหญ่ตัวเล็ก ตัวเลขแล้ว  ยังอาจจะมีตัวอักษรพิเศษปนมาอยู่ด้วย
เช่นคำว่า  "บล๊อค" ---> "[]U8v8" , "หิวข้าว" ---> "sb;-hk;" , "เฟสบุ๊ค"---> "gals[6U8"
อันนี้แหละที่น่าสนใจเก็บเอาไว้ว่าจะทำยังไง


เอาเป็นว่า ตอนนี้สนใจสองเคสสุดท้ายนี่มากสุด  ว่าจะทำออกมายังไงดี

ถ้าตอนนี้ จะแบ่งเป็น step ง่ายๆ จะเป็น 3 ส่วนดังนี้

1. หาคำศัพท์  จะเอาคำมาจากไหนดี?
2. แปลงเป็นภาษาคาราโอเกะ  จะทำไง มีโปรแกรมอ่านคำไทยรึเปล่า?
3. แปลงคำไทยให้เหมือนพิมพ์บนแป้นอังกฤษ   ทำไง?

ทำให้ได้หมดนี่เราก็จะได้ wordlist ของภาษาไทยเอามาใช้งานละ

Facebook as IP checker?

I just found that if you go to this link

http://www.facebook.com/ajax/v6.php

Facebook will tell your IP address, like this:

/*XXXXXXXXX,XXXXXXXXXX*/

window._ip_version = {"address":"XXX.XXX.XXX.XXX","version":4,"variant":null};
(X = [0-9])

As far as I know, the "address" is your IP address, and the "version" means IPv4.
I don't know what the 2 numbers on the top means either.

1/13/2011

32bit or 64 bit OS for 4GB RAM

เมื่อกีีกำลังนึกๆ อะไรขึ้นมาเรื่องนึง

คือเครื่องที่ใช้อยู่เนี่ย มันมี RAM 4GB,  เราก็เลยใช้ OSแบบ64bit เพราะว่าบางคนบอกว่ามันทำให้เราสามารถใช้ได้ครบ4GB จริงๆ   ไม่เช่นนั้น ถ้าใช้ OS แบบ 32bitแล้ว ก็จะได้แค่ราวๆ 3.2 - 3.5 GB  เท่ากับซื้อ 4GBมาไม่คุ้ม

แต่พอมาลองนึกดูจริงๆ  ถ้าใช้ OS แบบ 64 bit ก็แปลว่าการเรียกถึงaddressต่างๆ ตัวแปรpointerต่างๆ ก็กลายเป็น 64bit หมดน่ะสิ   ซึ่งก็ทำให้จากเดิมที่บน 32bitมีpointerขนาดแค่ 4 bytes  บน64bit ก็จะมีpointerขนาด 8 bytes  เพิ่มขึ้นมาตั้งเท่าตัว?  อย่างงี้มันจะคุ้มมั๊ยที่ ใช้แบบ 64bit แล้วได้RAMเพิ่มขึ้นมาราวๆ 500MB เนี่ย??

เลยมาลองคิดเล่นๆ ว่า :

ถ้าเกิดว่า เราใช้ windows 32bit ที่จะทำให้ได้ memory มากสุดแค่ 3.5 GB  (เอาเป็น 4GB - 512MB ดีกว่า)
4GB - 512MB = 4096 - 512 MB = 3584 MB = 3,758,096,384 bytes
ซึ่งถ้าคิดว่า แต่ละคำสั่ง หรือแต่ละ pointer จะต้องใช้เนื้อที่ในการเก็บ=32bits = 4bytes
ก็จะสามารถเก็บpointerได้ทั้งหมด
3,758,096,384 / 4 = 939,524,096 ตัว

ในขณะที่ ถ้าเราใช้ addressing แบบ 64bit  แล้วก็จะใช้ memory ได้เต็มๆ 4GB ก็จะเท่ากับ
4GB = 4,294,967,296 bytes
แต่คราวนี้ pointerเราแต่ละตัวดันใช้เนื้อที่เพิ่มขึ้น เป็น 64bit = 8bytes
ดังนั้นก็จะเหลือเนื้อที่แค่
4,294,967,296 / 8 = 536,870,912 ตัว

ง่ะ น้อยกว่ากันเกือบครึ่ง

อาจจะต้องมีข้อแย้งว่า..

1. windows 32 bit จริงๆแล้ว ใช้ได้ไม่ถึง 3.5GB หรอก 
เพราะว่า 4Gนี่คือสูงสุดที่memory addressing จะไปได้  แต่พอมีการ์ดจอที่มี memory ซัก 512MB ตรงนี้ก็ต้องโดนตัดไปใช้ แล้วยังมี address ที่ต้องเอาไว้ต่อกับอุปกรณ์ต่างๆอีกต่างหาก   ซึ่งถ้านับกันเฉลี่ยๆ  ต่อให้เอาเหลือซัก 3GB   แต่ถึงอย่างงั้นก็ยังไม่ทำให้ผลลัพธ์เปลี่ยนแฮะ
เพราะ 3GB --> 3,221,225,472 bytes ---> 805,306,368 pointers

2. เราไม่ได้ใช้ทุกจุดใน memory เก็บค่าเฉพาะตัวแปรแบบ pointer ซักหน่อย   ดังนั้นนับเฉพาะ pointer ก็อาจจะไม่ถูกซะทีเดียว
อันนี้ก็ใช่ส่วนนึงเพราะว่าตัวแปรทั้งหมดในระบบ64bitไม่จำเป็นต้องขนาด64bitตลอด(พวกbyte,พวกchar ก็ยังคงต้องมีขนาดแค่1byteอยู่)  แต่หลายๆตัวก็จะถูกเปลี่ยนให้เป็น64bit ด้วยเหมือนกัน เช่น CPU registers, Stack, และคำสั่งต่างๆ ก็จะถูกเก็บและประมวลผลในแบบ64bit  ยกเว้นแต่พวกข้อมูลที่เป็นbinary stream เช่นข้อมูลที่เก็บเป็นก้อนๆ เช่นไฟล์ หรือว่าnetwork data ก็ยังคงเป็นทีละbyteเหมือนเดิมไม่เกี่ยวกัน   ดังนั้นจะบอกว่านับแบบว่าจำนวนpointerทั้งmemoryเลยก็คงจะไม่ถูกซะทีเดียว..   แต่ถึงอย่างนั้นก็ตาม  ถ้าให้แต่ละโปรแกรมเขียนเหมือนกัน อัตราส่วน pointer : data เท่ากัน    ผลลัพธ์ก็ยังไม่เปลี่ยนอยู่ดี

สงสัยว่าต้องย้ายไปใช้ OS แบบ 32bit ซะล่ะมัีงเนี่ย

ปล. รับความคิดเห็นเพิ่มเติมนะครับ  ผมอาจจะผิดก็commentมาได้

update:
เจอบทความดีๆ http://arstechnica.com/cpu/03q1/x86-64/x86-64-1.html
ซึ่งบอกทำนองว่า 64bit ก็ไม่ได้เพิ่มความสามารถทางด้านความเร็วเท่าไหร่ (นอกจากเพิ่มจำนวนregisterขึ้นมา) ถ้าเราไม่ได้ใช้การประมวลผลที่ต้องใช้integerแบบ64bit ก็ไม่ค่อยรู้สึกเท่าไหร่
64bitใช้สำหรับคนมีRAMเยอะๆ หรือคนประมวลผลตัวเลขเยอะๆมากกว่า

1/11/2011

More resources for learning Ruby

Ruby Essentials @ Techotopia.com
http://www.techotopia.com/index.php/Ruby_Essentials

Ruby @ TutorialsPoint.com
http://www.tutorialspoint.com/ruby/ruby_overview.htm

there's also Ruby On Rails @ TutorialsPoint.com
http://www.tutorialspoint.com/ruby-on-rails/rails-installation.htm

Metasploit For Telephony Network

I just know that there's a plugin for Metasploit for exploiting telephony network (another word, "dial up")

Here's the link for the paper (from Blackhat 09)
http://www.blackhat.com/presentations/bh-usa-09/TRAMMELL/BHUSA09-TrammellDruid-MetasploitTele-PAPER.pdf

It includes usage of the commands for telephony.
VOIP is also in the list of its future goals.

1/10/2011

Another Solution to Solve Seagate's Harddisk Keeps popping up in Linux

Some said, the problem is because of inside the Seagate's GoFlex Desk hard drive has some sort of a circuit that keeps sleeping in some period of time (mine is about 10 min, I didn't actually time it)
So, one way is to try using "hdparm" which is unix tool to set some advanced register of the hard drive.
I did, but it did not work.  I started a thread here (http://ubuntuforums.org/showthread.php?p=10107150) to ask for other solutions, but I got no answer.

So, I searched and found this thread in Seagate Forums http://forums.seagate.com/t5/GoFlex-GoFlex-Desk-GoFlex-Pro/Auto-play-pop-up-amp-hard-drive-spins-after-shut-down/td-p/81670
This seems promising, but I also need to download the tool called "Seagate Dashboard Utilities", which is not available for public!!  I don't know why I have to ask the support for the permission first before downloading this.

Then, I had a chat with a Seagate technician via Seagate support site. He said that if you buy it from Costco, they put different software bundle into the hard drive, so that's why I don't have "Seagate Dashboard Util" in my drive. But I still don't get it, even it's different retail, the main Seagate website should allow any customer to download the tools easily...  well, whatever.

update: I just got the reason while I was chatting with one of the technician.
** Note: This software may not be provided to anyone from a restricted country. 
Restricted countries include Cuba, Iran, North Korea, Sudan, and Syria. 
China has restrictions on importing encryption so a separate version of software will be available for China without encryption. 


The tool is only available for Windows OS only. I even have to setup a virtual machine to do this, FOR JUST SOLVING THIS PROBLEM.

Here are screenshots of the tools.

 Start installing

Installing Addition Tools?  No, I ticked all of them off.

Here's the screenshot of the program after installation.

Click at "Drive Settings..." this will pop up

Change power setting to "Never" sleep, ever, ever again.

Hit "Save" and done.

And now the problem is solved!

1/09/2011

Learning A Red Gem Language



ในที่สุดก็ได้เริ่มเรียน Ruby ซะที
หลังจากที่ว่า จะเรียนๆ แล้วก็ขี้เกียจ ไม่อ่าน

พอวันก่อนมาเห็นมีคนเปรียบเทียบยุทธจักรโปรแกรมมิ่ง เป็นยุทธจักรบู้ลิ้มแล้ว (ref: http://www.howforge.com/programming-language-and-martial-art)


ความจริงในใจก็ชอบ Python นะ แต่ชอบเพลงเก้ากระบี่เดียวดายของเล่งฮู้ชงเหลือเกิน
พร้อมกับ motto เด็ด  "เพลงกระบี่ชุดนี้ มีแต่รุก ไม่มีรับ"  เพราะแค่รุกอย่างเดียวคู่ต่อสู้ก็จนตรอก แค่ต้านก็ไม่อยู่แล้ว รุกกลับมาคงไม่ไหว
เลยเริ่มน่าสนใจว่า ไหนลองดู Ruby ซะหน่อยซิ ว่ามันจะมีอะไรดี

มาถึงก็เริ่มต้นอ่านไอ้นี่ก่อนเลย
http://www.ruby-lang.org/en/documentation/quickstart/  Ruby in Twenty Minutes
แค่ชื่อก็น่าสนใจละ   แต่หลักๆจะเป็นแค่ hello world ที่มีการยกระดับเรื่อยจาก พิมพ์แค่ String บน interactive ruby คำว่า "Hello World" ไปจนถึงการสร้างคลาส ที่มี method และการใช้ array

แล้วก็เริ่มถูกใจ  เลยเข้าไปในเวปต่อเพื่อหา tutorial มานั่งดู
เลยเพิ่งรู้ว่า ruby-lang.org เป็นเวปต้นฉบับของ Ruby เองเลย แล้วก็มีtutorial สอนที่ไม่น่าเบื่อเท่าไหร่ด้วย เลยยังพออ่านต่อได้

เลยมาเจออันนี้
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/ To Ruby From Java

อันนี้สำหรับคนที่เป็นJavaมาก่อนแล้วอยากเล่น Ruby ซึ่งก็ตรงกับตัวเองอยู่เลยนั่งอ่าน
อ่านไปๆจนจบ  ไม่ค่อยมีอะไรน่ารู้มากเท่าไหร่นัก

เลยถอยกลับออกมา หน้านึง มาอยู่ที่หน้า
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/  Ruby From Other Languages
อันนี้แหละ รวมฮิตของทุกภาษาอยู่ในหน้าเดียว
เป็นหน้าที่รวม features ต่างๆของ Ruby ไว้ด้วยกันเลย
นั่งอ่านไป ก็เริ่มงงขึ้นๆเรื่อยๆ 555

พอเสร็จ ค่อยๆเริ่มเข้าใจแล้วล่ะว่าทำไม มันถึงเป็นเก้ากระบี่เดียวดาย

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

แล้วพอมาเห็น Ruby แล้ว... ถึงได้เห็นว่า ภาษานี้พลิกแพลงกันสุดๆเลยทีเดียว
นี่แค่อ่านไปได้หน่อยเดียว ยังเริ่มรู้สึกว่า ภาษานี้มันไม่มีกฎระเบียบ ไม่มีรูปแบบอะไรเท่าไหร่เลย
อยากจะพลิกแพลงยังไงก็ได้
เช่น ตัวแปรตัวนึง ไม่มีชนิดของข้อมูล
มันเป็นobjectหมด และเป็นobjectชนิดไหนก็ได้ (no type casting, no type specification)
เรียกใช้ตัวแปรที่ไหนก็ได้ไม่ต้องประกาศ (no type declaration)
หรือว่า  การประกาศคลาสขึ้นมาแล้ว  มาเปิดแก้ไขได้อีกทีหลัง จากจุดไหนก็ได้ของโปรแกรม  โดยไม่มีการ inheritซะด้วย  เล่นแก้originalเลย
พวก operator อย่าง +, -, *, / ก็แก้ได้หมด ว่าจะให้ทำอะไรบ้าง

ยังคงต้องศึกษาต่อ แล้วก็ทดลองแก้โจทย์ปัญหาซะหน่อย จะได้ชื่อว่าได้เรียน ruby ละ

รอให้นี่เสร็จแล้ว จะย้ายไปเรียน Python (ฝ่ามือสยบมังกรสิบแปดท่า) ต่อ

resource เพิ่มเติม (เก็บไว้ก่อน เดี๋ยวอ่านวันหลัง)
http://www.codenone.com/node/118
http://www.rubybox.net/category/lesson

1/08/2011

Modify notification in Ubuntu

First, update+upgrade the patch for allowing customization on notify-osd package.
http://www.webupd8.org/2010/07/patched-notifyosd-updates-option-to.html

Manually customization
http://www.webupd8.org/2010/05/finally-easy-way-to-customize-notify.html

PPA version of "notifyosdconf" editor is also available (but not for Maverick)
http://www.webupd8.org/2010/05/new-notifyosdconfiguration-version-gui.html

So, only option left is to compile it myself
http://www.webupd8.org/2010/05/gui-to-configure-notifyosd-in-ubuntu.html

1/04/2011

Fail: Hotmail

เหมือน hotmail เพิ่งจะโดน hack
ก็เลยมาเปลี่ยน password แล้วก็พยายามจะลบเบอร์มือถือออก
แล้วก็มาเจอเรื่องปัญญาอ่อนกับ hotmail อีก

มาดูรูปกันก่อน

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

ก็ดีนะ พอกดเข้าไปแล้ว 2nd Email ก็หายไป (แต่อันนี้ใส่ของใหม่ลงไปละ)
แล้วก็มือถือ ก็ขึ้นว่า Lost  แปลว่าหาย    ดีมาก
แต่ว่าทำไมเบอร์มันยังอยู่ แล้วมีปุ่มให้ Remove ล่ะเนี่ย

 เอา remove ก็ remove, แต่พอกดเข้าไปแล้ว เจอนี่
แปลว่า กรุณากดปุ่ม send code เพื่อส่งโค้ดพิเศษเข้ามือถือคุณเพื่อยืนยันก่อนจะลบนะครับ
แล้วมือถือผมมันหายไปแล้ว ก็ขึ้นว่า lost ไปแล้ว   จะเอามือถือที่ไหนมารับ SMS คุณล่ะค้าบบบบ!!!!
ติ๊งต๊องจริงๆ

นอกจากนั้นยังเจออะไรอีก  เช่น
คำถามช่วยจำของ hotmail ดันมีให้เลือกแค่ 6 คำถาม  แถมยังตั้งคำถามเองไม่ได้ด้วย
หรือว่าปิดระบบคำถามช่วยจำก็ไม่ได้

หน้าตั้ง password ของ hotmail กับ ระบบ passport ของ live.com ดันคนละหน้ากันอีก
ไม่รู้ว่าpasswordก็คนละตัวกันรึเปล่า  แล้วทำไมต้องทำแบบนั้นก็ไม่รู้  วุ่นวาย

สองรูปล่างนี่ แค่ กดจาก General --> Mail แค่นั้นเองนะ   Layoutก็ต่างกันขนาดนี้  Consistency ไม่มี
แถมยังมีปุ่มให้เปลี่ยน password ทั้งสองหน้าด้วยดิ  อะไรฟะ ตกลงมันคนละpasswordกันเหรอเนี่ยะ  แล้วทำไมคำถามช่วยจำเหมือนกันเลยล่ะ


อันนี้ก็อีกด้วย
นี่ก็อะไรอีกเนี่ย sign-out ออกจาก MSN Account แล้ว  ก็ยังไม่ได้ออกจาก Windows Live อีก อะไรของมันเนี่ย!!!