banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thủ thuật reverse engineering RE challenges  XML
  [Question]   RE challenges 27/06/2008 17:23:05 (+0700) | #1 | 138323
Reversing...
Member

[Minus]    0    [Plus]
Joined: 31/12/2007 06:28:04
Messages: 117
Location: -1.-1.-1.-1
Offline
[Profile] [PM] [Yahoo!]
Tui có vài bài về RE gọi là giải trí, anh em có hứng giải chơi.

Target:
Code:
http://rapidshare.com/files/125190622/coolhacker.rar.html


Trong này có chứa file .com , khi chạy sẽ in ra 3 dòng chữ "Cool Hacker".
Thử thách là: chỉ sửa 1 byte trong binary code để khi chạy thu được 5 dòng "Cool Hacker".

ps: Anh em cho lời giải có càng nhiều lời giải + phân tích càng tốt. Coi như là học tập kinh nghiệm.
[Up] [Print Copy]
  [Question]   Re: RE challenges 27/06/2008 21:47:20 (+0700) | #2 | 138339
[Avatar]
4hfoo
Elite Member

[Minus]    0    [Plus]
Joined: 29/01/2007 01:50:20
Messages: 115
Offline
[Profile] [PM]
Bạn có thể up lại file lên trang khác không?
Trang rapidshare down oải lắm ....
[Up] [Print Copy]
  [Question]   Re: RE challenges 27/06/2008 23:44:41 (+0700) | #3 | 138369
doixanh
Member

[Minus]    0    [Plus]
Joined: 24/12/2004 14:04:16
Messages: 1
Offline
[Profile] [PM]
password please?
[Up] [Print Copy]
  [Question]   Re: RE challenges 28/06/2008 02:58:48 (+0700) | #4 | 138426
Reversing...
Member

[Minus]    0    [Plus]
Joined: 31/12/2007 06:28:04
Messages: 117
Location: -1.-1.-1.-1
Offline
[Profile] [PM] [Yahoo!]
hì, sorry các bạn.
pass là : netbks.com.
[Up] [Print Copy]
  [Question]   Re: RE challenges 28/06/2008 04:34:53 (+0700) | #5 | 138452
mfeng
Researcher

Joined: 29/10/2004 15:16:29
Messages: 243
Offline
[Profile] [PM]
Chương trình viết không bảo toàn Stack. Push mà không có Pop.

Fix:

Offset 0x09: inc cx (0x41) -> pop cx (0x59)
 
[Up] [Print Copy]
  [Question]   Re: RE challenges 28/06/2008 04:55:55 (+0700) | #6 | 138461
[Avatar]
4hfoo
Elite Member

[Minus]    0    [Plus]
Joined: 29/01/2007 01:50:20
Messages: 115
Offline
[Profile] [PM]
Bạn mfeng nhanh tay quá! smilie

Mình xin gửi đoạn phân tích để mọi người xem chơi, xin đừng chê cười...

Dùng debug của DOS (hông có tool khác nên xài tạm debug) để xem mã chương trình:

Code:
debug 3cool.com
-u
-u


Mã assembly:
Code:
1858:0100 B90300        MOV     CX,0003
1858:0103 E81C00        CALL    0122   ; gọi đoạn mã tại 0122, đoạn mã này tăng AX lên 1 đơn vị
1858:0106 E2FB          LOOP    0103    ; lặp lại, tổng cộng 3 lần (do CX=3), sau khi kết thúc AX=3
1858:0108 50            PUSH    AX      ; PUSH AX vào stack mà không có POP (như bạn mfeng đã nói ở trên)
1858:0109 41            INC     CX     ; -> CX=1
1858:010A 41            INC     CX     : -> CX=2
1858:010B 41            INC     CX     ; -> CX=3
1858:010C E81700        CALL    0126   ; gọi đoạn mã in chuỗi "Cool Hacker!" ra màn hình
1858:010F E2FB          LOOP    010C    ; lặp lại, tổng cộng 3 lần (do CX=3)
1858:0111 CD20          INT     20
1858:0113 43            INC     BX
1858:0114 6F            DB      6F
1858:0115 6F            DB      6F
1858:0116 6C            DB      6C
1858:0117 204861        AND     [BX+SI+61],CL
1858:011A 63            DB      63
1858:011B 6B            DB      6B
1858:011C 65            DB      65
1858:011D 7221          JB      0140
1858:011F 0D0A24        OR      AX,240A
1858:0122 83C001        ADD     AX,+01
1858:0125 C3            RET
1858:0126 B409          MOV     AH,09
1858:0128 BA1301        MOV     DX,0113
1858:012B CD21          INT     21
1858:012D C3            RET



