反汇编技术在代码测试中的应用

上一篇 / 下一篇  2012-05-22 09:06:58 / 个人分类:杂谈

引言51Testing软件测试网c!uTCKbdf#k8~

  随着计算机技术的不断发展和应用领域的不断扩大,人们对计算机软件的安全性的要求越来越高。而作为保证软件质量最有效的测试技术,已经越来越受到人们的重视。反汇编技术可以帮助软件测试人员更轻松的理解二进制代码的行为,从而测试软件的正确性和可靠性。51Testing软件测试网w%q;Y0w)]$w&kL

51Testing软件测试网1\FlpORYq

  文中主要讨论了反汇编技术,及其在二进制代码分析和测试中的作用。通过反汇编技术,可以在不改变代码含义的前提下,把难懂的二进制代码转化为更清晰易懂的汇编代码。可以帮助测试人员理解目标代码,提高测试效率。51Testing软件测试网h2l8L%i S4Y!it1g

%b%iJ5M uJ7C?'eu0  反汇编技术简介51Testing软件测试网0\5vf@3Z%t z

51Testing软件测试网SM[7C4x1p$z

  反汇编:把目标代码转为汇编代码的过程,也可说是把机器语言转为汇编语言代码,低级转高级的意思,常用于软件破解。51Testing软件测试网7t:f;|x'foF Ii+L

51Testing软件测试网(I1B.Bm$tR m6W A

   从对目标代码的执行角度来看,反汇编分为静态反汇编和动态反汇编,前者是指将二进制目标文件根据对应的指令系统转换为相应的可读的汇编语句,但是并不执 行这段程序;后者主要是指要跟踪执行目标文件,具体反映出程序的运行情况。静态反汇编的优点之一是能够一次对整个文件进行处理,而动态反汇编只能处理程序 中被执行到的部分;另一个优点是静态反汇编的时间与文件的长度成正比,而动态反汇编的时间与被执行的指令数成正比。通常认为前者的时间比后者少,静态反汇 编的效率更高。

] e4c M3s051Testing软件测试网,lpA^T

  本文主要探讨静态反汇编在软件测试中的使用。

t!n4y JE0

|/TN$Q~0  二进制代码简介

|%G i4f;@:DA,n/w0

7AD$X]2fpJ7\N0  由于输入的目标代码是hex文件,所以,我们重点讨论hex文件的格式。51Testing软件测试网2GjG"Y:rLm

s&S$hml V.]0   Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量,Intel HEX文件经常被用于将程序或数据传输存储到ROM.EPROM,大多数编程器和模拟器使用Intel HEX文件。

!b$z,fq^DN/{G+@051Testing软件测试网g1R4D#~Z(A

  一个Intel HEX文件可以包含任意多的十六进制记录,每条记录有五个域,下面是一个记录的格式.[10]

H }9Mw+c cw0

8hdf'N Y0  :llaaaatt[dd...]cc

h2c*I`:svB6Lr0

Ar["k9[!J4Se8j0  每一组字母是独立的一域,每一个字母是一个十六进制数字,每一域至少由两个十六进制数字组成,下面是字节的描述。51Testing软件测试网!H_}3^ @

51Testing软件测试网Pugb'GC NL

  :冒号是每一条Intel HEX记录的开始

SC.P;V-]%\!vil`051Testing软件测试网8E biP"}y,og!jY

  ll是这条记录的长度域,他表示数据(dd)的字节数目。

#q6P'|D#o:|jxA _0

;h4Nv agy.Ec0z0  aaaa是地址域,他表示数据的起始地址51Testing软件测试网+Oh7f)h.`

51Testing软件测试网@n-T p1L$h

  <如果是数据记录,这表示将要烧录的这条记录中的数据在EPROM中的偏移地址,对于不支持扩展段地址和扩展线性地址的,如89C51,这就是此条记录的起始地址>51Testing软件测试网&[f'[X;w^m!{T

51Testing软件测试网 NHLH ~

  tt这个域表示这条HEX记录的类型,他有可能是下面这几种类型

g0W^"@ t~'^j/rq0

M{S[aAa W[0  00 ----数据记录
f"V5W"t6RB|0  01 ----文件结束记录
4?"t%N-?B vG m0  02 ----扩展段地址记录
~&Y:lt)f.K5J0  04 ----扩展线性地址记录
51Testing软件测试网!e)v loN)A X

51Testing软件测试网1w:c8du)BKPfr8e[

  dd是数据域,表示一个字节的数据,一个记录可能有多个数据字节,字节数目可以查看ll域的说明

.m*tA1T(Mo+q-g0

7?3a"~1rl*Ph0  cc是效验和域,表示记录的效验和,计算方法是将本条记录冒号开始的所有字母对51Testing软件测试网x odPu(D:p.D

^)X#z[&Dh0  <不包括本效验字和冒号>所表示的十六进制数字

t9A ]S6ILkIm0

m*DU/Es0  <一对字母表示一个十六进制数,这样的一个十六进制数为一个字节>

Z,H\ h$s(Q051Testing软件测试网KE$i!XKOj z-v

  都加起来然后模除256得到的余数最后求出余数的补码即是本效验字节cc.51Testing软件测试网^q(v9lk9JP(@

mB(@+L'bP N?+D0  <例如::0300000002005E9D51Testing软件测试网%_C`A8kcq6Js{*t

51Testing软件测试网 PH+K$|Q Az

  cc=0x01+NOT((0x03+0x00+0x00+0x00+0x02+0x00+0x5E)%0x100)=0x01+0x9C=0x9D51Testing软件测试网4})Z-tL2R-d|J x&x

