Tải bản đầy đủ (.pdf) (5 trang)

Cracking part 42 pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (148.54 KB, 5 trang )

00401223 | PUSH evdcm2.00402117 | ASCII "Sorry, Serial not valid !"
Double click vào dòng đó, chúng ta đến đây :
Code:
0040120E | . E8 79000000 | CALL
<JMP.&USER32.GetDlgItemTextA | GetDlgItemTextA <== set breakpoint ở đây
00401213 | . A3 FB204000 | MOV DWORD PTR DS:[4020FB], EAX
00401218 | . 33C0 | XOR EAX, EAX
0040121A | \ EB 19 | JMP SHORT evdcm2.00401235
0040121C | > 6A 00 | PUSH 0 | Style=
MB_OK:MB_APPLMODAL
0040121E | . 68 0F214000 | PUSH evdcm2.0040210F | Title =
"CrackMe"
00401223 | . 68 17214000 | PUSH evdcm2.00402117 | Text = "Sorry,
Serial not invalid !" <== Chúng ta đang ở đây
00401228 | . 6A 00 | PUSH 0 | hOwner = NULL
0040122A | . E8 69000000 | CALL <JMP.&USER32.MessageBoxA> |
MessageBoxA
0040122F | . 50 | PUSH EAX | ExitCode
00401230 | . E8 7B000000 | CALL <JMP.&KERNEL32.ExitProcess> | ExitProcess
00401235 | > 68 50204000 | PUSH evdcm2.00402050
0040123A | . 5E | POP ESI
0040123B | . E8 C0FDFFFF | CALL evdcm2.00401000
00401240 | . A3 FF204000 | MOV DWORD PTR DS:[4020FF], EAX
00401245 | . E8 B6FDFFFF | CALL evdcm2.00401000
0040124A | . 55 | PUSH EBP
0040124B | . B8 07214000 | MOV EAX, evdcm2.00402107
00401250 | . 8BE8 | MOV EBP, EAX
00401252 | . FE45 00 | INC BYTE PTR SS:[EBP]
00401255 | . E8 A6FDFFFF | CALL evdcm2.00401000
Nhìn lên trên chúng ta biết địa chỉ nên đặt breakpoint là 0040120E , click vào đó nhấn
F2, xong nhấn F9 để Run chương trình. Nhập name : the_lighthouse và serial :


1234567890. Bấm check và ngay lập tức Olly nhả
y ra => breakpoint của chúng ta đã hoạt
động và chúng ta ice tại địa chỉ 0040120E.
Nhìn xuống dưới chúng ta thấy có 3 lệnh CALL càn chú ý là ở các địa chỉ : 0040123B,
00401245 và 00401255. Nhìn sơ qua thì chúng ta thấy cả 3 lệnh CALL này khá giống
nhau, chẳng biết chọn cái nào bây giờ. Nhưng em mách cho các bác nhá, chúng ta hãy
trace đến lệnh call thứ 3 đó, lí do bởi thường thì lệnh CALL cuối cùng sẽ làm nhiệm vụ
CHECK serial (cái này ngộ quá ta :)). Okey, bây giờ chúng ta trace over đến đó bằng
cách dùng F8 - lưu ý ở đây các bác phải dùng trace over nếu không chưa kị
p đến "nhà
nàng" 00401255 đã bị lạc giữa mê cung assemble thì dễ xa nhau lắm ;) Xong, đến được
nhà nàng rồi, bây giờ chúng ta nhấn F7 (trace into) để mở cửa vào nhà thôi. Và đây là bên
trong nhà nàng ( hơi bị rộng đấy :sick: ) :
Code:
00401000 | $ 807D 00 01 | CMP BYTE PTR SS:[EBP], 1 <== chúng ta
đang ở đây
00401004 | .\ 74 22 | JE SHORT evdcm2.00401028
00401006 | . 33C0 | XOR EAX, EAX

0040108B | . 5E | POP ESI
0040108C | . 3B16 | CMP EDX, DWORD PTR DS:[ESI] <== rất quan
trọng
0040108E | .\ 75 01 | JNZ SHORT evdcm2.00401091
00401090 | . C3 | RET
Okie, chúng ta trace into đến 0040108C thôi. Và hãy nhìn vào khung nhỏ nhỏ bên dưới,
chúng ta thấy như sau :
Code:
DS : [004020FF]=499602D2
EDX=00472A37
Lệnh CMP dùng để so sánh, vậy ở đây chắc là so sánh 2 số serial giống như ở phần 1 rồi.

Nhưng mà sao lạ quá , 499602D2 là cái số nào, lúc này ta nhập 1234567890 mà. Ah, thì
ra đây là hệ hex (hex là hệ thập lục phân) của nó. Nếu các bác không tin thì có thể dùng
calculator có sẵn trong windows để tính lại. Chúng ta quay lại vấn
đề thôi. Vậy thì chắc
472A37 là real serial rồi, nhưng mà fake serial được chuyển sang hệ hex thì chắc real
serial cũng được chuyển sang hex. Vậy ta phải chuyển nó sang hệ dec (hệ thập phân)
thôi. Và số mà ta tìm được là 4663863. Đóng Olly lại, mở file evdcm2 lên, nhập name :
the_lighthouse và serial : 4663863 và ;)

