วันอังคารที่ 5 มกราคม พ.ศ. 2553

Tip & Technic การเขียนบอท Ts Online พาส 5

เล่นง่าย ๆ กับ การจัดการด้วย ตัวหนังสือ


Private Sub Command1_Click()
MsgBox MakeHexID(12345678)
End Sub
Function MakeHexID(tsid)
hexid = Right("0000000" & Hex(tsid), 8)

h1 = Mid(hexid, 1, 2)
h2 = Mid(hexid, 3, 2)
h3 = Mid(hexid, 5, 2)
h4 = Mid(hexid, 7, 2)

MakeHexID = h4 & h3 & h2 & h1
End Function


ผลลัพธ์ ของ MakeHexID(12345678)
คือ 12345678 ปกติ กดด้วย เครื่องคิดเลข ออกมาเป็น BC614E
แต่ ว่าเวลาเราจะใช้ ต้องเอามาทำให้ ครบ 4 byte ก่อน
คือ 00 ->> BC614E = 00BC614E
แล้ว ตัด ๆๆๆ
00
BC
61
4E
จับมาเรียงใหม่
4E 61 BC 00 -->> เป็น ผลลัพธ์ จ้า



หลักการ คือ
1 . เปลี่ยน ตัวเลข ให้เป็น ตัวหนังสือ ฐาน 16 โดย function hex << มีอยู่ใน vb
2 .แปะ 0 ไว้ ข้างหน้า ในกรณี ชุดเลข ฐาน 16 ยาวไม่ ครบ 8 ตัว
3. ตัด ชุด ตัวเลขที่ได้ มา ที่ละ 2 ตัว แล้วเอามาเรียงใหม่ ^^
เล่นกันง่ายๆ แบบนี้แหละ หุ ๆ

ข้อมูลชนิดที่เป็นตัวหนังสือ
เวลามอง จะเห็นว่า ค่ามันจะ เริ่มประมาณ 21 - FF
สังเกตุ ว่ามานจะเรียงติดกัน เพราะ ส่วนใหญเป็น ชื่อ หรือคำพูด
ซึ่ง จะอยู่ติดกัน สัก 3 - 10 bytes หรือ มากกว่านี้
เช่น
ชื่อ ABCD
41 42 43 44
สังเกตดู จะ เห็นว่า มีค่ามากกว่า 21 เรียงติด ๆ กัน

ปกติ ตัวเลขจะใช้ ค่า ตั้งแต่ 00 - FF แต่การเรียงจะ มี ค่า ที่ น้อยกว่า 21 มาแทรก ๆ อยู่ (ไม่จำเป็นเสมอไป)
เช่น เลข 75 แต่ข้อมูลตัวนี้ หมายถึง จำนวนเงิน จะใช้ 4 bytes ค่าที่เห็น 4B 00 00 00
แต่ถ้า 750,000 ค่าที่เห็นจะเป็น B0 71 0B 00 << ติดกะ 0B 00 น้อยกว่า 21
หรือค่าพวก hp หรือ sp จะเป็นข้อมูล 2 byte
สมมุติ ว่า ค่า hp สัก 500 ค่าที่เห็น F401 << จะเห็นว่าอยู่ติดกะ 01 ซึ่ง น้อยกว่า 21
แต่ถ้า เป็ฯตัวหนังสือที่เขียนว่า 500 จะเขียนเป็น 353030

ทำไมต้องน้อยกว่า 21
เพราะ 21 เป็นตัวเริ่มของชุด อักขระในระบบคอมพิวเตอร์ เรียกว่า ascii code เป็น เครื่องหมาย '!'

เนื่องจาก window ใช้ code แบบ ascii ข้อมูลที่ส่งมาให้ window เข้าใจก็ต้อง เป็น ascii ด้วย

แล้วจะรู้ได้ไงว่า ตัวเลขแต่ละตัวใช้กี่ byte
...ดูเอา เอง ^^ ส่วนใหญ่ ค่าน้อย ๆ จะ 1byte เช่น พวก level หรือ ธาตุ
แต่ ค่าที่มากหน่อยก็ 2 bytes
ถ้าค่าเยอะ ๆ อย่าง id หรือ texp ก็ 4 bytes

