Dùng ida pro tool là gì - reversing with ida from scratch (p10)

-
Trong nội dung bài viết trước chúng ta đã mày mò về Olly
DBG - một lao lý mạnh, dễ sử dụng nhưng chỉ số lượng giới hạn sử dụng để RE những file PE 32-bit (hiện tại đã có phiên bản Olly cho PE 64-bit). Mặc dù trong thực tế, những thứ họ cần RE không chỉ có có PE 32-bit cơ mà còn tương đối nhiều định dạng file của những hệ quản lý và điều hành khác. Vậy phương pháp nào sẽ được sử dụng cho quá trình đó.Ở nội dung bài viết này bản thân sẽ trình làng một khí cụ như vậy. Đó chính là The Interactive Disassembler xuất xắc thường được call là IDA.

Bạn đang xem: Ida pro tool là gì


*

IDA đã auto lựa chọn những options cân xứng với target của ta bắt buộc các bạn sẽ không phải điều chỉnh gì thêm nữa.Ở đây file .exe của ta đã làm được IDA dìm dạng là tệp tin PE for 80386.Bấm Ok để disasm .Đợi 1 chút thời gian để IDA so với file .exe của chúng ta.Kết trái là như sau:
*

Các cửa sổ chính:1 - Function window: tên của những hàm vào target của chúng ta.2 - Nơi đựng được nhiều thông tin bọn họ quan trọng tâm đến nhất. Cùng với disasm, hex view, imports với exports function.3 - Các tác dụng của IDA cung cấp.4 - đầu ra window : những thông tin về buổi giao lưu của IDA.2. Các công dụng chínhMột trong những chức năng mà mình siêu thích ở IDA là Graph Disassembly View
Chúng ta hoàn toàn có thể chuyển từ bỏ Text Disassembly View tương hỗ với Graph Disassembly View bằng chức năng
*


hoặc thực hiện phím tăt Space.Ở Graph Disassembly View ta sẽ thấy như sau :

Ở góc đề nghị dưới có graph overview, giúp ích tương đối nhiều cho việc khám phá một giải pháp tổng quan phương thức đoạn công tác được thực thi.IDA cũng cho phép người sử dụng chuyển đến một function một cách nhanh chóng bằng phương pháp click double vào function name trong cửa sổ function.Ngoài ra còn cực kỳ nhiều tác dụng khác, mọi người hoàn toàn có thể xem sinh sống trên thanh công cụ.
*

Hướng dẫn sử dụng IDA

Trong bài viết này mình áp dụng 1 crackme bên trên trang https://www.hackthissite.org/ chính là Application Challenge 5.1. Static analysicLoad tệp tin app5win.exe vào IDA và bước đầu công việc của chính bản thân mình nào.Như trong nội dung bài viết trước đã thực hiện thì để ý đến đầu tiên của bọn họ khi chạm mặt một vấn đề như vậy này đang là tìm hồ hết xâu gồm trong chương trình. Với IDA thì công việc này rất đối kháng giản. Bọn họ chỉ việc mở cửa sổ String Window lên bằng tổ hợp phím tắt Shift + F12.Và ta tìm kiếm được các xâu sau :

Recent Posts – bài bác mới

Pages

R4ndom’s Beginning Reverse Engineering
Tutorials
Tutorial #9: No Strings
Attached
Slugsnack’s Reversing Series byc0lo

Chuyên mục

Flare-On7 (3)IDA Pro section (69)IDA Tutorials (50)Linux (11)Flux
Box mang lại Back
Track Beta 4 (2)Some tutor about using Back
Track (2)Movie (10)Music (4)My Tutorials (49)Keygen Tutorials (5)Unprotecting-the-crypter (2)Olly
Dbg Tutorials (48)Other Tutorials (76)RE Tools (65)REA's Tutorials Archive (5)REA_Books (3)Reversing.Kr {Some write-ups) (15)Uncategorized (99)

*

Tại màn hình hiển thị Load a new file… của IDA quăng quật chọn Manual load, nếu xuất hiện thêm các hành lang cửa số khác thì cứ nhấn OK cho tới khi IDA load dứt file. Sau khi IDA phân tích dứt crackme, lựa chọn Debuggers bằng phương pháp truy cập thực đơn Debugger > Select Debugger như hình:


*