the_lighthouse (
)

IDA Pro Advanced changes our life

Author: _[kienmanowar]_

I. Intro :

Chào tất cả các anh em REA, đã lâu rồi tôi không có viết tut kể từ ngày lão nhỏ rút
lui.Không hiểu lão nhỏ đang bận cái quái quỉ gì mà ngay cả YM cũng chẳng thấy thò mặt
mũi lên lấy 1 lần.Mặc dù rất ngứa tay và muốn viết thật nhiều cho REA, nhưng khi đặt
tay lên bàn phím tôi không biết phải bắt đầu từ đâu và viết về vấn đề gì, cộng thêm phải
đi cày để gom tiền cưới vợ nên c
ũng chẳng có nhiều thời gian khà khà.Lão nhỏ ra đi để
lại độc một cái tut về IDA cho anh em, mà trong khi đó chắc anh em cũng như tôi còn
muốn nhiều hơn thế, nhưng thôi thì cũng phải thông cảm cho lão nhỏ chắc giờ này lão
cũng đi cày để gom tiền như tôi thôi. Trong REA, hễ cứ thấy động tới IDA là y như rằng
anh em lặng im phăng phắc chẳng thấy bàn tán gì nhiều, tôi cũng như anh em thôi cũng
muốn vo
ọc IDA lắm chứ nhưng …. Hôm rồi, thấy anh Be có tạo một Thread “Learning

IDA online” tôi nghĩ rằng đây là một Thread rất cần thiết và bổ ích cho anh em muốn tìm
hiểu về IDA như tôi, nhưng ngặt nỗi tài liệu về IDA khá khiêm tốn trong khi đó ứng dụng
của nó trong Reverse lại là rất lớn.Hii anh Be đã lên tiếng thì thằng em này cũng cố theo,
hôm nay mạn phép xin viết một bài rất cơ bản về IDA để anh em đọc chơi, anh em nào đã
biết rồi thì xin góp ý cho bài viết để tôi còn biết đường mà sửa, còn những anh em nào
chưa biết thì …. Let’s go J

Bài viết này tôi tổng hợp lại từ bài viế
t của tác giả BlackBird, đã viết từ năm 2000.Có
thể anh em cho rằng nó quá cũ, nhưng có một câu “Cũ người mới ta”, thế giới đã đi
trước chúng ta bao nhiêu năm thì giờ đây chúng ta phải chắt lọc những gì tính túy nhất để
mà học hỏi.Bài viết này tôi sẽ giới thiệu cho các bạn một số chức năng của IDA, để các
bạn thấy được tại sao IDA lại
được đánh giá cao đến thế. Như các bạn thấy đối với những
Newbies thì khi nhìn vào cửa sổ chương trình IDA, hehe điều đầu tiên họ làm là nhấn nút
“X” ở góc trên phải màn hình, để làm gì thì khỏi nói các bạn cũng biết nhưng còn đối với
những Elite Reverses thì IDA lại là một công cụ không thể thiếu được.Tại sao các
Newbies mới ban đầu khi tiếp xúc với IDA lại có thái độ như trên, đó là bởi vì IDA có
quá nhiều các hàm và các chức nă
ng mở rộng đồng thời việc sử dụng IDA phức tạp hơn
nhiều so với W32Dasm.Phần tiếp theo đây của bài viết sẽ đưa ra những lời giải thích
ngắn gọn và trong sáng nhất về việc tại sao bạn nên sử dụng IDA trong khi bạn đã khá
thành thạo trong việc sử dụng W32Dasm.

II. IDA: A power disassembler

Điều đầu tiên mà chúng ta nhận thấy một cách rõ ràng khi chạy IDA đó là giao diện của
chương trình trông cực kì chuyên nghiệp và hơn hẳn W32Dasm. Có rất nhiều các tùy
chọn cũng nhữ những tính năng cấp cao mà ở W32Dasm không có. Điều này có một
thuận lợi đó là các bạn có thể Disassemble tốt hơn và chi tiêt hơn, nhưng đó cũng là điều

không thuận lợi khiến IDA trở nên rất khó trong việc làm quen và sử d
ụng nó.



Tuy nhiên, trên thực tế IDA vẫn có đầy đủ các tính năng tương như W32Dasm như : Bạn
có thể nhảy tới chính xác một đoạn code nào đó, bạn có thể quan sát vị trí nơi mà một
lệnh nhảy nhảy tới một đoạn code, hay bạn có thể xem các String References v v

Điều khó khăn đầu tiên cho tất cả các Newbies đó chính là quá trình tìm kiếm các String
References. Trong W32Dasm chúng ta có một nút bấm mà theo đó chúng ta có thể xem
trực tiếp tấ
t cả các String References rất dễ dàng. Trong IDA, tính năng này được đặt
trong Menu: View à Names.