Cách sửa để in ra 5 dòng:
Thay lệnh INC CX (mã lệnh là 0x41) tại địa chỉ 1858:0109 thành lệnh POP CX (mã lệnh là 0x59), lệnh này sẽ lấy giá trị trong stack (là 3) gán vào CX.
Sau đó 2 lệnh tiếp theo INC CX sẽ cho kết quả CX=5 -> vòng lặp in chữ sẽ chạy 5 lần.

Thực hiện:
Dùng 1 trình binary editor để thay đổi nội dung tập tin 3cool.com, mình dùng WinHex.
Tại offset 9, thay giá trị 41 thành 59.

Lưu file lại và chạy sẽ được kết quả 5 dòng "Cool Hacker!"

Thân.

[Up] [Print Copy]
  [Question]   Re: RE challenges 28/06/2008 08:41:56 (+0700) | #7 | 138512
[Avatar]
VXer
Member

[Minus]    0    [Plus]
Joined: 20/12/2007 10:22:40
Messages: 44
Offline
[Profile] [PM]
Code:
Load target vô IDA:
seg000:0100 start           proc near
seg000:0100                 mov     cx, 3
seg000:0103
seg000:0103 loc_10103:                              ; CODE XREF: start+6j
seg000:0103                 call    sub_10122       ; tăng ax lên 1
seg000:0106                 loop    loc_10103
seg000:0108                 push    ax
seg000:0109                 inc     cx
seg000:010A                 inc     cx  
seg000:010B                 inc     cx
seg000:010C                                          ; tới đây cx sẽ chứa số lần in ra string, tìm cách để tới đây cx = 5
seg000:010C @@LoopPrint:   
seg000:010C                 call    sub_10126
seg000:010F                 loop    @@LoopPrint
seg000:0111                 int     20h           
seg000:0111 start           endp


Ta sẽ thay lệnh call tại 0103 thành lệnh call tới 010A, tức là cx đang bằng 3 ta cộng nó 2 lần với 1 được 5 => sẽ in ra 5 lần như ý muốn!

Vậy cần thay lệnh call tại 0103 thành lệnh call tới 010A. Hãy tính offset của lệnh call:
010A - 0103 = 0007
0007 - 3 = 0004 (vì lệnh call chiếm 3 byte, 1 byte cho opcode E8 và 2 byte cho địa chỉ)

Vậy cần thay offset của lệnh call tại 0103. Mở target bằng 1 trình hex editor nào đó, thấy tại offset 03 là byte E8 (opcode lệnh call), 2 byte sau đó 001C là offset lệnh call, ta thay thành 0004 như đã phân tích ở trên.
Vậy chỉ cần thay byte 1C ở offset 04 thành byte 04 là thỏa yêu cầu smilie
[Up] [Print Copy]
  [Question]   Re: RE challenges 28/06/2008 11:30:50 (+0700) | #8 | 138559
Reversing...
Member

[Minus]    0    [Plus]
Joined: 31/12/2007 06:28:04
Messages: 117
Location: -1.-1.-1.-1
Offline
[Profile] [PM] [Yahoo!]
Đơn giản nhất là thay
Code:
mov cx, 3

bởi
Code:
mov cx, 5

còn sau đó bớt 3 rồi lại thêm 3 cũng như không. Thêm vào cái
Code:
push ax

cho cách giải thêm phong phú smilie
[Up] [Print Copy]
  [Question]   Re: RE challenges 28/06/2008 11:43:08 (+0700) | #9 | 138563
[Avatar]
VXer
Member

[Minus]    0    [Plus]
Joined: 20/12/2007 10:22:40
Messages: 44
Offline
[Profile] [PM]

Reversing... wrote:
Đơn giản nhất là thay
Code:
mov cx, 3

bởi
Code:
mov cx, 5

còn sau đó bớt 3 rồi lại thêm 3 cũng như không. Thêm vào cái
Code:
push ax

cho cách giải thêm phong phú smilie 


Không hiểu lắm smilie
Theo ngu ý của tôi nếu cậu thay "mov cx, 3" thành "mov cx, 5" cũng chả có ý nghĩa gì, nhớ là lệnh loop sẽ lặp tới khi cx = 0. Lúc đó 3 cái lệnh inc của cậu sau đó sẽ lại tăng cx lên thành 3 thôi, cậu có "mov cx, 1000" cũng vậy! smilie
[Up] [Print Copy]
  [Question]   Re: RE challenges 28/06/2008 13:35:52 (+0700) | #10 | 138632