ว่าด้วยเรื่อง ascii กันหน่อยดีก่า
บางคนอาจสงสัย ว่าทำไม อักษร แต่ละตัวต้อง มีการกำหนดเป็นตัวเลขนั้นตัวเลขนี้
เช่น ascii ของตัว A ทั่ว ๆ ไปจะรู้จักกัน ว่ามีค่า = 65
B = 66 เป็นต้น
? ทำไมต้อง 65 หล่ะ
จริง ๆ แล้ว 65 เป็นเลขฐาน 10 ซึ่ง ถูกเข้าใจได้ง่ายโดย คน
แต่การกำหนดค่า ascii จิง ๆ ถูกกำหนดจากเลขฐาน 16 อย่างมีความหมาย โดยการจัดกลุ่มของ ตัวอักษรไว้เป็นพวก ๆ คือ
กลุ่มเครื่องหมาย + - * / .! เป็นต้น
กลุ่มตัวเลข 01234..... 9
กลุ่มตัวหนังสือ ABC...... Z

ทีนี้การ แยก โดยตัวเลขฐาน 16 เพื่อให้สังเกตุง่ายคือ
ตัวเครื่องหมาย จะขึ้นต้นด้วย 2 เช่น
21= ! , 22=" ,23=# ................ ,29= /
ตัวเลขขึ้นต้นด้วย 3
30= 0 ,31=1 ,32=2 ................ ,39= 9
ตัวหนังสืออังกฤษ ใหญ่ขึ้นด้วย 4
41= A ,42=B ,43=C .................. ถึง Z
ตัวหนังสืออังกฤษ เล็กขึ้นด้วย 6 <<< ทำไมไม่ขึ้นด้วย 5 เพราะถูกใช้ไปกับ เซตของตัวใหญ่แล้ว
61=a ,62=b ,63=c .................. ถึง z

หวังว่าน่าจะเป็นประโยชน์เล็ก ๆน้อย ๆ เพื่อการ ดู เลขฐาน 16 ให้ง่ายขึ้นครับ

Function n2h(number, nb)
For i = 1 To (nb * 2)
zerotem = zerotem & "0"
Next
rn = Right(zerotem & Hex(number), (nb * 2))
out = ""
For i = 1 To Len(rn) Step 2
out = Mid(rn, i, 2) & out
Next
n2h = out
End Function
เอามาฝาก อันนี้เป็น function ที่ผมใช้ในการ สร้าง ตัวเลขฐาน 16 ให้พร้อมส่ง คือ สลับ bytes order ให้

ซึ่งสามารถ ระบุได้ว่า เรากำลังจะ ทำกับ ตัวเลข ที่มีความยาวกี่ byte

เช่น ตัว id จะ เป็น 4 bytes
แต่พอ แปลงเป็น ฐาน 16 แล้ว ยังเอาไปใช้ ส่งข้อมูลไม่ได้
ต้องกลับ byte order ก่อน
เช่น 123456 = 1E240 เรา ต้องทำให้เป็น 40 E2 01 00
5000 = 1388 ====> 88 13
จะได้เป็น

tsid = 123456
tsid = n2h(tsid ,4)
ผลลัพธ์ จะได้ 40 E2 01 00

x = 5000
x = n2h( x , 2)
ผลลัพธ์ จะได้ 88 13
แต่ถ้า บอกว่า 4 byte
x = 5000
x = n2h( x , 4)
ผลลัพธ์ จะได้ 88 13 00 00

เคดิต http://www.paradizex.com/forum/index.php?s=&showtopic=154&view=findpost&p=981

Tip & Technic การเขียนบอท Ts Online พาส 4

