Bài này được viết vào khoảng cuối tháng 3 năm 2006, tuy cũ nhưng những kiến thức của nó vẫn còn như mới
Đ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ó.
Đ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.
- coruso_trac, pat, trm_tr. Thug4lif3, vn_blackrain, v..v.. and all brothers in VSEC
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
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..
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 :
- Đâ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 ().
- 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 + 0×29
- 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ụ :
Wow các bạn có nhận thấy sự khác biệt không? Riêng tôi thì IDA quả là tuyệt, nó nói cho ta tất cả mọi thứ, rõ ràng như ban ngày.
Một
số tính năng khác tương tự với W32Dasm đó là “Goto code location” thì
trong IDA là “Jump-Jump to Address”. Hay “Goto entrypoint” thì trong IDA
sẽ là “Jump – Jump to entry point”.
Đó
là một số tính năng quan trọng nhất khi chúng ta bắt đầu con đường chinh
phục IDA. Ah tôi quên mất, trong IDA còn một tính năng khá thú vị nữa
đó chính là thỉnh thoảng chúng ta thấy có rất nhiều đoạn như sau ‘db’ mà lại không thấy có các String References, nhưng đó lại chính là những đoạn code. Chỉ việc trỏ chuột vào và nhấn phím tắt C trên bàn phím, ngay lập tức IDA sẽ chuyển nó thành code. Ví dụ như sau :
Còn
lý do tại sao chắc tôi sẽ viết một bài về việc làm thế nào để hiểu một
đoạn code có ý nghĩa gì.Đến đây coi như là kết thúc quá trình tôi cùng
các bạn tìm hiểu một số tính năng của IDA. Sau khi bạn đọc bài viết này
của tôi có thể bạn sẽ đặt cho mình một câu hỏi “Liệu tôi có nên tiếp tục
sử dụng W32Dasm nữa không”, câu trả lời nằm ở chính bạn.Còn riêng với
cá nhân tôi, tôi sẽ vẫn giữ lại W32Dasm vì trong một số trường hợp đơn
giản nó vẫn rất có ích.
III. Lời kết
Vậy
là tut này đến đây là kết thúc, 7 trang giấy trong bài viết này không
thể nói hết được những tính năng rất mạnh của IDA. Chỉ có thực sự bắt
tay vào công việc chúng ta mới thấy được, mới tìm hiểu được những tính
năng rất mạnh của nó. Không lý do gì mà IDA lại được giới Reverser cũng
như giới Security yêu thích đến thế, chắc chắn nó sẽ có nhiều điều thú
vị nữa khiến cho mọi người đều đam mê. Bài viết này của tôi chỉ là một
phần nhỏ giới thiệu về IDA, hi vọng nó đã mang đến cho các bạn một cái
nhìn khác về chương trình Disassembly rất mạnh này.Rất cảm ơn anh em đã
dành thời gian đọc nó.
PS : Hi vọng anh TQN, Thug và light.phoenix có thời gian viết vài bài cho anh em mở rộng tầm mắt
Best Regards
_[Kienmanowar]_
–++–==[ Greatz Thanks To ]==–++–
My family, Computer_Angel, Moonbaby , Zombie_Deathman, Littleboy, Benina, QHQCrker, the_Lighthouse, Merc, Hoadongnoi, Nini … all REA‘s members, TQN, HacNho, RongChauA, Deux, tlandn, light.phoenix, dqtln, ARTEAM …. all my friend, and YOU.
–++–==[ Special Thanks To ]==–++–My family, Computer_Angel, Moonbaby , Zombie_Deathman, Littleboy, Benina, QHQCrker, the_Lighthouse, Merc, Hoadongnoi, Nini … all REA‘s members, TQN, HacNho, RongChauA, Deux, tlandn, light.phoenix, dqtln, ARTEAM …. all my friend, and YOU.
- coruso_trac, pat, trm_tr. Thug4lif3, vn_blackrain, v..v.. and all brothers in VSEC
–++–==[ Thanks To ]==–++–
iamidiot, WhyNotBar, trickyboy, dzungltvn, takada, hurt_heart, haule_nth, hytkl v..v.. các bạn đã đóng góp rất nhiều cho REA. Hi vọng các bạn sẽ tiếp tục phát huy
No comments:
Post a Comment