ไปที่เนื้อหา


รูปภาพ

Debug


  • กรุณาลงชื่อเข้าใช้เพื่อตอบกระทู้
มี 7 โพสต์ตอบกลับกระทู้นี้

#1 Darkprogramer

Darkprogramer

    จอมยุทธใหม่

  • Members
  • 4 โพสต์

โพสต์เมื่อ 03 May 2007 - 04:51:26 PM

1. Ollydbg สามารถหาข้อความภาษไทยได้ไหมครับ
2. สอน Ollydbg หน่อยครับ คือผมต้องการหาการถอดรหัส ของแพ็คเกตครับ
ประมาณ 08 00 ยกตัวอย่างประมาณนี้ครับ แล้วผมก็หาไม่เจอครับ มีวิธีการไหนหา
ได้บ้างครับ



#2 MasterOishi

MasterOishi

    Exclusive Member

  • Exclusive Programmer
  • 10020 โพสต์

โพสต์เมื่อ 04 May 2007 - 08:43:50 AM

1. Ollydbg สามารถหาข้อความภาษไทยได้ไหมครับ

ตอบ
ไม่ได้นะครับ โปรแกรมนี้ไม่สามารถอ่านภาษาไทยได้ฮะ แต่ผมเองก็ไม่แน่ว่าจะไปแก้ Font มันได้หรือปล่าว

2. สอน Ollydbg หน่อยครับ คือผมต้องการหาการถอดรหัส ของแพ็คเกตครับ
ประมาณ 08 00 ยกตัวอย่างประมาณนี้ครับ แล้วผมก็หาไม่เจอครับ มีวิธีการไหนหา
ได้บ้างครับ

ตอบ
การถอดรหัส Packet แนะนำให้ไปดักเจ้าตัว Winsock API มันครับ พอดักแล้วก็ไล่ๆตามขึ้นไปอ้ะคับ แต่ที่จริงก็แค่ หา Breakpoint สักจุดนึงก็ได้ครับ ที่ช่วงนั้นจะมีการส่ง Packet ก็ให้มัน Break ไว้แล้วเราไปหาที่ Memory ครับ... Search หาตัว Packet ที่ยังเป็น Hex อยุ่เลยหละคับ ถ้าเจอแล้วก็ทำการ Break On Access ตรงช่วงนั้นแล้วก็ ให้มัน Break ไปเรื่อยๆ จนเจอจุดของแำพ็กเก็ต ก็น่านอ่ะคับ ก็จะเจอ Code Assembly

แต่ก็นะ ถ้าเหมือนผมอ่ะ ยังไม่เคยเรียน Assembly เจอ Code ก็อ่านไม่ค่อยได้เหมือนผมกำลังอ่านภาษาสเปนเลย เหอะๆ

***เอ๋า ไม่ได้ดูชื่อ พี่ DarkProgrammer นี่หว่า - -*

#3 Darkprogramer

Darkprogramer

    จอมยุทธใหม่

  • Members
  • 4 โพสต์

โพสต์เมื่อ 04 May 2007 - 02:06:14 PM

5555555555555
ตอบซะยาวโดยไม่อ่าน ถ้าเป็นงูโดนฉกตายแน่ๆ
ยังไม่เข้าใจ เจอกันใน เอ็มจะถามนะ
พี่ก็ยังไม่รู้ แอสซัมบี้หรอก อย่างน้อยได้โค้ดก็ยังดี

ขอคนอื่นตอบบ้างครับ
หลายหัวดีกว่าหัวเดียวครับ

#4 X CroSs

X CroSs

    Truebot Co-Developer

  • Root Administrator
  • 102427 โพสต์
  • Gender:Male

โพสต์เมื่อ 04 May 2007 - 05:29:00 PM

อ้าวหวัดดีท่าน ยินดีตอนรับครับ ^^V

ts.gif

manutd18wm.png


#5 Darkprogramer