F444 31 00
_ _ _ _ 03
_ _ _ _ XX XX XX XX << ID
_ _ _ _ 01 00 00 01 32
_ _ _ _ 6A 01 ---- x
_ _ _ _ 3F 07 ---- y
_ _ _ _ 00 01 00 8F EA 76 1A 3E AE 7D 1A 05 F6 4E 38 4D C3 36 DE 52 3C 5A 00 00 00 00 0B 00
_ _ _ _ XX XX XX XX XX XX XX << ชื่อ

ค่าไหนที่เราสนใจ ก็เอา เครื่องคิดเลขใน window มากด
เช่น ค่า max hp ของผมเป็น 382 กดดู ฐาน 16 จะได้ 17E ก็ เอา มาแยก เป็น 01 7E แล้ว สลับ เป็น 7E 01 แล้วไปหา ใน packet เป็นต้น

ค่าไหน เรา แกะได้ ก็ ตัดเอาค่านั้นมาใช้
ค่าไหนไม่รู้ก็ช่างมาน เด๋ว พอรู้ค่อยเอามาใช้


นึกบทเรียนไม่ออกแล้วจ้า
ตอนนี้ก็พอทำกันได้แล้ว รับส่งข้อมูลได้ เกือบได้แล้วหล่ะ

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

การจะบอกว่า
packet อะไร เป็ฯแบบไหน ง่ายคับ แต่ผมไม่บอก อ่ะ บอกไปก็ไม่ได้คิด จิงป่ะ แล้วก็จะไม่ได้ฝึก พอต้องการ packet อื่น ๆ ก็ จะถาม ๆ อีก ก่อนจะถาม เราต้อง หาเองก่อน จนกว่าจะหมดหนทาง

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

ตามหลัก การ สื่อสาร ข้อมูลชนิด ตัวเลข ที่มีขนาดมากกว่า 1 bytes จะถูก สลับ จำไม่ได้ว่าเรียกว่าอะไร คุ้น ๆ ว่า อะไรอินเดียน ๆ ลืมไปละ ช่างมัน เอาเป็นว่า ถ้ามากกว่า 1 byte ก็ ค่าที่ได้ จาก packet จะต้องเอามาสลับ byte order ก่อน
เช่น 01 7E = 382
แต่ ตาม byte order จะเป็น 7E 01 หมายถึง ค่า 382
ถ้าขนาดมาก ๆ ที่เป็น 4 bytes
เช่น
00 01 E2 40 = 123456
ตาม byte order จะเป็น 40 E2 01 00 = 123456

การสลับbyte (byte order) จะใช้กับข้อมูลพวกตัวเลข ที่มีขนาด 2 หรือ 4 bytes นะค่ะ ทำไมต้องทำ อันนี้เป็น
ธรรมชาติของ intel cpu ถ้า เป็น sparc ไม่ต้องสลับ

example
data = AA BB CC DD EE FF
ถ้าคิดว่า ข้อมูลเป็นตัวเลข มีขนาด 2 byte อยู่ที่ CC เป็นต้นไป

ค่าที่ได้ คือ [CC DD] -> [DD CC] เอา DD CC ไปแปลงเป็น ฐานสิบซะ
ถ้าคิดว่า ข้อมูลเป็นตัวเลข มีขนาด 4 byte อยู่ที่ CC เป็นต้นไป

ค่าที่ได้ คือ [CC DD EE FF] -> [FF EE DD CC] เอา FF EE DD CC
ไปแปลงเป็น ฐานสิบซะ

เคดิต http://www.paradizex.com/forum/index.php?s=&showtopic=154&view=findpost&p=980

Tip & Technic การเขียนบอท Ts Online พาส 3

เรียนรู้เรื่อง ตัวเลข

ตัวเลข ใน คอม ที่ นิยมใช้ และที่ มักจะต้องรู้เพื่อเอามาใช้ ประกอบด้วย เลขฐาน 2 ฐาน 8 ฐาน 10 และ ฐาน 16

