反向分析技术总结
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
反汇编
数据结构
堆栈 全局变量 局部变量 常量 数组 结构体和联合体 类
逆向分析方法
黑盒分析
从程序的外部,通过观察程序运行时候的行为,规则等来猜测 和断定程序可能的实现方法,是否有存在脆弱点等