IDA学习经验和实战记录--手过花指令(1)

IDA学习经验和实战记录--手过花指令(1)

  • 侦壳
  • 脱壳
    • 发现问题
    • OD辅助分析
    • IDA实现
      • 引入
      • 分析
      • 花指令
        • 情形一
        • 情形二
        • 情形三
        • 情形四
    • 脚本去除

实验软件下载地址

侦壳

IDA学习经验和实战记录--手过花指令(1)_第1张图片
什么都没有查到
应该是自己编写的加密方式
(本身这就是一个加壳软件)

脱壳

发现问题

图2-1
用IDA打开后,发现最底下是红色的,且有很多黑色部分(未知)
还有大部分的data数据,而且没有发现已解锁的函数(蓝色部分)
需要进行脱壳

OD辅助分析

IDA学习经验和实战记录--手过花指令(1)_第2张图片
OD打开,发现一开始有pushad
说明肯定是加壳了的
向下单步跟踪一下,发现有很多 花指令

IDA学习经验和实战记录--手过花指令(1)_第3张图片
(跳转来条转去的)
现在主要是学习IDA,OD脱壳等有时候再发

注: 可以用ESP定律实现(有空会发

IDA实现

引入

图解部分(不知道应该怎么叫)最上面可以看到上面有个pushad
IDA学习经验和实战记录--手过花指令(1)_第4张图片

先调整IDA,把地址显示出来
IDA学习经验和实战记录--手过花指令(1)_第5张图片

鼠标放到有效分析的最后一行
按下space,切换视图模式
IDA学习经验和实战记录--手过花指令(1)_第6张图片
敲黑板!补充一下

图中的代码

start	endp	;sp-analysis failed

//分号后面的是注释,此处意为【分析失败】

				;sub_456189↓p

//此处注释意为【分析交叉引用有冲突】
//一般是导航带上深红色区域(详见上图2-1)

注:交叉引用简介

定位到红色出错的CALL按D,转变为数据(应该类似OD的删除分析。我猜的
IDA学习经验和实战记录--手过花指令(1)_第7张图片
IDA学习经验和实战记录--手过花指令(1)_第8张图片

分析

全部分析错误都没有了,
开始人工分析
IDA学习经验和实战记录--手过花指令(1)_第9张图片
(为了方便分析,请先按上面图2-2-2把地址显示出来这里就不上图了)

以下机器码查询自 CSDN博客

机器码 汇编语言
9A CALL immed32
E8 CALL immed16
E9 JMP immed16
EB JMP immed8

因为E8机器码在汇编中会被翻译为call,但是后面的EB OC 00 00会被翻译成call的地址,但是这个地址并不存在,因此会报错。
那么就很清楚了,这里不是call而是jmp到一个地址
光标定位到下一行EB,按C,将数据转换为代码
图2-2-7
IDA学习经验和实战记录--手过花指令(1)_第10张图片

至此,一处花搞定
那什么叫做花指令呢
就是在本来正常的顺序下,让其不停跳转,中间一些永远不会执行到的地方,加上一些其他字符,使反编译器无法正常分析,就达到了在一定程度上保护程序的功效

这个截图上,除了这一处,还有一处,如下图
IDA学习经验和实战记录--手过花指令(1)_第11张图片

E8 F6 FF FF FF   call   near ptr byte_4560FF

这个near ptr byte_4560FF也是不知其为何物
分析一下,发现这个一整段都是花,没有意义
IDA学习经验和实战记录--手过花指令(1)_第12张图片

花指令

一堆花加在一起,是为花指令
这个例子中,有以下几种情形(分析出来类型,方便接下来用脚本去除所有的花指令)
本来想用Md的Flowchart流程图写一下大概流程的。。
试了几次,放弃了
反正asm汇编的代码也算是很好懂的。

情形一

	call label1
	db 0E8h
label2:
	jmp label3
	db 0
	db 0
	db 0E8h
	db 0F6h
	db 0FFh
	db OFFh
	db OFFh
label1: 
	:call label2
label3:
	add esp,8

情形二

	jz label1
	jnz label1
	db 0EBh
	db2
label1:
	jmp label2
	db 81h
label2:

情形三

	push eax
	call label1
	db 29h
	db 5Ah
label1:
	POP eax
	imul eax,3
	call label2
	db 29h
	db5Ah
label2:
	add esp,4
	pop eax

情形四

	jmp label1
	db 68h
label1: 
	jmp label2
	db 0CDh,20h
label2:
	jmp label3
	db 0E8h
label3:

脚本去除

下次再说。先编辑到这里。

  • 回头会补链的。

吾爱破解论坛: IDA学习经验和实战记录–手过花指令(2)(已重排版)
CSDN: IDA学习经验和实战记录–手过花指令(2)(推荐。)。

你可能感兴趣的:(反汇编,ida)