ฐาน 2 คือ มีตัวเลขอยู่ 2 ตัว แต่สามารถ นิยาม ตัวเลข ที่มีค่าอื่น ๆ ได้
ตัวเลข ใน ฐาน 2 คือ
1 และ 0
เช่น
เลข 1 ที่ พวกเราเข้าใจ มีค่า เป็น 0000 0001 <<< 1 byte
เลข 2 ที่ พวกเราเข้าใจ มีค่า เป็น 0000 0010 <<< 1 byte
เลข 3 ที่ พวกเราเข้าใจ มีค่า เป็น 0000 0011 <<< 1 byte
เลข 4 ที่ พวกเราเข้าใจ มีค่า เป็น 0000 0100 <<< 1 byte
....
เลข 255 ที่ พวกเราเข้าใจ มีค่า เป็น 1111 1111 <<< 1 byte
ไปเรื่อย ๆ ใน 1 byte จะนิยาม ตัวเลขได้ถึง 256 ค่า คือ 0 - 255

จบ เรียนรู้เรื่องตัวเลข บทที่ 1 ^^

คำแนะนำในการ ศึกษา code หรือ โปรแกรม ใด ๆ ที่ มี code มาให้

1. อย่า ดูแค่ ชื่อ function แล้วเดาว่า function นี้ ทำอะไร แต่ จงมองเข้าไปข้างใน function ว่า ข้างใน function ทำอะไร
2. การมองโปรแกรม หรือ code คนอื่น จำไว้ว่า คนอื่น แน่นอน จะมีวิธีการ ที่แตกต่างกัน หรืออาจเหมือนกัน แต่ที่แน่ ๆ ไม่ว่า วิธีการจะเป็น อย่างไร และผลลัพธ์ จะเป็นอย่างไร สิ่งที่เราควรทำคือ หาว่า คนเขียน code นั้น คิดอย่างไร และ มีวิธีการอย่างไร
3 .อย่าคิดว่า วิธีการที่มี หรือ ที่เห็น จาก code ของคนอื่นเป็ฯวิธีที่ถูกต้อง หรือ เป็นวิธีที่ดี อยู่แล้ว เพราะทำงานได้ แล้ว แต่ ให้คิดว่า ถ้าเป็นเรา ทำ เราจะทำอย่างไร ให้ดีกว่า หรือ ถูกต้องกว่า หรือ ประหยัดกว่า และ สะดวกกว่า
4 .สิ่งใด ๆ ก็ตามที่ คุณกำลังเรียนรู้ ไม่ว่าคุณจะรู้อยู่แล้ว หรือ ยังไม่รู้ จงหาข้อมูล เปรียบเทียบ และ ตอกย้ำว่า สิ่งที่คุณคิดว่ารู้ และ ถูกต้อง นั้นเป็นความจิง หรือ คำว่า รู้จิงในสิ่งที่คิดว่าตัวเองรู้
5 . อย่าปล่อยให้เวลาในการเรียนรู้หมดไปกับการรอคำตอบ จากใคร แต่จงเอาเวลา เหล่านั้น ค้นหาคำตอบ

ปล . ขออภัยหากใครจะคิดว่าผมบังอาจ สอน ความจิง ผมเองก็รู้สึกว่า นี่กรู มานั่ง สอน ทำไมหว่า แต่ ความตั้งใจแรก คืออยากแนะนำ ในสิ่งที่ตัวเองรู้ ให้คนอื่น ได้รู้ เหมือนกันนะคับ ^^


อิ่มแย้วววว มาว่า บทที่ 2 กันต่อ

ตอนนี้ถือว่า รู้จัก เลข ฐาน 2 กันไปแล้ว

ฐาน ที่ จำเป็น อีก ฐาน คือ ฐาน 8 แต่ไม่ค่อยได้ใช้ แต่ควรรู้ไว้

หลักกการ เหมือนเดิม คือ
เซต ของตัวเลข ตั้งแต่ 0 - 7 ( จะเห็น ว่า มี 8 ตัว ) แต่ สามารถ นำไปนิยาม ตัวเลข อื่น ๆ ได้