Giả sử chúng ta đã mở một file .exe trong IDA, một hộp thoại bật ra cung cấp cho chúng
ta rất nhiều tùy chọn. Đừng có đụng tới bất cứ cái gì, chỉ việc nhấn ‘OK’. Sau đó IDA sẽ
thực hiện công việc Analysis và sau khi thực hiện xong bạn hãy mở theo như hình trên
chúng ta có được như sau :




Oki, chúng ta đang ở cửa sổ Names, vậy làm thế nào để nhận biết ra đâu là String
References.Như đã nói ở phần trên W32Dasm có một nút bấm riêng phục vụ cho công
việc này, nhưng còn trong IDA các string reference được gắn vào trước bởi một chữ
‘a’.Để tìm kiếm một string bạn chỉ việc nhấn ‘a’ trên bàn phím tại cử
a sổ Names, tương

tự như việc tìm kiếm các hàm API trong Ollydbg.Hoặc các bạn có thể cuộn chuột để tìm
kiếm, cho đến khi thấy được như sau :



Đó chính là các String Reference mà IDA đã chỉ ra vị trí của chúng cho chúng ta thấy.Và
đương nhiên tương tự như W32Dasm, khi tìm thấy một String đáng quan tâm chúng ta sẽ
tìm đến vị trí của nó, trong IDA bạn nhấn Enter hoặc nhấp đúp vào String chúng ta sẽ đến
vị trí mà String đó ở tại.



Kết quả chúng ta sẽ được như hình minh họa trên. Tai đây bạn quan sát sẽ thấy có một
tham chiếu được đặt cạnh String của chúng ta, nó có dạng như sau : DATA XREF:
.text:XXXXXXXXo, chi tiết về các thành phần tôi sẽ đề cập trong bài viết sau. Ý nghĩa
của cái Reference này cho chúng ta biết nơi mà String của chúng ta thực sử được sử dụng
trong đoạn code của chương trình.Rê chuột vào địa chỉ XXXXXXXX, IDA sẽ cho chúng
ta thấy được nh
ư sau điều mà ở W32Dasm không có được :



Để thực sử tới đoạn code sử dụng String chúng ta chỉ việc nhấn đúp chuột vào địa chỉ đó,
nó sẽ đưa chúng ta đến nơi chúng ta cần đến :



Khà khà rất đơn giản phải không nào, đâu có gì là quá khó phải không các bạn. Tiếp theo
chúng ta sẽ đề cập đến một số tính năng khác của W32Dasm mà cũng được IDA hỗ trợ
rất t

ốt đó là các lệnh nhảy (Jump) và các lời gọi Call References.Tôi xin lấy 2 hình minh
họa cho quá trình Disassembly một chương trình trong W32Dasm và IDA để các bạn
nhận thấy được sự khác biệt.





Như các bạn thấy, IDA cung cấp các thông tin chi tiết và rõ ràng hơn nhiều.Tiếp theo ta
sẽ xem một ví dụ về Reference. Trong W32Dasm các ban sẽ thấy như sau :



Còn trong IDA nó sẽ được thể hiện như sau :



Nhìn vào hình minh họa trong IDA, ta thấy rằng IDA cho chúng ta nhiều thông tin mặc
dù trông nó có vẻ ngắn gọn hơn W32Dasm.Cụ thể như sau :
1. Đây là một lệnh nhảy vì ta thấy có kí tự (j). Thêm nữa lệnh nhảy này nằm ở phía
trên c
ủa địa chỉ 0x0040132D, tại sao lại biết được nó nằm phía trên đó là do ta
thấy có hình mũi tên lên ().
2. Lệnh nhảy tới đoạn code bắt đầu tại địa chỉ 0x0040132D này nằm tại địa chỉ
0x0040131A (= DialogFunc + 29). Bạn sẽ hỏi làm sao tôi biết địa chỉ của
DialogFunc, xin thưa rất đơn giản bạn chỉ cần nhấn chuột vào chữ DialogFunc và
chọn Edit Function hay phím tắt là Alt+P
, ta sẽ có được thông tin về địa chỉ như
sau :


Vậy là 0x0040131A = 0x004012F1 + 0x29
3. Lệnh nhảy này được nằm tại .CODE section.

Nếu như Reference là một lời gọi (CALL) thì trong IDA nó sẽ được thể hiện như sau :


Một trong những tính năng tuyệt vời khác của IDA đó chính là việc thể hiện các biến
được dùng trong chương trình.Thậm chỉ bạn có thể nhấn đúp chuột vào chúng để
đi tới
địa chỉ nơi mà các biến được lưu trữ : Lea edi, [esp + 1B8h + var_104]
Một trong những tính năng khiến cho IDA trở thành một công cũ rất mạnh đó chính là
việc sử dụng Flirt Signatures. Giải thích một cách đơn giản nhất đó là trong quá trình
disassembly IDA cố gắng nhận diện chính xác các hàm thư viện có liên quan với trình
biên dịch. Ví dụ :




Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×