Các bạn sẽ thấy có rất nhiều tùy chọn Debugger không giống nhau, ta đang tìm hiểu từ từ khi có điều kiện. Ở bài viết này chúng ta sẽ chắt lọc Local Win32 debugger để ban đầu (có thể sàng lọc trình debugger khoác định mỗi khi load một file new bằng những tích lựa chọn Set as default debugger).


*

Qua đây, các chúng ta cũng có thể thấy rằng, IDA khôngchỉ là 1 Loader với năng lực static disassembler siêu tốt, cung cấp khảnăng tương tác mạnh mẽ, đem lại hiệu qủa trong quá trình dịch ngược, hơn nữa hỗtrợ thêm cả bài toán debug nhằm mục tiêu hoàn thiện hơn. Tuy nhiên, cách chuyển động củadebugger trong IDA đã khác một ít so với hầu như gì chúng ta đã làm cho quen cùng với Olly
Dbg/x64dbg.

Trong Debuggers > Debuggers options bọn họ có các cấu hình thiết lập như sau:


*

Lựa chọn Suspend on process entry point nhằm trình debugger tạm dừng tại entry point của crackme. Chúng ta sẽ triển khai những thay đổi như đã thực hiện trong phần trước. Trước tiên ta đã đổi màu những khối với đặt lại tên cho những sub_ như sau:


*

Sau đó, tại địa chỉ cửa hàng 0x401243 bọn họ đặt một Breakpoint trên lệnh dancing (JZ) bằng cách nhấn F2 tại địa chỉ cửa hàng này. Tiếp theo, ta đưa tới một lệnh nhảy đầm khác mà bọn họ cũng sẽ phân tích trong phần trước, để một breakpoint trên lệnh nhảy này đồng thời thay đổi màu các khối tương tự như hình bên dưới đây:


Sau khi tùy chỉnh thiết lập xong, ta tiến hành debug bằng cách chọn Debugger > Start Process hoặc dấn phím tắt là F9, cửa ngõ sổ chú ý sẽ xuất hiện thêm như hình:


Cửa sổ lưu ý trên sẽ luôn luôn luôn xuất hiệnkhi họ thực hiện debug một tệp thực hiện trên đồ vật local của mình. Vày khiphân tích file bởi Loader của IDA, file này sẽ không khi nào được thực thi trênmáy chúng ta, nhưng hiện thời nếu file được chạy để phục vụ debug, thì IDA đang đưara chú ý nhắc nhở phải cẩn thận khi thực hiện, vì có tác dụng là đó một Virus hay cái gì đấy có hoàn toàn có thể gây nguyhiểm tới máy tính xách tay của chúng ta. Lúc đó, ta yêu cầu sử dụng thiên tài Remote Debugger và tiến hành file trongmột môi trường ảo hóa hoặc debug hoàn toàn bằng trang bị ảo. Việc thực hiện tính năngremote debugging ra sao tôi sẽ nỗ lực đề cập trong một nội dung bài viết khác.

Do ta đang biết Crackne này hoàn toàn sạch đề nghị nhấn YES để liên tục quá trình debug:


Vì họ lựa lựa chọn để tạm dừng tại Entry Point, do thế debugger đã tạm dừng tại EP của crackme, tại showroom 0x401000. Nếu như bạn nhấn space bar, IDA sẽ đưa qua chế độ đồ họa như ta đã thao tác ở LOADER. Tiếp theo, các chúng ta có thể bố trí lại các cửa sổ theo ý thích, thu thanh mảnh lại hành lang cửa số Output Window, mở rộng cửa số Stack view, tùy chỉnh cửa sổ General registers để quan gần kề được những thanh ghi cũng giống như trạng thái của các cờ như hình dưới:


Khi đã đạt được một màn hình sắp xếp hợp lý với phù hợp, ta sẽ lưu nó lại như một tùy chỉnh mặc định. Trên IDA, vào Windows > Save Desktop, tích chọn Default như hình dưới. Làm như thế này, bất cứ lúc nào ta thực hiện Debugger, IDA sẽ luôn luôn nạp các tùy chỉnh ta đã đặt mang định cùng nếu bọn họ muốn thay đổi nó một lần nữa, ta có thể làm lại mà không có vấn đề gì:


Ta có màn hình IDA-View EIP là vị trí hiển thị toàn cục các lệnh của lịch trình và bên dưới là hành lang cửa số Hex View giỏi Hex Dump, hiển thị tin tức của bộ lưu trữ ở chính sách xem hexa:


Đây là những thông tin về File Offset (Offset của file xúc tiến khi lưu trên disk) và địa chỉ cửa hàng bộ lưu giữ (Virtual Address khi file được load vào memory). Nếu họ mở crackme bởi một trình Hex
Editor, ví dụ như Hx
D, ta đã thấy tại file Offset là 0x600 tất cả cùng opcode như đã thấy tại screen disassembly:


Chúng ta đã biết rằng, phím tắt G được thực hiện để đi đến một showroom bộ nhớ bất kỳ, nếu như bạn ấn G với nhập vào địa chỉ cửa hàng 0x401389:


Ta vẫn đi mang lại chỗ đã tùy chỉnh cấu hình breakpoint. Vào Options > General, cấu hình lại Number of opcode bytes (graph)0:


Trong hành lang cửa số View > mở cửa Subview > Segments, chúng ta thấy có tía segments được nạp bởi Loader, trong các số đó CODE segment được nạp vào 0x401000, tiếp theo là DATA segment cùng .idata segment:


Bất kỳ sự biến hóa nào họ thực hiện vớiba segments này rất nhiều được lưu lại bởi vì chúng được nạp bởi vì IDA Loader, mà lại cácthay đổi bên phía ngoài ba segments này sẽ bị mất cũng chính vì chúng chỉ là các mô-đun nạpbởi Debugger và sẽ không còn được lưu giữ vào cơ sở dữ liệu của IDA. Như vậy, cácmô-đun mà họ đang đối chiếu và ý muốn debug cần nằm trong Loader hoặc có xuấthiện chữ L làm việc đó, rõ ràng chúng cũngsẽ được mua trong Debugger, nhưng tất cả Lđồng nghĩa là bọn chúng sẽ sinh sống trong cả hai chế độ và ta vừa rất có thể phân tích tĩnh tại
Loader với vừa debug được bằng Debugger mà vẫn tồn tại thông tin.

Một trong số những thanh cơ chế mà tôi thấy luôn luôn luôn có lợi là Jump:


IDA sẽ bổ sung thêm nhì nút như hình dưới, tương tự như ta thấy ở các trình web browser. Sau khi cho hiển thị toolbar này, ta giữ lại màn hình Windows > Save Desktop.


Thanh luật này mang lại ta tài năng quay quay trở về hoặc đưa tới màn hình đã làm việc lúc trước một cách rất thuận tiện. Dấn mũi tên

*
, ta sẽ quay lại màn hình entry point của crackme mà lại ta sẽ break trước đó:


Cũng ngay lập tức tại menu Debugger, ta có thể xem được danh sách những Breakpoints sẽ đặt trải qua Breakpoint list (Ctrl+Alt+B):


Lúc này, ta đang tạm dừng tại Entry Point và bao gồm hai Breakpoints đã cấu hình thiết lập trước đó, do thế ta rất có thể nhấn F9 để thực thi crackme:


Mũi tên mặt trái hôm nay đang nhấp nháy, nó thông báo cho ta biết chỗ vùng code tiếp sau sẽ liên tiếp thực hiện. Quan sát tại hành lang cửa số Registers, bọn họ thấy rằng thanh ghi EAX đang có giá trị 0x6D:


Nếu tôi gõ chr (0x6D) trên thanh Python của IDA, tác dụng trả về đến tôi chữ cái m vào chuỗi “manowar”.


Cũng tại thanh Python, làm tương tự như bên trên ta thấy cùng với chr(0x41) đang cho công dụng là chữ A. Như vậy, kí tự này đã được so sánh xem liệu nó có thấp hơn quý giá 0x41 (‘A’) không?


Bên cạnh đó, IDA cũng cung cấp cách màn trình diễn khác hiển thị ví dụ hơn, bằng cách một nhấn vào phải vào quý hiếm 41h tại màn hình hiển thị disassembly, trong những các tùy chọn mà chúng ta cũng có thể lựa chọn giống hình dưới, ta thấy có lộ diện ‘A’:


Làm tương tự như với 0x5A, ta đã có được chữ dòng ‘Z’. Họ thấy nó đối chiếu giá trị 0x6D với AZ. Tại thời gian này, chưa hẳn lúc họ tìm cách giải quyết và xử lý hoàn toàn crackme này, nhưng các bạn thấy rằng 0x6D to hơn 0x41, vì thế ta sẽ không đi cho khối màu đỏ – thực hiện hiển thị thông báo lỗi. Rõ ràng, nó sẽ nhảy vào khối đỏ nếu như nó tốt hơn, tuy vậy nó cũng hoàn toàn có thể được tiến công giá bằng phương pháp quan gần cạnh trạng thái của các cờ.


Trong hình trên, họ thấy lệnh nhảy đầm JB nhảy theo mũi tên greed color lá cây vào IDA nếu nhỏ dại hơn. Khi thực hiện lệnh so sánh, cờ C (còn call là CF hoặc C) sẽ tiến hành kích hoạt, theo đó lệnh nhảy đang nhảy nếu như cờ C = 1. Quan sát những cờ trong IDA:


Do cờ C= 0 buộc phải lệnh nhảy sẽ không còn được thực hiện và nó đang theo hướng của mũi tên đỏ.

Xem thêm: Cách giải nén winrar không cần pass winrar, #2 cách phá pass winrar

Vậy điều kiện đo lường và tính toán sẽ nạm nào làm cho cờ Carry Flagđược kích hoạt?

Carry Flag cung cấp cho chúng ta thông tin rằng có nào đó đã không đúng trong một phép toán giữa những số nguyên unsigned. Nếu như tôi làm phép trừ hệt như cách triển khai của lệnh CMP (không giữ lại kết quả), phép tính 0x6D-0x41 cho công dụng là 0x2C, đây là một số dương và sẽ không tồn tại vấn đề gì. Mặc dù nhiên, giả dụ ví dụ, giá bán trị của tôi là 0x30, bằng cách trừ đi 0x41, kết quả sẽ là -0x11:


Đây là một trong giá trị âm với không được chấp nhận là công dụng của một phép toán số dương, vì nếu như bạn tiếp tục thao tác làm việc ở hệ thập lục phân:


Kết quả có được là 0x
FFFFFFEF
và đây đang là một số dương có mức giá trị rất cao 4294967279 với không cách nào để tiến hành phép trừ 0x30 – 0x41 ra hiệu quả bằng 0x
FFFFFFEF
J.

Làm vắt nào để chúng ta biết đượccần phải xem xét dấu của kết quả khi triển khai một phép toán?

Điều này dựa vào vào lệnh nhảy, trong trườnghợp này JB là 1 lệnh khiêu vũ được sử dụngsau lúc so sánh những số nguyên không vệt (unsigned).Đối với những phép toán giữa các số nguyên tất cả dấu (signed)sẽ áp dụng lệnh JL. Ví dụ,nếu tôi so sánh số 0x
FFFFFFFF
cùng với 0x40. Vào một lệnh dancing không quantâm mang đến dấu thì ví dụ là số này bự hơn, tuy nhiên nếu nó là 1 bước nhảy địa điểm màdấu rất cần phải xem xét, lúc đó 0x
FFFFFFFF
sẽ là -1 cùng nó sẽ nhỏ dại hơn 0x40.

Vì vậy, để reviews liệu so sánh sử dụng vệt hay không, bọn họ phải cẩn thận lệnh nhảy đầm tiếp theo để lấy ra quyết định.


Nếu lệnh nhảy là ngẫu nhiên trong số trên, nó được coi như xét là Without Sign, còn nếu thuộc danh sách trong bảng dưới thì được coi như xét là With Sign.


Các bạn thấy lệnh nhảy JE (nhảy trường hợp hai toán hạng bằngnhau) đều xuất hiện thêm ở cả nhị bảng vì trong ngôi trường hợp kia dấu không thể quantrọng nữa. Nếu hai toán hạng bởi nhau, nó sẽ được kích hoạt bằng phương pháp đặt cờ ZF là 1. Họ cũng thấy rằng lệnh JG (nhảynếu bự hơn) trong bảng tổng phù hợp nhảy bao gồm dấu. Cùng một mục đích nhảy như thếlà lệnh JA, tuy thế trong bảng tổng hợpnhảy không dấu.

Trong quá trình phân tích hàng ngày chúngta sẽ thường xuyên phải quan gần kề trạng thái của những cờ, với nếu thấy một lệnh nhảyJB thì ta sẽ biết rằng đó là một trong những sosánh giữa các số dương hay các số nguyên ko dấu, và nếu toán hạng đầu tiênlà nhỏ hơn thì nó đang nhảy.