0 = 000
1 = 001
2= 002
3=003
4=004
5= 005
6=006
7=007
8=010
9=011
10=012
11=013
.....จนถึง 777
จะพบ บ่อย ๆ กับเรื่อง ของ สิทธิการใช้งาน file บน ระบบ unix
ไม่ค่อยเจอบน windows เท่าไหร่

ต่อไปที่พบมากที่สุด คือ ฐาน 16
ประกอบด้วย
0 1 2 3 4 5 6 7 8 9 A B C D E F
ทั้งหมด 16 ตัว โดย ตั้งแต่ A - F จะแทน จำนวน 10 - 15

1 = 01
2 = 02
3 = 03
...
9=09
10 =0A
11=0B
12=0C
...
15= 0F
======================
ความ สัมพันธ์ โดยตรงกับเลขฐาน 2
คือ เมื่อ เรา นำ เลข ฐาน 2 กะ ฐาน 16 มาเปรียบเทียบกัน
มันจะ ตรงกัน เช่น

0(2)__= 0000 0000
0(16)_= ___0___0

1(2)__= 0000 0001
1(16)_= ___0___1
...

10(2)__= 0000 1010
10(16)_= ___0__ A

15(2)__= 0000 1111
15(16)_= ___0__ F

16(2)__= 0001 0000
16(16)_= ___1__ 0

ดังนั้น เมื่อเห็นเลข ฐาน 16 เช่น 0x78 เอามาเขียน เป็น ฐาน 2
จะได้
___7 ___8
0111 1000
คือพูดง่าย ๆ เมือเห็น เลข ฐาน 16 เราจะเอามาเขียน เป็นฐาน 2 ได้ทันที
แต่การจะเอา มาทำเป็น ฐาน 10 ต้องคิดก่อน ^^

สิ่ง ที่ต้อง ฝึกให้ค่อง คือ ระหว่าง 0 - 15 ต้องเขียน ในรูป เลข ฐาน 2 และ ฐาน 16 ให้คล่อง จากนั้น ค่อย มาดูความ สัมพัน กะเลขฐาน 10 ต่อไป
.. จบ แบบ งง ๆ ว่า กำลังพูดเรื่องไรหว่า

เคดิต http://www.paradizex.com/forum/index.php?s=&showtopic=154&view=findpost&p=976

Tip & Technic การเขียนบอท Ts Online พาส 2

ต่อเลยๆ อย่าให้เสียเวลา


ตัวอย่าง VB ในการ decode packet

Function decodePacket(value)
___Dim mask As Byte
___mask = &HAD
___decodePacket = value Xor mask
End Function


ตัวอย่างการ Connect ไปยังเกมส์ server
Private Sub cmdLogin_Click()
___If cmdLogin.Caption = "Login" Then
______Winsock1.Connect "203.144.137.9", 6414
______cmdLogin.Caption = "Logout"
___Else
______If Winsock1.State = 0 Then
_________Winsock1.Close
_________cmdLogin.Caption = "Login"
______End If
___End If
End Sub


เมื่อ connect สำเร็จ

Private Sub Winsock1_Connect()

___If Winsock1.State = sckConnected Then
______pLoginPrompt = MakePacket("F4 44 01 00 00")
______Winsock1.SendData pLoginPrompt
___End If
End Sub


Public Function a2hex(alpha, length)
___hextemplate = "0123456789ABCDEF"
___alpha = Right("00000000" & UCase(alpha), length)
___If Len(alpha) = 2 Then
______ahindex = InStr(1, hextemplate, Left(alpha, 1)) - 1
______alindex = InStr(1, hextemplate, Right(alpha, 1)) - 1
______a2hex = (ahindex * (16 ^ 1)) + (alindex * (16 ^ 0))
___ElseIf Len(alpha) = 4 Then
______lb = Left(alpha, 2)
______hb = Right(alpha, 2)
______hx = a2hex(hb, 2) * (16 ^ 2) + a2hex(lb, 2)
______a2hex = hx
___ElseIf Len(alpha) = 8 Then
______aH = a2hex(Right(alpha, 4), 4)
______aL = a2hex(Left(alpha, 4), 4)
______a2hex = (aH * (16 ^ 4)) + aL
___End If
End Function

