飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 7358|回复: 8

[转贴] 失业的娱乐-IDA逆向工程入门(二)-汇编程序(1)

[复制链接]

该用户从未签到

发表于 2007-3-7 10:07:18 | 显示全部楼层 |阅读模式
作者:layper
【文章标题】: 失业的娱乐-IDA逆向工程入门(二)-汇编程序(1)
【文章作者】: layper
【作者邮箱】: [email protected]
【作者主页】: http://blog.csdn.net/layper
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】


  这个是第二篇,入门就要从最简单的开始!!!!!!!!  
  为什么选汇编程序,因为在IDA逆向出来的就是汇编语言.所以选这个是最好入门的.在这之前你先准备好几样工具,IDA,masm32汇编工具包并安装好,
  在radasm设置好你的路径.
  
  (一)最简单的win32汇编程序源码
  hellow.asm
  
  .386
  .model flat,stdcall
  option casemap:none
  include WINDOWS.INC
  include user32.inc
  include kernel32.inc
  includelib user32.lib
  includelib kernel32.lib
  .data
  sztitle db "你好",0
  sztext db "你好!祝你有个好的开始!!!",0
  .code
  start:
  invoke MessageBox,NULL,offset sztext,offset sztitle,MB_OK
  invoke ExitProcess,NULL
  end start
  
  
  radasm默认编译.无资源段
  
  
  
  (二)IDA自动识别的反汇编代码(未优化直接保存)
  
  
  
  ;
  ; 赏屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯?
; ?This file is generated by The Interactive Disassembler (IDA)            ?
; ?Copyright (c) 2006 by DataRescue sa/nv,        <[email protected]>            ?
; ?Licensed to: Paul Ashton - Blue Lane Technologies (1-user Advanced 03/2006)        ?s
  ; 韧屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯?