51Testing软件测试网~mp[P,]$dOp

反汇编技术在hex代码分析的应用

t(df+IU8k0

#N q;eOd6J1O0  反汇编器的工作流程可以分为文件格式分析模块,文件中的代码装载模块,代码和数据分离、反汇编模块,获得目标代码的汇编级表示形式。51Testing软件测试网'|3c)P5h9C

51Testing软件测试网c(y,Vpz&M}@

  文件格式分析模块完成输入的二进制文件的分析,识别其文件类型,看看它是不是hex文件。代码装载模块实现对hex文件中的数据进行分析,将数 据转换成一种更便于操作的形式存放到设计好的数据结构中,以便下一步的反汇编,代码和数据分离操作。代码和数据分离、反汇编模块通过设计一个核心算法对整 个程序进行扫描凡是扫描到的都是代码,将其反汇编成对应的汇编指令,没有扫描到的则是数据转换成ASCAII码输出。

+fx\*w7v051Testing软件测试网N7Bq&Zn0}6u

  为了说明反汇编技术可以有效帮助软件分析和测试人员进行软件测试,我们可以通过一段二进制代码的分析来体现。51Testing软件测试网(pAtKR Fl e

l:i.z y L3}H0  下面是一段用c语言书写的高级代码程序经过PIC12C508的编译器编译后得到的hex文件:

+n#A%F*emd V,m ^.x051Testing软件测试网2L7gYko%hI$q

  :100000002500880A1E023E00BE022200480865083C
{Q'Qg7tY5W&g0  :100010006C086C086F08200877086F0872086C0875
:x%Ly"rFH0  :1000200064082E080008250864080A0800088D0ADC
#K*S,wMp'i,e;G0  :10003000930AA00AE30A700B9F0BAE0BB40BCD0B1751Testing软件测试网[O Peh;m'hm
  :100040006D006B006C0009020A0143072A0A67007151Testing软件测试网w1|7NWwI:`J
  :10005000680000081F0C2D010304AD0269036A0348
^)W3W` Idg(h0  :1000600003072D0A2A0329030A02880043073A0AD4
gE$T5w6|_0  :10007000090287000307420A0902A7000A020307D051Testing软件测试网WeE N;?WF Gu_{
  :100080008A02A8006B036C03ED02AD06320AED078D
_i]P|!Oh#FQ0  :100090004E0A6B02AB024306EC006C020B0229001551Testing软件测试网 y.jm.HW
  :1000A0000C022A00CD0700086702A7024306E800F951Testing软件测试网.mD?|p+QQH'E)g.X
  :1000B000680200086B006C0003042A03290303078D
A-X EKfO k_0  :1000C000680A0702EB01080203068802EC0103043851Testing软件测试网j\V4Z|2w r
  :1000D0006703680309020A01430600085C0A000C7251Testing软件测试网2cb(?*Q^'v-Ib
  :0200E000CC0A4851Testing软件测试网 oFBx3G)DlX
  :10010C001D02030A060C3100170C30006F0A050C9751Testing软件测试网!i!^1J;T6X'Q:@)e
  :10011C0031007200180C3000A10A07022E000802F051Testing软件测试网gMF+f+Rv6kY
  :10012C002F00130C31000E0232000F023300190C99
r8b3o9^R$J'z!vp0  :10013C0030006F0A000A7500760073007400B30A7151Testing软件测试网oxq|v,C%l
  ……51Testing软件测试网u@!kwPe?"Z`
  :1003EC00FA0B180224006000160227001002030A00
Z F"efI[1b4]&_#G0  :00000001FF

"H,U{&B ?.R v!SV0

(FbK jKl"w C+A)z;P0  对该hex文件进行反汇编后的部分结果如图:

o%DjRo5H0

:N7U6C:] z['[0

  图中的“Location”列显示指令的物理地址,“Data”列显示指令的二进制内容,“AsmInstruction”列显示指令对应的汇编指令的形式。可以看到,原本生涩难懂的二进制指令经过反汇编器的处理后,得到等价但更易理解的汇编指令序列。

MT5i ghS0

  总结51Testing软件测试网I%o8WK'b(X

  通过介绍软件测试过程中反汇编技术的使用,说明了在软件测试过程中反汇编技术的可行性、有效性。

n-f#@{(U%lw4s'~0

TAG:

 

评分:0

我来说两句

Open Toolbar