Darkprogramer

    จอมยุทธใหม่

  • Members
  • 4 โพสต์

โพสต์เมื่อ 05 May 2007 - 02:00:22 PM

(X CroSs @ May 4 2007, 05:29 PM) ดูโพสต์

อ้าวหวัดดีท่าน ยินดีตอนรับครับ ^^V


ขอสิงที่นี้นะครับ หุหุ
ว่าแต่จะเข้ามาตอบ ที่แท้ก็มาต้อนรับ


#6 AssertionFailed

AssertionFailed

    Exclusive Member

  • Exclusive Programmer
  • 10116 โพสต์

โพสต์เมื่อ 20 June 2007 - 06:52:49 AM

mad.gif mad.gif mad.gif เครียดๆ
ไปเจอเกม 2 เกม แหม ทำยังกะเป็นญาติกัน เล่นใส่รหัสซะแกะยากแกะเย็น
ไฟล์ทุึกไฟล์ใส่รหัสยังไม่พอนะ บีบอีก mad.gif แค่นี้ยังพอแกะได้
แต่ ยังไม่พอ exe มี anti debug อีก เง้อ mad.gif
แกะจากดาตาโดยตรง ก็ไม่รู้เมื่อไหร่จะเดาถูก แต่ดูข้อมูลแล้วน่าจะใช้ deflate compression
แกะจาก exe ก็เสียเวลาพอกัน ไหนจะต้องแก้ anti debug แล้วไปหาโค้ดที่ถอดรหัสดาตา อีก = ="
อย่าถามนะ แล้วไปแกะของเค้าทำมาย
ถ้าไม่ได้แกะอะไรซักอย่างเนี่ย มันรู้สึกชีวิตไร้สีสรรไงไม่รู้ laugh.gif แต่ถ้าแกะไม่ออก ก็นอนไม่หลับอีกแระ tongue.gif
เลยต้องมาลงที่ ts เพราะแกะง่าย สุดๆ ละ

กฏเหล็ก ก่อนการแก้ไขไฟล์ทุกครั้ง ต้องสำรองไฟล์ต้นฉบับเอาไว้ทุกครั้ง

จะเข้าเล่นเกม ก็เจอสองหน้าจอนี้ เบื่อ เลยคิดกำจัด



เลยต้องใช้บริการ ollydbg เพื่อนยาก เปิดมาก็เจอหน้าจอประมาณนี้

เป้าหมายก็คือหาว่า โค้ดส่วนไหน ที่เรียก หน้าจอที่เราต้องการกำจัด
กด f8 ไปเรื่อยๆ พอมาถึงบรรทัดนี้ หน้าจอก็โผล่
00702F17 FF92 D8000000 CALL DWORD PTR DS:[EDX+D8]


หลังจากประมาลผลแล้ว ค่าที่คืนกลับมา จะอยู่ใน eax
ถ้าเราตอบ disagree มันคงจะคืนค่า 7 ดูจากโค้ดถัดมา
00702F1D . 83F8 07 CMP EAX,7 ; ถ้าไม่เท่ากับ 7
00702F20 75 1D JNZ SHORT aLogin.00702F3F ;ไปต่อที่ 00702F3F
00702F22 . A1 AC837000 MOV EAX,DWORD PTR DS:[7083AC] ;ถ้าเราตอบ disagree มันจะมาต่อที่นี่
00702F27 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
00702F29 . E8 7E01D0FF CALL aLogin.004030AC ;ทำอะไรบางอย่าง
00702F2E . A1 60847000 MOV EAX,DWORD PTR DS:[708460]
00702F33 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
00702F35 . E8 9295D4FF CALL aLogin.0044C4CC ;ทำอะไรอีกบางอย่าง
00702F3A . E9 98000000 JMP aLogin.00702FD7 ; แล้ว ก็ไปที่ ปิดโปรแกรม


