<![CDATA[Latest posts for the topic "IDA không nhận diện được API của ứng dụng được dịch bằng NASM"]]> /hvaonline/posts/list/36.html JForum - http://www.jforum.net IDA không nhận diện được API của ứng dụng được dịch bằng 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]]>
/hvaonline/posts/list/40499.html#249552 /hvaonline/posts/list/40499.html#249552 GMT
IDA không nhận diện được API của ứng dụng được dịch bằng NASM /hvaonline/posts/list/40499.html#249554 /hvaonline/posts/list/40499.html#249554 GMT IDA không nhận diện được API của ứng dụng được dịch bằng NASM /hvaonline/posts/list/40499.html#249555 /hvaonline/posts/list/40499.html#249555 GMT IDA không nhận diện được API của ứng dụng được dịch bằng NASM

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.]]>
/hvaonline/posts/list/40499.html#249569 /hvaonline/posts/list/40499.html#249569 GMT
IDA không nhận diện được API của ứng dụng được dịch bằng NASM 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 ?.]]>
/hvaonline/posts/list/40499.html#249967 /hvaonline/posts/list/40499.html#249967 GMT
IDA không nhận diện được API của ứng dụng được dịch bằng NASM 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 ! ]]> /hvaonline/posts/list/40499.html#249975 /hvaonline/posts/list/40499.html#249975 GMT IDA không nhận diện được API của ứng dụng được dịch bằng NASM

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. ]]>
/hvaonline/posts/list/40499.html#250000 /hvaonline/posts/list/40499.html#250000 GMT
IDA không nhận diện được API của ứng dụng được dịch bằng NASM

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ữ).]]>
/hvaonline/posts/list/40499.html#250005 /hvaonline/posts/list/40499.html#250005 GMT
IDA không nhận diện được API của ứng dụng được dịch bằng NASM

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ữ.]]>
/hvaonline/posts/list/40499.html#250007 /hvaonline/posts/list/40499.html#250007 GMT
IDA không nhận diện được API của ứng dụng được dịch bằng NASM 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:
$ gcc -o test test.c
-m ]]>
/hvaonline/posts/list/40499.html#250011 /hvaonline/posts/list/40499.html#250011 GMT
IDA không nhận diện được API của ứng dụng được dịch bằng NASM

mrro wrote:
@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:
$ gcc -o test test.c
-m  
Theo định nghĩa về compiler em thấy mình không sai. Nếu em nghĩ Assembly là ngôn ngử. Quá trình biên dịch còn để dùng phân biệt với quá trình thông dịch nữa. Và thực là sau khi viết 1 file asm nó sẽ trải qua quá trình biên dịch chứ không phải là quá trình thông dịch.]]>
/hvaonline/posts/list/40499.html#250017 /hvaonline/posts/list/40499.html#250017 GMT
IDA không nhận diện được API của ứng dụng được dịch bằng NASM Compiler và Assembler thì trên wiki có định nghĩa rõ ràng mà @chiro8x http://en.wikipedia.org/wiki/Compiler
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. The name "compiler" is primarily used for programs that translate source code from a high-level programming language to a lower level language (e.g., assembly language or machine code)  
http://en.wikipedia.org/wiki/Assembler
Assembler for an assembly language, a computer program to translate between lower-level representations of computer programs. An assembler converts basic computer instructions into a pattern of bits which can be easily understood by the computer and the processor can use it to perform its basic operations.  
Trong quá trình dịch một chương trình thì nó phân biệt rất rõ giữa quá trình biên dịch và hợp dịch:
Hiện nay thì một số trình Compiler nó đã kết hợp cả hai quá trình này lại và làm tự động cho mình, nên cũng ít ai nhận ra sự khác biệt này. Nhưng nếu bạn để ý kỹ, có một số trình Compiler có thêm tuỳ chọn để sinh ra mã hợp ngữ trung gian đó chứ ! ]]>
/hvaonline/posts/list/40499.html#250024 /hvaonline/posts/list/40499.html#250024 GMT