Public Function MakePacket(ByVal strPacket As String) As Byte()
___Dim i As Long
___Dim Hstr As String
___Hstr = Replace(strPacket, " ", "")
___Dim pHex() As Byte
___ReDim Preserve pHex((Len(Hstr) / 2 - 1))
___For i = 0 To Len(Hstr) / 2 - 1
______pHex(i) = decodePacket(a2hex(Mid(Hstr, (i * 2) + 1, 2), 2))
___Next
___Size = CInt(Len(strPacket) / 2)
___MakePacket = pHex
End Function


Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
___Dim din() As Byte
___Winsock1.GetData din, , bytesTotal

___For i = 0 To bytesTotal - 1
______h = decodePacket(din(i))
______hx = Hex(h)
______strBuffer = strBuffer & IIf(h < 16, "0" & hx, hx)
___Next

End Sub


ถ้าทำ ข้างบนถูกต้อง

จะมี ข้อความตอบ กลับมาจาก server
คือ ค่า strBuffer ในที่นี้เป็นตัวแปรประเภท ข้อความ ซึ่ง จะเป็น ตัวเลข ฐาน 16 ที่ถูกถอดรหัสแล้ว จากนั้น ก็
เอาไป เล่นกันต่อเองนะครับ อิอิ ^^


บอก ไม่ถูกหรอกคับ ว่า ข้อมูลอะไรอยู่ตรงไหน เพราะ เราจะจับ จาก header อย่างเดียว ไม่ได้สนใจ ตำแหน่งข้อมูลเลยซักกะติ๊ด เมื่อ เจอ header ถึง มาดู ว่า ข้อมูล ที่ต่อท้ายมานคืออะไร มีความหมายอย่างไร

จับ packet มาให้ได้ก่อน แล้ว แยกออกมาดู
หลังจากดูแล้ว จะเกิดอาการ งง และ โคตร งง
เหอๆ ๆ

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

แล้ว มองหา จุด ที่มี ความ สัมพันธ์ กัน หรือ จุด ที่ มีเอกลัษ แล้ว ตัด ข้อมูล มา เรียง ๆ ๆ ๆ
แล้ว มอง ๆ ๆ มอง ไป ก็ คำนวน เลข ฐาน 16 ไปด้วย
ผม อาจจะได้เปรียบหน่อย เพราะผม มอง เลข ฐาน 16 ให้เป็น ฐาน 10 ได้เลย ถ้า ค่าไม่ มากจนเกินไป เลยทำให้สังเกตุอะไรได้ง่าย ซึ่ง ถ้า คุณมองเห็น ตัวเลข ที่มีความหมาย ที่เรา หาอยู่วางเรียง ๆ ๆกัน อยู่ ก็ focus เข้าไป แล้ว นั่งแกะ ข้อมูลชุด นั้น ๆ ดู คุณจะได้ คำตอบเองว่า
ข้อมูลที่คุณหาอยู่ตรงไหน ตรงไหน บอกเลเวล ตรงไหน บอก เงิน ตรงไหนบอก texp เป็นต้น

เคดิต http://www.paradizex.com/forum/index.php?s=&showtopic=154&view=findpost&p=975

Tip & Technic การเขียนบอท Ts Online พาส 1

ผมลองศึกษาจากของพี่... TRUETSBOT ดูน่ะครับ ...
เพื่อช่วยกันพัฒนา....ร่วมกัน อย่างยั่งยืน
ผมเองก็เปงคนนึงที่ อยากให้ Open Source เพราะอยากศึกษา อิอิ แต่ มานก็แล้วแต่เจ้าตัว เค้าว่าจะเปิดหรือไม่
โดยส่วนตัวผมเห็นใจคนที่ชอบในการเขียนโปรแกรม และอยากทำแต่ไม่รู้จะเริ่มยังไง
ผมเองก็เคยเป็นแบบนั้น ผมว่าเรามาเริ่มเรียนรู้ด้วยกันดีมั้ย ครับ คุณ tsbot คงไม่ว่าอะไรถ้าผมจะ
ขออธิบาย และ ให้ Code Bot บางส่วน ของผม (ข้อมูลบางส่วนได้มาจาก มาจาก บอทของคุณ tsbot แต่ผมเอามาทำ ใหม่หมด )
version เสร็จยังไม่มี เพราะไม่ได้เขียนจิงจัง แต่ถ้าจะพอเอามาเป็น idea ให้กับ เพื่อน ๆ ที่รักการเขียนโปรแกรม และอยากสนุก ผมว่าก็ น่าจะเพียงพอ