แน่นอนเราก็ต้อง agree อ่ะดิ
แล้วก็ f8 ต่อไปอีก เพื่อหาโค้ดของหน้าจอที่สอง
00702F3F > A1 AC837000 MOV EAX,DWORD PTR DS:[7083AC] ;เรา agree มันจึงมาโผล่ที่นี่
00702F44 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
00702F46 . E8 6101D0FF CALL aLogin.004030AC
00702F4B . 33C9 XOR ECX,ECX
00702F4D . B2 01 MOV DL,1
00702F4F . A1 70207000 MOV EAX,DWORD PTR DS:[702070]
00702F54 . E8 1B25D4FF CALL aLogin.00445474
00702F59 . 8B15 34817000 MOV EDX,DWORD PTR DS:[708134] ; aLogin.0091D8EC
00702F5F . 8902 MOV DWORD PTR DS:[EDX],EAX
00702F61 . A1 34817000 MOV EAX,DWORD PTR DS:[708134]
00702F66 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
00702F68 . 8B10 MOV EDX,DWORD PTR DS:[EAX]


จนมาถึงที่นี่ หน้าจอที่สอง ก็โผล่
00702F6A FF92 D8000000 CALL DWORD PTR DS:[EDX+D8]

ทั้งๆ ที่มีคำตอบเดียว แต่มันยังเปรียบเทียบค่า เหอๆ
00702F70 . 83F8 07 CMP EAX,7
00702F73 . 75 1A JNZ SHORT aLogin.00702F8F ;ไปยังส่วนต่อไป
00702F75 . A1 34817000 MOV EAX,DWORD PTR DS:[708134] ;รูปแบบเดิมๆ เหมือนข้างบน
00702F7A . 8B00 MOV EAX,DWORD PTR DS:[EAX]
00702F7C . E8 2B01D0FF CALL aLogin.004030AC
00702F81 . A1 60847000 MOV EAX,DWORD PTR DS:[708460]
00702F86 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
00702F88 . E8 3F95D4FF CALL aLogin.0044C4CC
00702F8D . EB 48 JMP SHORT aLogin.00702FD7;ถึงตรงนี้ คือ ไปยังส่วนที่จบโปรแกรม

ตรงนี้ ก็คือ ปาโต้เยา ออกมาวิ่งละ (หน้าจอโหลดเกม)
00702F8F > A1 34817000 MOV EAX,DWORD PTR DS:[708134]
00702F94 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
00702F96 . E8 1101D0FF CALL aLogin.004030AC


คำตอบของเราก็คือ
ทำอย่างไรก็ได้ ให้โปรแกรมมันรันมาถึง ที่ 00702F8F
โดยที่ไม่ให้มันเรียก หน้าจอทั้งสอง ออกมา

แน่นอนคำตอบมีหลายวิธี เช่น ใช้ NOP
ขึ้นอยู่กับความรู้ assembly ยิ่งรู้มาก ก็ย่อมรู้คำตอบที่ดีกว่า และมากกว่า
ด้วยความรู้อันน้อยนิด ผมเลือกใช้ jmp
ดับเบิ้ลคลิกที่บรรทัด(ตรงช่องของ MOV...)
00702F06 8B15 AC837000 MOV EDX,DWORD PTR DS:[7083AC]