Nếu thường xuyên thực thi chương trình, các bạn sẽ thấy nó liên tục tạm dừng ở breakpoint đang đặt, từ đó sẽ thấy rằng ta đang ở một vòng lặp triển khai đọc từng kí trường đoản cú của chuỗi thương hiệu và đối chiếu với 0x41, nếu gồm một kí từ bỏ nhập vào thấp hơn thế thì crackme sẽ hiện thông báo lỗi. Tuy nhiên, vừa rồi tôi nhập đa số là các chữ chiếc (manowar) vào ô Name nên sẽ không xảy ra việc hiển thị thông báo lỗi này. Cơ mà thử dừng quá trình debug lại và triển khai debug lại tự đầu, lúc này tôi nhập tên là 22ricnar với key là 98989898:


Bây giờ, ta thấy rằng kí tự trước tiên là 0x32 tương ứng với số 2 vào chuỗi 22ricnar. Vị 0x32 nhỏ dại hơn 0x41, mũi tên màu xanh lá cây vẫn nhấpnháy, tức là lệnh nhảy sẽ được thực hiện, cờ C được kích hoạt chính vì khi rước 0x32 trừ đi 0x41 trong một phép trừ unsigned, tác dụng có được là số âm, đó là 1 trong lỗi sẽ kích hoạt cờ C.

Nếu dìm chuột yêu cầu tại cờ C, ta tất cả thể tùy chỉnh nó về 0:


Khi tùy chỉnh cấu hình xong thì đồng thời mũi thương hiệu đỏ cũng lập loè vì họ vừa mới biến đổi lại điều kiện nhảy.


Nếu bọn họ cho Run tiếp, nó đã lại giới hạn lạitại breakpoint khi soát sổ kí tự tiếp theo cũng là 2 vào chuỗi 22ricnar, với mũi tên màu xanh lá cây lá cây sẽ lại nhấp nháy một lượt nữa. Làm cho tươngtự như trên, ta đảo ngược lại cờ CF, tùy chỉnh thiết lập nó là 0. Phần nhiều lần break tiếp theo tại lệnh khiêu vũ này khớp ứng với chuỗi ricnar, các kí từ từ lúc này trở điđều lớn hơn 0x41, dođó sau phép so sánh sẽ không kích hoạt cờ CF và crackme đã rẽnhánh theo mũi tên đỏ.

Sau lúc vượt qua được quy trình kiểm tra từng kí tự vào chuỗi tên chúng ta dừng lại tại lệnh nhảy thứ hai (đã đặt breakpoint):


Tại đây, ta thấy crackme thực hiện so sánh coi EAX cùng EBX có đều bằng nhau không? chuyển qua cửa sổ Registers, quan gần cạnh thấy cực hiếm của nhị thanh ghi là không giống nhau, vì vậy mũi tên đỏ nhấp nháy để đánh tiếng sẽ rẽ nhánh vào đoạn code thông báo lỗi:


Nếu ta thay đổi giá trị của cờ ZF, crackme vẫn rẽ nhánh theo phía mũi tên màu xanh lá cây nhằm tới vùng code hiển thị Good Work. Dấn chuột bắt buộc tại cờ ZF và chọn Increment Value:


Toàn bộ quá trình thực hiện nay ở trên thuộc đạtmột mục đích tương tự như khi chúng ta thực hiện tại patch crackme này, chỉ khác ởchỗ là ta không đổi khác code của chương trình, trả toàn công việc chỉ là thayđổi trạng thái những cờ trong quá trình debug.

Ngoài ra, bao gồm một bí quyết khác là đổi khác thanh ghi EIP để nó trỏ cho tới lệnh tiếp theo được thực hiện. Ví dụ, trả sử ta vẫn dừng tại lệnh khiêu vũ tại add 0x401243, từ bây giờ lựa chọn showroom 0x40124c với nhấn chuột bắt buộc và chọn Set IP (hay nhấn phím tắt là CTRL + N):


Lúc đó, chương trình sẽ liên tục thực hiện tại lệnh từ địa chỉ 0x40124c hệt như ta đã có tác dụng khi thực hiện biến hóa các cờ.


Xin gởi lời cảm ơnchân thành tới thầy Ricardo Narvaja!

m4n0w4r

Ủng hộ tác giả