反向分析技术总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。



病毒代码的段和偏移地址入栈,随即一条远返 回指令将控制交给病毒代码 ... ax存放代码段基址 push ax mov ax, 0CAh ;压入病毒偏移地址 push ax retf ;返回后直接转到seg:00ca ... SEG:00CA ...
静态分析实例(续)

病毒代码会以加密的形式出现,而且这个代码仅在需 要的时候才进行解密 mov bx, offset virus_code ;欲解密代码的偏移地址 xor_loop: ;循环解密 mov ah, [bx] xor ah, encrypt_val ;异或运算解密 mov [bx], ah inc bx cmp bx, offset virus_code+virus_size ;判断病毒代码是否结束 jle xor_loop Ret
?


?



include \masm32\include\windows.inc include \masm32\macros\macros.asm
; always first ; MASM support macros

; ----------------------------------------------------------------; include files that have MASM format prototypes for function calls ; ----------------------------------------------------------------include \masm32\include\masm32.inc include \masm32\include\gdi32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc ; -----------------------------------------------; Library files that have definitions for function ; exports and tested reliable prebuilt code. ; -----------------------------------------------includelib \masm32\lib\masm32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib

白盒分析

逆向手段

动态调试

通过调试器(OD)对目标程序进行追踪分 析,跟踪内部状态 使用反汇编器(IDA)或反编译器把目标程 序变为可读的汇编代码或伪代码,然后分析 程序的结构,流程,逻辑等

静态分析

静态分析实例

病毒与木马
隐藏产生恶性后果的代码 手段

自修改 加密技术

静态分析实例(续)





数据当作指令 start: call procX cont db 0E9h ;jmp 操作码 conta dw 0 procX: mov cs:[conta],virusOffset ret ... virus: end.
静态分析实例(续)


高级表达式

控制流分析

整合控制流向图阶段的子程序图
结构出整个程序的流程图 也可以用于转换成高级语言的代码集合


问题


反汇编出的源码,重新编译过最好 依照这个思路,把IDA里面反汇编的代码 修改后运行.但实践证明这个不是有效好 的方法 修改IDA反汇编出来的代码也比较困难. 因为IDA中很多高级语言的结构,高级语 言的库,关键字在汇编中不支持或者冲突
反向分析技术总结
--朱海
目的

通过反汇编识别代码
代码结构 数据结构 运算


反编译识别高级代码流程
反汇编

代码结构

条件分支

Cmp byte prt[XX],bl Jne other

比较操作 循环结构

again:xor ecx,ecx inc ecx …… cmp ecx,05h jbe again call ,jmp

语义等价表示


用于生成中间代码
控制流向图

确定程序中的高级结 构
数据流分析阶段

改善中间代码,以便能够得到高级语言表达式 临时寄存器的使用和条件标志被清除掉 例:


asgn ax, [bp-0Eh] asgn bx, [bp-0Ch] asgn bx, bx * 2 asgn ax, ax + bx asgn [bp-0Eh], ax asgn [bp-0Eh], [bp-0Eh] + [bp-0Ch] * 2
问题(续)

源文件中的库文件
include WINDOWS.INC include kernel32.inc includelib kernel32.lib 消失在代码中 查找 include语句,寻找_idata中的dll名,得到常用 包含库文件


; ; ; ; .486 .model flat, stdcall option casemap :none ; create 32 bit code ; 32 bit memory model ; case sensitive Build this with the "Project" menu using "Console Assemble and Link"
反编译



句法和语义分析 中间代码生成 控制流向图生成 数据流分析 控制流分析
句法和语义分析

源程序组织成汇编语言 检查指令,寻找成语

add ax, [bp-4] adc dx, [bp-2] ↓ add dx:ax, [bp-2]:[bp-4] sub cx,50 cx := cx - 50 语义等价树(右图)

灰盒分析

借助一些专有工具,如api监视工具,陷阱工具,内存比较工 具,文件监视工具等对目标程序进行监控,观察操作、调用以 及结果,来猜测和断定程序可能的实现细节。 从代码级别上(可能是反汇编代码、反编译的伪代码或源代码), 通过动态调试或静态反汇编分析和理解程序的功能、逻辑,找 到程序的安全问题等
;ecx清零 ;计数 ;循环4次 ;重复

函数




压栈当前指令之后的指令地址 开始标志和结束标志 push ebp mov ebp,esp sub esp,48h
反汇编

数据结构
堆栈 全局变量 局部变量 常量 数组 结构体和联合体 类

逆向分析方法

黑盒分析

从程序的外部,通过观察程序运行时候的行为,规则等来猜测 和断定程序可能的实现方法,是否有存在脆弱点等
相关文档
最新文档