จะมี dialog เด้งขึ้นมา พิมพ์ คำสั่งลงไป (เชคถูกตรงช่อง Fill with NOP's ด้วย)
JMP 00702F8F


คลิกขวา เลือก Copy to executable->all modification->copy all
จะมีหน้าจอโผล่มาอีก คลิกขวา เลือก Save file ตั้งชื่อใหม่ แล้วเซฟไว้ที่เดียวกับ aLogin.exe
อาจจะใช้ชื่อ bLogin.exe ก็ได้ biggrin.gif
(อาจจะมีหน้าจอเตือน เพราะใช้คำสั่ง jmp)
แล้วลองรันดู (ดับเบิ้ลคลิกไฟล์ที่เราเพิ่งสร้างไป)
ถ้าโอเค หน้าจอทั้งสอง ก็หายไปตลอดกาล จบ smile.gif


#7 X CroSs

X CroSs

    Truebot Co-Developer

  • Root Administrator
  • 102427 โพสต์
  • Gender:Male

โพสต์เมื่อ 20 June 2007 - 05:43:30 PM

ทำได้ละคร้าบบบ ขอบคุณมักๆเลย ^^ มีข้อสงสัยอยู่นิดนึงตรงที่ว่า

ดับเบิ้ลคลิกที่บรรทัด(ตรงช่องของ MOV...)
00702F06       8B15 AC837000     MOV EDX,DWORD PTR DS:[7083AC]

จะมี dialog เด้งขึ้นมา พิมพ์ คำสั่งลงไป (เชคถูกตรงช่อง Fill with NOP's ด้วย)
JMP 00702F8F


ทำไมถึงเลือกใช้ 00702F06 ล่ะครับ ? ทำไมถึงไม่ใช้ 00702F17 ซึ่งเปนคำสั่งที่แสดงหน้าจอแรกอ่ะคับ ??

ts.gif

manutd18wm.png


#8 AssertionFailed

AssertionFailed

    Exclusive Member

  • Exclusive Programmer
  • 10116 โพสต์

โพสต์เมื่อ 20 June 2007 - 09:01:43 PM

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

กฏเหล็กอีกข้อ แก้ไขต้นฉบับให้น้อยที่สุด

ทำไมผมเลือก 06 แทนที่จะเป็น 17
ก็เพราะตั้งแต่ 06 มันก็แค่เตรียมตัวแปร สำหรับเรียกใช้ฟังก์ชันที่เราต้องการข้าม
ในเมื่อเราไม่ต้องการใช้ฟังก์ชันนั้น ก็ไม่เห็นต้องเตรียมให้เปลืองแรง cpu จริงไหมครับ
00702F17 FF92 D8000000 CALL DWORD PTR DS:[EDX+D8]

จะเห็นว่า มันเรียกใช้ฟังก์ชันโดยอ้างค่าจาก edx
แล้วดูโค้ดก่อนหน้า
00702F01 . E8 6E25D4FF CALL aLogin.00445474 ;ทำอะไรไม่รู้ แต่ค่าที่คืนมาอยู่ใน eax

แล้วเก็บค่าใน eax ไว้(สองบรรทัดนี้อาจมีความสำคัญอยู่)
00702F06 8B15 AC837000 MOV EDX,DWORD PTR DS:[7083AC]
00702F0C . 8902 MOV DWORD PTR DS:[EDX],EAX

แล้วจึงดึงค่ากลับมา เตรียมไว้ที่ edx (สามบรรทัดนี้ไม่มีความสำคัญ)
00702F0E . A1 AC837000 MOV EAX,DWORD PTR DS:[7083AC]
00702F13 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
00702F15 . 8B10 MOV EDX,DWORD PTR DS:[EAX]

สุดท้ายก็เรียกใช้ฟังก์ชัน(เพราะเราไม่ได้เรียกใช้ฟังก์ชันนี้)
00702F17 FF92 D8000000 CALL DWORD PTR DS:[EDX+D8]


กลับมาดูโค้ด น่าจะเริ่มแก้ที่ 0E แฮะ ไม่น่าเริ่มที่ 06 laugh.gif laugh.gif laugh.gif สงสัยเบลอจัด

ใครสงสัยก็อย่าถามเลยครับ เดี๋ยวตอบไม่ได้ laugh.gif laugh.gif laugh.gif
แค่โพสแก้เครียด ไม่นึกว่าจะมีคนหลวมตัวเข้ามาอ่านและลองทำ tongue.gif





2 สมาชิกกำลังอ่านกระทู้นี้

0 สมาชิก, 2 ผู้เยี่ยมชม, 0 ผู้ใช้งานที่ซ่อนตัว