[Question] IDA không nhận diện được API của ứng dụng được dịch bằng NASM |
05/11/2011 22:53:57 (+0700) | #1 | 249552 |
|
computerline
Member
|
0 |
|
|
Joined: 30/03/2007 13:46:50
Messages: 144
Offline
|
|
Chào các bạn !
Mình gặp phải vấn đề khi Decompile một ứng dụng nhỏ viết bằng NASM bằng IDA Pro Version 6.1 là IDA không nhận ra được API
Đây là đoạn code NASM
Code:
[section .text]
proc demo7
invoke GetModuleHandleA, dword NULL
mov [hInstance], eax
invoke WinMain, dword hInstance, dword NULL, dword NULL, dword SW_SHOWNORMAL
invoke ExitProcess, dword NULL
ret
endproc
Đây là đoạn code do IDA Decompile
Code:
public start
start proc near
000 push 0
004 call near ptr 403000h ; Call Procedure --> IDA không nhận diện được GetModuleHandleA
000 mov dword_402080, eax
000 push 1
004 push 0
008 push 0
00C push offset dword_402080
010 call sub_401024 ; Call Procedure
010 push 0
014 call near ptr 403006h ; Call Procedure --> IDA không nhận diện được ExitProcess
000 retn ; Return Near from Procedure
start endp
Mình đã Decompile thử với OllyDbg thì Olly vẫn nhận ra được API
Code:
00401000 >/$ 6A 00 PUSH 0 ; /pModule = NULL
00401002 |. E8 F91F0000 CALL <JMP.&KERNEL32.GetModuleHandleA> ; \GetModuleHandleA
00401007 |. A3 80204000 MOV DWORD PTR DS:[402080],EAX ; kernel32.BaseThreadInitThunk
0040100C |. 6A 01 PUSH 1
0040100E |. 6A 00 PUSH 0
00401010 |. 6A 00 PUSH 0
00401012 |. 68 80204000 PUSH demo7.00402080
00401017 |. E8 08000000 CALL demo7.00401024
0040101C |. 6A 00 PUSH 0 ; /ExitCode = 0
0040101E \. E8 E31F0000 CALL <JMP.&KERNEL32.ExitProcess> ; \ExitProcess
00401023 . C3 RET
IDA không nhận ra hai hàm GetModuleHandleA, và ExitProcess như trên các bạn thấy !
Vậy bạn nào biết cách khắc phục xin bày giúp mình với ! hoặc có thể bày cho mình nguyên nhân cũng được !
Chân thành cảm ơn các bạn !
P/S : Source của đoạn mã mà mình Test ở đây http://www.mediafire.com/?8hviovny3e06e7p |
|
Không có nghề gì trong xã hội là thấp hèn cả - chỉ có nhân cách mới phân biệt thấp cao |
|
|
|
[Question] IDA không nhận diện được API của ứng dụng được dịch bằng NASM |
05/11/2011 23:25:08 (+0700) | #2 | 249554 |
|
secmask
Elite Member
|
0 |
|
|
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
|
|
Load chuơng trình trên vào IDA + bỏ lựa chọn "Make imports segment" là đâu vào đó, nguyên nhân bạn thử tìm hiểu xem |
|
|
|
|
[Question] IDA không nhận diện được API của ứng dụng được dịch bằng NASM |
05/11/2011 23:27:28 (+0700) | #3 | 249555 |
|
computerline
Member
|
0 |
|
|
Joined: 30/03/2007 13:46:50
Messages: 144
Offline
|
|
@secmask: Cảm ơn bạn nhiều !
Theo mình thì nguyên nhân do phần .idata của tập tin được dịch bằng NASM nó được mã hoá hay có cấu trúc đặc biệt mà IDA không hiểu được khi tiến hành phân tích Section này. Không biết có đúng không ! Nhưng rất cảm ơn bạn đã giúp đỡ ! |
|
Không có nghề gì trong xã hội là thấp hèn cả - chỉ có nhân cách mới phân biệt thấp cao |
|
|
|
[Question] IDA không nhận diện được API của ứng dụng được dịch bằng NASM |
06/11/2011 19:43:19 (+0700) | #4 | 249569 |
|
secmask
Elite Member
|
0 |
|
|
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
|
|
computerline wrote:
@secmask: Cảm ơn bạn nhiều !
Theo mình thì nguyên nhân do phần .idata của tập tin được dịch bằng NASM nó được mã hoá hay có cấu trúc đặc biệt mà IDA không hiểu được khi tiến hành phân tích Section này. Không biết có đúng không ! Nhưng rất cảm ơn bạn đã giúp đỡ !
đúng rồi đó bạn, cái khác thường là NASM sinh ra section idata có chứa cả code. |
|
|
|
|
[Question] IDA không nhận diện được API của ứng dụng được dịch bằng NASM |
15/11/2011 16:49:50 (+0700) | #5 | 249967 |
|
chiro8x
Member
|
0 |
|
|
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
|
|
Tớ có học TASM và TASM32 rồi nhưng chưa dùng qua cái này. Sao mình thấy trong này viết call các API của windows nhỉ ? Nó có phải là phiên bản dành cho CPU 32bit không hay trình biên dịch này hổ trợ cả 16bit và 32bit. Đang lên trang chủ tìm thông tin nhưng chưa thấy.
Code:
The Netwide Assembler, NASM, is an 80x86 and x86-64 assembler designed for portability and modularity. It supports a range of object file formats, including Linux and *BSD a.out, ELF, COFF, Mach-O, Microsoft 16-bit OBJ, Win32 and Win64. It will also output plain binary files. Its syntax is designed to be simple and easy to understand, similar to Intel's but less complex. It supports all currently known x86 architectural extensions, and has strong support for macros.
Thấy rồi nhưng phiền chủ topic nói thêm chút được không ?. |
|
while(1){} |
|
|
|
[Question] IDA không nhận diện được API của ứng dụng được dịch bằng NASM |
15/11/2011 20:09:13 (+0700) | #6 | 249975 |
|
computerline
Member
|
0 |
|
|
Joined: 30/03/2007 13:46:50
Messages: 144
Offline
|
|
NASM là trình hợp dịch tương tự như các trình TASM, MASM, và FASM. Mình dùng NASM vì cú pháp lệnh của nó đơn giản hơn mấy trình hợp dịch khác, nó hỗ trợ cho cả 2 kiến trúc 16bit và 32bit, đồng thời có thể sinh mã nhị phân trực tiếp và cái hay là nó có sẵn trên Linux. Để viết các ứng dụng WIN32 sử dụng NASM, bạn có thể tham khảo gói NASMX và các ví dụ trong gói này tại địa chỉ http://www.asmcommunity.net/projects/nasmx. Tài liệu lập trình NASM cũng có nhiều lắm !
Mỗi trình hợp dịch đều có cái hay riêng, tuỳ vào nhu cầu cụ thể mà chọn trình hợp dịch nào phù hợp thôi !
|
|
Không có nghề gì trong xã hội là thấp hèn cả - chỉ có nhân cách mới phân biệt thấp cao |
|
|
|
[Question] IDA không nhận diện được API của ứng dụng được dịch bằng NASM |
16/11/2011 16:51:03 (+0700) | #7 | 250000 |
|
chiro8x
Member
|
0 |
|
|
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
|
|
computerline wrote:
NASM là trình hợp dịch tương tự như các trình TASM, MASM, và FASM. Mình dùng NASM vì cú pháp lệnh của nó đơn giản hơn mấy trình hợp dịch khác, nó hỗ trợ cho cả 2 kiến trúc 16bit và 32bit, đồng thời có thể sinh mã nhị phân trực tiếp và cái hay là nó có sẵn trên Linux. Để viết các ứng dụng WIN32 sử dụng NASM, bạn có thể tham khảo gói NASMX và các ví dụ trong gói này tại địa chỉ http://www.asmcommunity.net/projects/nasmx. Tài liệu lập trình NASM cũng có nhiều lắm !
Mỗi trình hợp dịch đều có cái hay riêng, tuỳ vào nhu cầu cụ thể mà chọn trình hợp dịch nào phù hợp thôi !
Cậu PR nghe hấp dẫn quá nhỉ không biết quá trình biên dịch có cho ra nhiều mã thừa không . Tớ dùng qua MASM32 nhưng kết quả sau khi biên dịch thì dung lượng lớn hơn so với biên dịch bằng TASM32 rất nhiều, viết bằng MASM32 nó không cho mình định nghĩa data trong .CODE >"<. Cái này chắc phải bỏ thời gian mà mày mò thôi, có nhiều cái mới lạ quá ~.~! Tớ chả tháy cái import32.lib quen thuộc đâu cả lol. Lạc hậu quá haizz. |
|
while(1){} |
|
|
|
[Question] IDA không nhận diện được API của ứng dụng được dịch bằng NASM |
16/11/2011 21:37:00 (+0700) | #8 | 250005 |
|
bolzano_1989
Journalist
|
0 |
|
|
Joined: 30/01/2007 12:49:15
Messages: 1406
Offline
|
|
chiro8x wrote:
computerline wrote:
NASM là trình hợp dịch tương tự như các trình TASM, MASM, và FASM. Mình dùng NASM vì cú pháp lệnh của nó đơn giản hơn mấy trình hợp dịch khác, nó hỗ trợ cho cả 2 kiến trúc 16bit và 32bit, đồng thời có thể sinh mã nhị phân trực tiếp và cái hay là nó có sẵn trên Linux. Để viết các ứng dụng WIN32 sử dụng NASM, bạn có thể tham khảo gói NASMX và các ví dụ trong gói này tại địa chỉ http://www.asmcommunity.net/projects/nasmx. Tài liệu lập trình NASM cũng có nhiều lắm !
Mỗi trình hợp dịch đều có cái hay riêng, tuỳ vào nhu cầu cụ thể mà chọn trình hợp dịch nào phù hợp thôi !
Cậu PR nghe hấp dẫn quá nhỉ không biết quá trình biên dịch có cho ra nhiều mã thừa không . Tớ dùng qua MASM32 nhưng kết quả sau khi biên dịch thì dung lượng lớn hơn so với biên dịch bằng TASM32 rất nhiều, viết bằng MASM32 nó không cho mình định nghĩa data trong .CODE >"<. Cái này chắc phải bỏ thời gian mà mày mò thôi, có nhiều cái mới lạ quá ~.~! Tớ chả tháy cái import32.lib quen thuộc đâu cả lol. Lạc hậu quá haizz.
Bạn hiểu lơ mơ quá, MASM với TASM là trình biên dịch hồi nào vậy?
MASM, TASM đều là trình hợp dịch (trình dịch hợp ngữ). |
|
Kiểm tra các file bạn nghi ngờ có virus:
http://goo.gl/m3Fb6C
http://goo.gl/EqaZt
http://goo.gl/gEF8e
Nhận mẫu virus qua FB: http://goo.gl/70Xo23
HVA Malware Response Team: kiemtravirus@gmail.com
Trợ giúp diệt virus: http://goo.gl/2bqxY |
|
|
|
[Question] IDA không nhận diện được API của ứng dụng được dịch bằng NASM |
16/11/2011 22:14:56 (+0700) | #9 | 250007 |
|
chiro8x
Member
|
0 |
|
|
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
|
|
bolzano_1989 wrote:
chiro8x wrote:
computerline wrote:
NASM là trình hợp dịch tương tự như các trình TASM, MASM, và FASM. Mình dùng NASM vì cú pháp lệnh của nó đơn giản hơn mấy trình hợp dịch khác, nó hỗ trợ cho cả 2 kiến trúc 16bit và 32bit, đồng thời có thể sinh mã nhị phân trực tiếp và cái hay là nó có sẵn trên Linux. Để viết các ứng dụng WIN32 sử dụng NASM, bạn có thể tham khảo gói NASMX và các ví dụ trong gói này tại địa chỉ http://www.asmcommunity.net/projects/nasmx. Tài liệu lập trình NASM cũng có nhiều lắm !
Mỗi trình hợp dịch đều có cái hay riêng, tuỳ vào nhu cầu cụ thể mà chọn trình hợp dịch nào phù hợp thôi !
Cậu PR nghe hấp dẫn quá nhỉ không biết quá trình biên dịch có cho ra nhiều mã thừa không . Tớ dùng qua MASM32 nhưng kết quả sau khi biên dịch thì dung lượng lớn hơn so với biên dịch bằng TASM32 rất nhiều, viết bằng MASM32 nó không cho mình định nghĩa data trong .CODE >"<. Cái này chắc phải bỏ thời gian mà mày mò thôi, có nhiều cái mới lạ quá ~.~! Tớ chả tháy cái import32.lib quen thuộc đâu cả lol. Lạc hậu quá haizz.
Bạn hiểu lơ mơ quá, MASM với TASM là trình biên dịch hồi nào vậy?
MASM, TASM đều là trình hợp dịch (trình dịch hợp ngữ).
wikipedia wrote:
A compiler is a computer program (or set of programs) that transforms source code written in a programming language (the source language) into another computer language (the target language, often having a binary form known as object code). The most common reason for wanting to transform source code is to create an executable program.
Assembly is a programming language, is that right ?
http://en.wikipedia.org/wiki/Compiler
wikipedia wrote:
An assembly language is a low-level programming language for computers, microprocessors, microcontrollers, and other programmable devices. It implements a symbolic representation of the machine codes and other constants needed to program a given CPU architecture. This representation is usually defined by the hardware manufacturer, and is based on mnemonics that symbolize processing steps (instructions), processor registers, memory locations, and other language features. An assembly language is thus specific to a certain physical (or virtual) computer architecture. This is in contrast to most high-level programming languages, which, ideally, are portable.
http://en.wikipedia.org/wiki/Assembly_language
Mình chả hiểu cái cụm từ hợp dịch bạn móc đâu ra nhưng mình khuyên nên đọc sách tiếng anh.
Hợp dịch phải chăng ám chỉ Assembler := trình biên dịch hợp ngữ. |
|
while(1){} |
|
|
|
[Question] IDA không nhận diện được API của ứng dụng được dịch bằng NASM |
17/11/2011 00:29:32 (+0700) | #10 | 250011 |
mrro
Administrator
|
Joined: 27/12/2001 05:07:00
Messages: 745
Offline
|
|
@chiro8x: về mặt thuật ngữ thì bạn bolzano_1989 nói đúng đó. trình biên dịch (compiler) là để chuyển từ một ngôn ngữ lập trình này sang một ngôn ngữ lập trình khác. ví dụ như gcc là chuyển từ C/C++ sang hợp ngữ (Assembly). trình hợp dịch (assembler) là chuyển từ hợp ngữ sang mã máy. hai công cụ này làm hai việc rất khác nhau, nên gọi chung là trình biên dịch là sai. mà bạn có để ý tên đầy đủ của NASM là Netwide Assembler?
để hiểu rõ thêm, bạn có thể tìm hiểu khi bạn gõ lệnh sau đây thì chuyện gì xảy ra:
Code:
-m
|
|
http://tinsang.net
TetCon 2013 http://tetcon.org
Làm an toàn thông tin thì học gì?/hvaonline/posts/list/42133.html |
|
|