#逆向分析系列#逆向0X01

       简单来讲,对软件进行分析并搞清楚其行为的工作就叫做“逆向工程”。逆向是指对软件进行分析,其对象不仅限与恶意软件,因此也不一定和计算机安全相关,譬如:license的绕过、游戏金手指等。都属于通过逆向分析绕过或篡改内部数据达到所需目标。

       逆向工程可分为静态分析与动态分析。静态分析是:在不允许目标程序的情况下进行分析。动态分析:在运行目标程序的情况下进行分析。静态分析可用于了解全局信息,动态分析可用于了解局部信息,动静结合效果倍增!

      静态分析常用工具包括:winhex(二进制编辑器)、IDA Freeware版(反汇编工具)等。 动态分析常用工具包括:Process Monitor(系统进程监视器)、OllyDbg(动态追踪工具)、Wireshark(数据包分析软件)等。 形形色色各种工具都有,再次不一一介绍。

       工欲善其事必先利其器,在具有“趁手武器”后,我们需要对汇编指令有所了解(了解常用关键指令即可),便于通过工具展示出的内容进行分析。没必要一行行仔细阅读,重要的部分花时间仔细理解,其余部分了解大概即可。

指令 示例 含义 说明
MOV MOV EAX,ECX EAX=ECX 将ECX的值存入EAX
ADD ADD EAX,ECX EAX+=ECX 将EAX的值加上ECX的值
SUB SUB EAX,ECX EAX-=ECX 将EAX的值减去ECX的值
INC INC EAX EAX++ 将EAX的值加1
DEC DEC EAX EAX-- 将EAX的值减1
LEA LEA EAX,[ECX+4] EAX=ECX+4 将EAC值加4存入EAX
CMP CMP EAX,ECX

IF(EAX==ECX)

  ZF=1

ELSE

  ZF=0

对两值进行比较并根据结果设置标志

若EAX与ECX值相同,ZF=1

TEST TEST EAX,ECX

F(EAX==0)

  ZF=1

ELSE

  ZF=0

将值与0进行比较并根据结果设置ZF值
JE(JZ) JE 04001000 if(ZF==1)
GOTO 04001000
若ZF=1,则跳转到04001000
JNE(JNZ) JNE 04001000 if(ZF==0)
GOTO 04001000
若ZF=0,则跳转到04001000
JMP JMP 04001000 GOTO 04001000 无条件跳转到04001000
CALL CALL lstrcmpW   调用lstrcmpW
PUSH PUSH 00000001   压栈
POP POP EAX   出栈并将获取的值存入EAX寄存器

 示例分析

    我写了一段非常简单C++代码,根据判断2019弹出不同对话框。

下面我们就来通过动静态来分析该EXE程序!

   1.静态分析

     首先可通过IDA进行全局查看,通过对源代码反汇编,可大概了解程序的逻辑代码。下图关键方法包括:lstrcmp、GetActiveWindow、MessageBox,通过三个方法我相信你已经基本明白代码逻辑规则是什么了?。

  2.动态分析

     通过静态对代码有全局了解后,可通过动态分析进行局部深入了解,下图是通过OllyDbg进行深入了解,call调用了lstrcmp方法,jnz进行判断,如果不包含指定匹配字符串将跳转到01141787位置,即hello word的代码段中。

我通过在lstrcmp位置设置断点,执行至jnz时跳转至01141787位置,继续执行至011417A5时(弹出框)栈的内容如上图右下角。

     由此我们完成了对该exe程序的简单动静分析。后期我们将结合Process Monitor、Wireshark等多种分析方法对软件进行逆向分析。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章