;
  ; Input        MD5   :        10721E858F8E4DA3413D6FBFAE63E7B3
  
  ; File Name   :        D:\lyp\hellow\hellow.exe
  ; Format      :        Portable executable for        80386 (PE)
  ; Imagebase   :        400000
  ; Section 1. (virtual address 00001000)
  ; Virtual size                        : 00000026 (         38.)
  ; Section size in file                : 00000200 (        512.)
  ; Offset to raw        data for section: 00000400
  ; Flags        60000020: Text Executable Readable
  ; Alignment        : default
  
                  .686p
                  .mmx
                  .model flat
  
  ; 屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯?

  ; Segment type:        Pure code
  ; Segment permissions: Read/Execute
  _text                segment        para public 'CODE' use32
                  assume cs:_text
                  ;org 401000h
                  assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
  
  ; *************** S U B        R O U T        I N E ***************************************
  
  
                  public start
  start                proc near
                  push        0                ; uType
                  push        offset Caption        ; "你好"
                  push        offset Text        ; "你好!祝你有个好的开始!!!"
                  push        0                ; hWnd
                  call        MessageBoxA
  
                  push        0                ; uExitCode
                  call        ExitProcess
  
  start                endp
  
  ; [00000006 BYTES: COLLAPSED FUNCTION MessageBoxA. PRESS KEYPAD        "+" TO EXPAND]
  ; [00000006 BYTES: COLLAPSED FUNCTION ExitProcess. PRESS KEYPAD        "+" TO EXPAND]
                  align 200h
  _text                ends
  
  ; Section 2. (virtual address 00002000)
  ; Virtual size                        : 00000092 (        146.)
  ; Section size in file                : 00000200 (        512.)
  ; Offset to raw        data for section: 00000600
  ; Flags        40000040: Data Readable
  ; Alignment        : default
  ;
  ; Imports from kernel32.dll
  ;
  ; 屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯?

  ; Segment type:        Externs
  ; _idata
  ; void __stdcall ExitProcess(UINT uExitCode)
                  extrn __imp_ExitProcess:dword ;        DATA XREF: ExitProcessr
  
  ;
  ; Imports from user32.dll
  ;
  ; int __stdcall        MessageBoxA(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType)
                  extrn __imp_MessageBoxA:dword ;        DATA XREF: MessageBoxAr
  
  
  ; 屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯?

  ; Segment type:        Pure data
  ; Segment permissions: Read
  _rdata                segment        para public 'DATA' use32
                  assume cs:_rdata
                  ;org 402010h
                  db  54h        ; T
                  db  20h
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db  6Ah        ; j
                  db  20h
                  db    0
                  db    0
                  db    8
                  db  20h
                  db    0
                  db    0
                  db  4Ch        ; L
                  db  20h
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db  84h        ; ?
                db  20h
                  db    0
                  db    0
                  db    0
                  db  20h
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db  76h        ; v
                  db  20h
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db  5Ch        ; \
                  db  20h
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db  9Dh        ; ?
                db    1
                  db  4Dh        ; M
                  db  65h        ; e
                  db  73h        ; s
                  db  73h        ; s
                  db  61h        ; a
                  db  67h        ; g
                  db  65h        ; e
                  db  42h        ; B
                  db  6Fh        ; o
                  db  78h        ; x
                  db  41h        ; A
                  db    0
                  db  75h        ; u
                  db  73h        ; s
                  db  65h        ; e
                  db  72h        ; r
                  db  33h        ; 3
                  db  32h        ; 2
                  db  2Eh        ; .
                  db  64h        ; d
                  db  6Ch        ; l
                  db  6Ch        ; l
                  db    0
                  db    0
                  db  80h        ;
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-3-7 10:10:50 | 显示全部楼层
db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
                  db    0
  _rdata                ends
  
  ; Section 3. (virtual address 00003000)
  ; Virtual size                        : 0000001E (         30.)
  ; Section size in file                : 00000200 (        512.)
  ; Offset to raw        data for section: 00000800
  ; Flags        C0000040: Data Readable        Writable
  ; Alignment        : default
  ; 屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯?

  ; Segment type:        Pure data
  ; Segment permissions: Read/Write
  _data                segment        para public 'DATA' use32
                  assume cs:_data
                  ;org 403000h
  ; char Caption[]
  Caption                db '你好',0             ; DATA XREF: start+2o
  ; char Text[]
  Text                db '你好!祝你有个好的开始!!!',0 ; DATA XREF: start+7o
                  align 200h
  _data                ends
  
  
                  end start
  用radasm编译成功,不用修改!!!
  
  (三)比对文件
  
  (1)模式定义
  相同度:
  
  .386                                                .686p                      ;不同
  无                                                  .mmx
  .model flat,stdcall                                 .model flat        
  option casemap:none                                 无                         ;不同
  
  我的IDA默认的为686p模式,model语句无语言模式,无option语句.
  
  (2)inc文件,lib文件去向
  
  源文件中的
  include WINDOWS.INC
  include user32.inc
  include kernel32.inc
  includelib user32.lib
  includelib kernel32.lib
  消失在代码中,要寻找回他们!!
  这几个语句其实就是连接系统的dll文件的,在反汇编代码中寻找user32.dll,kernel32.dll,找到这里
  ; Imports from kernel32.dll
  ;
  ; 屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯?
  
  ; Segment type:        Externs
  ; _idata
  ; void __stdcall ExitProcess(UINT uExitCode)
                  extrn __imp_ExitProcess:dword ;        DATA XREF: ExitProcessr
  
  ;
  ; Imports from user32.dll
  ;
  ; int __stdcall        MessageBoxA(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType)
                  extrn __imp_MessageBoxA:dword ;        DATA XREF: MessageBoxAr
  
  注释很明白了,输入表有两个dll在_idata段,include语句的在_idata段找寻.
  
  (3)段定义的变化
  源代码中段定义是这样
  .段名
  而反汇编中的段定义
  段名                segment        para public 'DATA' use32
                  assume cs:_data
  段名                ends
  传统的dos汇编写法.
  
  (4)段的增减
  我们通过比对,发现段的数量跟我们原本的不一致
  原本我们只有两个段
  .data和.code段,而反汇编后变成
  .text和.idata和.rdata和.data段
  经过仔细辨认你就可以发现
  反汇编的text段就是源代码中的.code段,data段是代码段,.idata和.rdata是编译器生成的,而idata是寻找include语句的地方,
  .idata基本没什么用处,可以删掉.
  
  (5)数据段
  通过比对发现基本上一致无什么增加,增加了一个                align 200h
  删掉即可.
  
  (6)代码段变化
  入口函数变化
                  public start
  start                proc near
                  push        0                ; uType
                  push        offset Caption        ; "你好"
                  push        offset Text        ; "你好!祝你有个好的开始!!!"
                  push        0                ; hWnd
                  call        MessageBoxA
  
                  push        0                ; uExitCode
                  call        ExitProcess
  
  start                endp
  
  。。。。。。
  
  。。。。。。。
  
                  end start
  
  注意end start放在了所有段后面
  
  到这里我们大体上看完这个程序反汇编的大体轮廓。
  
--------------------------------------------------------------------------------
【经验总结】
  (1)模式定义少了语言模式和opention语句,我们要看情况是否加回上去。
  (2)include语句寻找_idata中的dll名,得到常用包含库文件.
  (3).rdate段不用看,可以删掉
  (4)入口开始处寻找start.
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于UnPacKcN论坛, 转载请注明作者并保持文章的完整, 谢谢!
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-5-3 19:45
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    发表于 2007-3-27 12:34:41 | 显示全部楼层
    ??????????????

    是楼主写的么?

    如果是

    我是很佩服哦!!!/:06
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-2-23 16:41
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2007-4-2 16:26:22 | 显示全部楼层
    不错,学习啊.
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-9-17 14:03:47 | 显示全部楼层
    估计是汇编语言,看不懂。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-9-22 17:34:36 | 显示全部楼层
    学习了,谢谢楼主,期待下一篇!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-9-28 11:12:43 | 显示全部楼层
    估计是汇编语言,看不懂
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-3-8 08:44:35 | 显示全部楼层
    这一块是楼主写的,后面的是复制粘贴的.

      .386
      .model flat,stdcall
      option casemap:none
      include WINDOWS.INC
      include user32.inc
      include kernel32.inc
      includelib user32.lib
      includelib kernel32.lib
      .data
      sztitle db "你好",0
      sztext db "你好!祝你有个好的开始!!!",0
      .code
      start:
      invoke MessageBox,NULL,offset sztext,offset sztitle,MB_OK
      invoke ExitProcess,NULL
      end start
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-3-8 10:43:41 | 显示全部楼层
    谢谢分享。。。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表