เริ่ม Chapter 1 เลยละกัน
Chapter 1 : ถ้าอยากเริ่ม พัฒนาบอท คุณต้องรู้อะไรบ้าง
ก่อน อื่น ทำความเข้าใจกันแบบ คร่าว ๆ ก่อน เริ่มด้วย วิชาการ เข้าใจรูปแบบ การ รับส่งข้อมูล ระหว่าง ตัวเกมส์ server กับ ตัวโปรแกรมเกมส์ client หรือ bot
ผมสรุป สั้น ๆ ง่าย ๆ ว่า คุณต้องมีความรู้ เรื่องของ socket programing ก่อน ถ้ายัง ก็ หาความรู้เรื่องนี้ให้พอทำได้ก่อน อิอิ
ภาษา ที่เหมาะ ในการศึกษา คือ VB เพราะ เขียน ง่ายมาก ๆ สำหรับ มือใหม่ นะครับ ระบุ เรื่องที่ต้อง เรียนรู้ คือ winsock บน vb 6.0 ถ้าใครรู้ตรงนี้แล้ว ก็ เริ่ม บทถัดไปได้
อธิบาย charter 1 ต่อ ^^
มาเริ่ม กันด้วย VB + Socket นะคร้าบ
ใคร มะมี VB ไปหา มาก่อนนะ
ขอ ข้าม เนื้อหาส่วนนี้ เลยละกัน ดูท่า จะอธิบาย ยาว แน่ ๆ กว่าจะเข้าเรื่อง บอทได้ - -" สรุปไปหา หนังสืออ่านหรือหาความรู้ เรื่องการเขียน vb กะ socket กันเองน้า
เขียน ตัวควบคุมการรับส่ง packet ด้วย winsock โดย ดูว่า ใน สถานะการณ์ ต่าง ๆ กัน จะต้องรับ package อะไร เพื่อส่ง packet อะไร โดย ค่อย ๆ เลียนแบบ การรับส่งจาก ตัว alogin
ทีนี้ ปัญหา มันจะเกิดขึ้น เมื่อ ลอง ดัก packet มาดูแล้ว
งง - -? package อะไรเป็นอะไรกันแน่ งง เริ่มไงดี ว้า
มารู้จัก packet ts กัน
เพื่อน ๆ หลายคนคงเคย ใช้ WPE ดัก packet จาก alogin ช่ายป่ะ แต่ ดูไม่รู้เรื่อง แต่ที่เห็น ๆ คือ 5E 59 ขึ้นต้นเสมอ
packet ts โดย ปกติ จะประกอบด้วย
HEADER + DATASIZE + DATA

ซึ่ง ถูกเข้ารหัส แบบง่าย ๆ ด้วย การ XOR กับ MASKBYTE
MASKBYTE = ค่า 1 ค่า ที่เอา ไป ทำการ XOR กับ ข้อมูลทุก BYTE ของ PACKAGE ก่อน ส่ง ข้อมูล ไปยัง SERVER
และ เมื่อ SERVER ส่งข้อมูลมา จะถูก MASK มา ด้วยเหมือนกัน ทำให้ ข้อมูลที่เราเห็น จากการ ดักด้วย WPE ไม่ใช่ ข้อมูล ที่มีความหมาย ที่เอามาใช้งานได้เลย
แต่ต้องเอามา ถอด ด้วย MASKBYTE ก่อน จึงจะมองเห็น ตัวข้อมูลจิง ๆ ซึ่ง จะถูกนำไปใช้งาน ต่อไปได้

