banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thủ thuật reverse engineering IDA không nhận diện được API của ứng dụng được dịch bằng NASM  XML
  [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
[Avatar]
computerline
Member

[Minus]    0    [Plus]
Joined: 30/03/2007 13:46:50
Messages: 144
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!]
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
[Up] [Print Copy]
  [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
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
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 smilie
[Up] [Print Copy]
  [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
[Avatar]
computerline
Member

[Minus]    0    [Plus]
Joined: 30/03/2007 13:46:50
Messages: 144
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!]
@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
[Up] [Print Copy]
  [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
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]

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.
[Up] [Print Copy]
  [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
[Avatar]
chiro8x
Member

[Minus]    0    [Plus]
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
[Profile] [PM] [Yahoo!]
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){}
[Up] [Print Copy]
  [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
[Avatar]
computerline
Member

[Minus]    0    [Plus]
Joined: 30/03/2007 13:46:50
Messages: 144
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!]
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
[Up] [Print Copy]
  [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
[Avatar]
chiro8x
Member

[Minus]    0    [Plus]
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
[Profile] [PM] [Yahoo!]

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 smilie. 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){}
[Up] [Print Copy]
  [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
[Avatar]
bolzano_1989
Journalist

[Minus]    0    [Plus]
Joined: 30/01/2007 12:49:15
Messages: 1406
Offline
[Profile] [PM]

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 smilie. 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
[Up] [Print Copy]
  [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
[Avatar]
chiro8x
Member

[Minus]    0    [Plus]
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
[Profile] [PM] [Yahoo!]

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 smilie. 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){}
[Up] [Print Copy]
  [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
[Profile] [PM]
@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



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
[Up] [Print Copy]
  [Question]   IDA không nhận diện được API của ứng dụng được dịch bằng NASM 17/11/2011 09:22:06 (+0700) | #11 | 250017
[Avatar]
chiro8x
Member

[Minus]    0    [Plus]
Joined: 26/09/2010 00:38:37
Messages: 661
Location: /home/chiro8x
Offline
[Profile] [PM] [Yahoo!]

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.
while(1){}
[Up] [Print Copy]
  [Question]   IDA không nhận diện được API của ứng dụng được dịch bằng NASM 17/11/2011 11:04:34 (+0700) | #12 | 250024
[Avatar]
computerline
Member

[Minus]    0    [Plus]
Joined: 30/03/2007 13:46:50
Messages: 144
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!]
Về định nghĩa CompilerAssembler 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ứ !
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
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|