Reversing...
Member

[Minus]    0    [Plus]
Joined: 31/12/2007 06:28:04
Messages: 117
Location: -1.-1.-1.-1
Offline
[Profile] [PM] [Yahoo!]
Hì, tưởng vẫn còn một thằng cx=3 ở đâu đó. smilie

Challenge thứ hai:

target:

Code:
http://rapidshare.com/files/125435312/hehehe.rar.html


2 nhiệm vụ:

1. Xác định pass
2. Bypass
 
[Up] [Print Copy]
  [Question]   Re: RE challenges 28/06/2008 21:42:07 (+0700) | #11 | 138667
[Avatar]
4hfoo
Elite Member

[Minus]    0    [Plus]
Joined: 29/01/2007 01:50:20
Messages: 115
Offline
[Profile] [PM]
Mình chạy thì bị lỗi này ... Phải chịu thua smilie




Bạn kiểm tra lại xem sao ...
[Up] [Print Copy]
  [Question]   Re: RE challenges 28/06/2008 21:49:08 (+0700) | #12 | 138670
[Avatar]
VXer
Member

[Minus]    0    [Plus]
Joined: 20/12/2007 10:22:40
Messages: 44
Offline
[Profile] [PM]
Bác nào có target up lên host khác cho anh em được ko ạ (ví dụ box.net ...)
Em dùng mạng chung cả cơ quan nên download rapidshare khổ lắm smilie
[Up] [Print Copy]
  [Question]   Re: RE challenges 28/06/2008 22:13:17 (+0700) | #13 | 138674
[Avatar]
4hfoo
Elite Member

[Minus]    0    [Plus]
Joined: 29/01/2007 01:50:20
Messages: 115
Offline
[Profile] [PM]
Mình up lên mediafire, bạn down về thử xem

http://www.mediafire.com/?w250mylsjd4

[Up] [Print Copy]
  [Question]   Re: RE challenges 28/06/2008 23:27:18 (+0700) | #14 | 138690
[Avatar]
VXer
Member

[Minus]    0    [Plus]
Joined: 20/12/2007 10:22:40
Messages: 44
Offline
[Profile] [PM]
login: reversing
pass: ~urzph
có phải ko ạ?

PS: tôi cũng ko run được target, hình như do tác giả build bằng VC 2005 bị lỗi sao đó (manifest thì phải), bạn reversing thử xem lại nhá! Load vô IDA chơi cho dễ smilie

Edit: Đã thử dùng tool mt.exe (trong bộ Platform SDK) để fix lại manifest của target, chạy trong máy tôi ok

link download: http://www.box.net/shared/z1crkpbacc

(cần có runtime của VC 2005)
[Up] [Print Copy]
  [Question]   Re: RE challenges 29/06/2008 03:30:04 (+0700) | #15 | 138729
[Avatar]
4hfoo
Elite Member

[Minus]    0    [Plus]
Joined: 29/01/2007 01:50:20
Messages: 115
Offline
[Profile] [PM]
Cám ơn bạn VXer, mình đã chạy được rồi.
Username và password giống như bạn đã đưa ra ...

Bạn Reversing... có thể giải thích nhiệm vụ thứ 2 làm làm gì hông?


2. Bypass
 


Thân.
[Up] [Print Copy]
  [Question]   Re: RE challenges 29/06/2008 04:08:48 (+0700) | #16 | 138732
Reversing...
Member

[Minus]    0    [Plus]
Joined: 31/12/2007 06:28:04
Messages: 117
Location: -1.-1.-1.-1
Offline
[Profile] [PM] [Yahoo!]
Cám ơn các bạn đã nhiệt tình tham gia. Mục đích của mình chỉ là học hỏi, cùng một lời giải, nhưng cách phân tích và con đường tìm ra lời giải có thể khác nhau. Vậy rất mong những người tham gia không chỉ cho đáp số, mà nên đưa thêm những phân tích và giải thích ( dù hơi mất công ) , cái này mới thật sự hữu ích.

Nhiệm vụ thứ hai là bằng một cách nào đó vượt qua password của chương trình để nó luôn hiển thị đúng.

Thân.
[Up] [Print Copy]
  [Question]   Re: RE challenges 29/06/2008 07:40:24 (+0700) | #17 | 138757
[Avatar]
4hfoo
Elite Member