ต่อ Charter 2 จะรีบกลับไปโหลด patch ใหม่ อิอิ
เจาะลึก แบบไม่ลึกกับ TS packet FOTMAT
HEADER = ?
DATASIZE = ?
DATA = ?

HEADER คือ ส่วนหัวของทุก ๆ package ที่เป็น package ควบคุม มีขนาด 2 BYTES เช่น 59 E9 <<< เหงป่ะ มี 2 ตัว ตัวละ byte ก็ 2 bytes พอดี อิอิ ส่วน ความหมาย และเหตุผลว่าทำไมต้องเป็น ค่านี้ คำตอบ คือ ไม่รู้ เหอๆ ๆ รู้แต่ ว่า เมื่อ อ่าน packet เจอ 2 ตัวนี้ มันก็ มักจะเป็น หัว packet เสมอ

DATASIZE คือ ตัวเลข ที่บอก ความยาวของ ข้อมูลใน packet เพื่อ ที่จะได้รู้ ว่า จะต้อง เก็บข้อมูลจาก packet นั้น ๆ ก็ bytes ส่วน ขนาด ก็ 2 BYTES

DATA คือ ข้อมูลที่ต่อท้ายเข้ามายัง packet เพื่อใช้ เป็น ข่าวสาร แลกเปลี่ยน ระหว่าง SERVER กะ ตัว เกมส์ CLIENT
ขนาด ขึ้นอยู่กับ ค่า DATASIZE ว่าระบุ ความยาวไว้กี่ BYTES
ตัวอย่าง packet
59 E9 AB AD A2 A9 F0 EB AD AD

[59 E9] [AB AD] [A2 A9 F0 EB AD AD]
หลัง ถอด ด้วย MASKBYTE
[F4 44] [06 00] [0F 04 5D 46 00 00]

อ่า เหงยัง ง่ายมาก อิอิ หัว packet คือ (F4 44)
ข้อมูลยาว 06 00 = (6 bytes)
ข้อมูลคือ (0F 04 5D 46 00 00)


จากข้อมูลข้างต้น ข้างบน เพียงพอที่คุณหลาย ๆ คน จะนำไปเป็น คำตอบว่า เริ่ม ตรงไหน เริ่มยังไง ได้

เพราะ ผมเอง ก็เริ่มจากปัญหาตรงนี้ และคิดว่า คุณ TSBOT เอง ก็ คงเริ่ม จาก ตรงนี้แหละ คือ เมื่อรู้จัก รูปแบบ ของ packet แล้ว ค่อยมาศึกษา ว่า แต่ละ packet ใช้ ควบคุมอะไร และ รวบรวม มาเป็นโปรแกรม

ปล. ลอง ดัก packet มา นั่ง ดู และ ลองหา วิธี ถอด กันให้ได้ นะครับ

ช่วยเสริมคุณ TRUETSBOT นะครับ จากข้อความ
[59 E9] [AB AD] [A2 A9 F0 EB AD AD]
หลัง ถอด ด้วย MASKBYTE
[F4 44] [06 00] [0F 04 5D 46 00 00]
แสดงว่า เราจะรู้ค่าของ MASKBYTE คือ AD ครับ
หลังจากเจอ ค่า [59 E9] ก็ให้อ่านต่ออีก 2 ไบท์ แล้ว มาสค์ด้วย AD เพื่อให้ได้ความยาวเพื่อจะดึงข้อมูลต่อ

ถูกต้องน้าคร้าบบบบบบ MASKBYTE คือ AD

AD คือ เลข ฐาน 16
เมื่อเรานำ แต่ละ BYTE มา Xor กับ 0xAD จะได้เป็น packet ที่สมบูรณ์ พร้อมใช้งานต่อไป

เคดิต http://www.paradizex.com/forum/index.php?s=&showtopic=154&view=findpost&p=974