[Minus]    0    [Plus]
Joined: 29/01/2007 01:50:20
Messages: 115
Offline
[Profile] [PM]
Xin đưa cách làm để mọi người coi chơi đỡ buồn ...

- Load file từ Olly:
Code:
00401013  |. 68 D0204000    PUSH hehehe.004020D0                     ; /format = "Enter login:"
00401018  |. FF15 98204000  CALL DWORD PTR DS:[<&MSVCR80.printf>]    ; \printf
0040101E  |. 83C4 04        ADD ESP,4
00401021  |. FF15 9C204000  CALL DWORD PTR DS:[<&MSVCR80.__iob_func>>;  MSVCR80.__p__iob
00401027  |. 50             PUSH EAX                                 ; /stream
00401028  |. 68 00010000    PUSH 100                                 ; |n = 100 (256.)
0040102D  |. 8D85 F8FDFFFF  LEA EAX,DWORD PTR SS:[EBP-208]           ; |
00401033  |. 50             PUSH EAX                                 ; |s
00401034  |. FF15 A0204000  CALL DWORD PTR DS:[<&MSVCR80.fgets>]     ; \fgets
0040103A  |. 83C4 0C        ADD ESP,0C
0040103D  |. 68 E0204000    PUSH hehehe.004020E0                     ; /format = "Enter password:"
00401042  |. FF15 98204000  CALL DWORD PTR DS:[<&MSVCR80.printf>]    ; \printf
00401048  |. 83C4 04        ADD ESP,4
0040104B  |. FF15 9C204000  CALL DWORD PTR DS:[<&MSVCR80.__iob_func>>;  MSVCR80.__p__iob
00401051  |. 50             PUSH EAX                                 ; /stream
00401052  |. 68 00010000    PUSH 100                                 ; |n = 100 (256.)
00401057  |. 8D8D F8FEFFFF  LEA ECX,DWORD PTR SS:[EBP-108]           ; |
0040105D  |. 51             PUSH ECX                                 ; |s
0040105E  |. FF15 A0204000  CALL DWORD PTR DS:[<&MSVCR80.fgets>]     ; \fgets
00401064  |. 83C4 0C        ADD ESP,0C
00401067  |. 8D95 F8FDFFFF  LEA EDX,DWORD PTR SS:[EBP-208]
0040106D  |. 52             PUSH EDX                                 ; /s2
0040106E  |. 68 00404000    PUSH hehehe.00404000                     ; |s1 = "reversing
"
00401073  |. E8 B8000000    CALL <JMP.&MSVCR80.strcmp>               ; \strcmp
00401078  |. 83C4 08        ADD ESP,8
0040107B  |. 85C0           TEST EAX,EAX
0040107D  |. 0F85 89000000  JNZ hehehe.0040110C
00401083  |. C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0
0040108A  |. EB 09          JMP SHORT hehehe.00401095
0040108C  |> 8B45 FC        /MOV EAX,DWORD PTR SS:[EBP-4]
0040108F  |. 83C0 01        |ADD EAX,1
00401092  |. 8945 FC        |MOV DWORD PTR SS:[EBP-4],EAX
00401095  |> 8D8D F8FEFFFF   LEA ECX,DWORD PTR SS:[EBP-108]
0040109B  |. 51             |PUSH ECX                                ; /s
0040109C  |. E8 89000000    |CALL <JMP.&MSVCR80.strlen>              ; \strlen
004010A1  |. 83C4 04        |ADD ESP,4
004010A4  |. 83E8 01        |SUB EAX,1
004010A7  |. 3945 FC        |CMP DWORD PTR SS:[EBP-4],EAX
004010AA  |. 73 1D          |JNB SHORT hehehe.004010C9
004010AC  |. 8B55 FC        |MOV EDX,DWORD PTR SS:[EBP-4]
004010AF  |. 0FBE8415 F8FEF>|MOVSX EAX,BYTE PTR SS:[EBP+EDX-108]
004010B7  |. 83F0 05        |XOR EAX,5
004010BA  |. 83E8 08        |SUB EAX,8
004010BD  |. 8B4D FC        |MOV ECX,DWORD PTR SS:[EBP-4]
004010C0  |. 88840D F8FEFFF>|MOV BYTE PTR SS:[EBP+ECX-108],AL
004010C7  |.^EB C3          \JMP SHORT hehehe.0040108C
004010C9  |> 8D95 F8FEFFFF  LEA EDX,DWORD PTR SS:[EBP-108]
004010CF  |. 52             PUSH EDX                                 ; /s2
004010D0  |. 68 00504000    PUSH hehehe.00405000                     ; |s1 = "showme
"
004010D5  |. E8 56000000    CALL <JMP.&MSVCR80.strcmp>               ; \strcmp
004010DA  |. 83C4 08        ADD ESP,8
004010DD  |. 85C0           TEST EAX,EAX
004010DF  |. 75 2B          JNZ SHORT hehehe.0040110C
004010E1  |. 68 00504000    PUSH hehehe.00405000                     ; /s2 = "showme
"
004010E6  |. 68 00404000    PUSH hehehe.00404000                     ; |s1 = "reversing
"
004010EB  |. E8 40000000    CALL <JMP.&MSVCR80.strcmp>               ; \strcmp
004010F0  |. 83C4 08        ADD ESP,8
004010F3  |. 85C0           TEST EAX,EAX
004010F5  |. 74 15          JE SHORT hehehe.0040110C
004010F7  |. 68 F0204000    PUSH hehehe.004020F0                     ; /format = "
Yees... You are cOOl HaCker!!!

"
004010FC  |. FF15 98204000  CALL DWORD PTR DS:[<&MSVCR80.printf>]    ; \printf
00401102  |. 83C4 04        ADD ESP,4
00401105  |. B8 01000000    MOV EAX,1
0040110A  |. EB 10          JMP SHORT hehehe.0040111C
0040110C  |> 68 14214000    PUSH hehehe.00402114                     ; /format = "
He he he. You are Lamer!

"
00401111  |. FF15 98204000  CALL DWORD PTR DS:[<&MSVCR80.printf>]    ; \printf
00401117  |. 83C4 04        ADD ESP,4
0040111A  |. 33C0           XOR EAX,EAX
0040111C  |> 8B4D F8        MOV ECX,DWORD PTR SS:[EBP-8]
0040111F  |. 33CD           XOR ECX,EBP
00401121  |. E8 10000000    CALL hehehe.00401136
00401126  |. 8BE5           MOV ESP,EBP
00401128  |. 5D             POP EBP
00401129  \. C3             RETN


1/ Tại địa chỉ 00401073, giá trị username được so sánh với chuỗi "reversing", nếu giống nhau mới tiếp tục làm tiếp
-> username: reversing

2/ Đoạn vòng lặp từ địa chỉ 0040108C đến địa chỉ 004010C7 dùng để biến đổi giá trị password thành một chuỗi khác.
- Tại địa chỉ 004010D5, chuỗi biến đổi sẽ được so sánh với chuỗi "showme", nếu giống nhau thì thỏa mãn.
- Như vậy, ta cần tìm hiểu chuỗi được biến đổi như thế nào. Từ đó, lần ngược lại từ chuỗi "showme" để tìm password.

3/ Tìm password:
- Chuỗi password sẽ được biến đổi như sau: mỗi ký tự sẽ được XOR với 5, và trừ đi 8 để được một ký tự khác. Cứ như thế sẽ được chuỗi cuối cùng.

Code:
004010AF  |. 0FBE8415 F8FEF>|MOVSX EAX,BYTE PTR SS:[EBP+EDX-108]
 004010B7  |. 83F0 05        |XOR EAX,5
 004010BA  |. 83E8 08        |SUB EAX,8


- Như vậy để tìm password, ta làm ngược lại. Từ chuỗi "showme", ta lấy từng ký tự. Mỗi ký tự sẽ được cộng với 8 rồi XOR với 5.

's' -> mã ASCII là 0x73, trừ 8 rồi XOR với 5 sẽ được giá trị 7E -> ký tự '~'
(lẫy mã ASCII từ http://www.asciitable.com/)
Tương tự:
h -> u, o->r, w>z, m->p, e->h

Vậy password cần tìm là ~urzph

4/ Như vậy là xong

login: reversing
pass: ~urzph
 


Còn cách bypass nếu được sửa code thì có nhiều cách ... smilie

Thân





[Up] [Print Copy]
  [Question]   Re: RE challenges 02/07/2008 23:39:36 (+0700) | #18 | 139533
THE LAST LEAF
Member

[Minus]    0    [Plus]
Joined: 30/06/2006 16:22:20
Messages: 9
Offline
[Profile] [PM]
Theo như screenshot thì chỉ hiển thị 3 dòng CoolHacker. Vì vậy sửa 1 byte đó là byte offset 08 giá trị 0x50 thành 0x58 là xong

Quên chưa đọc kỹ đề, vậy như mrfeng là ok
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|