IDA学习经验和实战记录--手过花指令(1)
实验软件下载地址
侦壳

什么都没有查到
应该是自己编写的加密方式
(本身这就是一个加壳软件)
脱壳
发现问题

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

OD打开,发现一开始有pushad
说明肯定是加壳了的
向下单步跟踪一下,发现有很多 花指令

(跳转来条转去的)
现在主要是学习IDA,OD脱壳等有时候再发
注: 可以用ESP定律实现(有空会发)
IDA实现
引入
图解部分(不知道应该怎么叫)最上面可以看到上面有个pushad

先调整IDA,把地址显示出来

鼠标放到有效分析的最后一行
按下space,切换视图模式

敲黑板!补充一下
图中的代码
start endp ;sp-analysis failed
//分号后面的是注释,此处意为【分析失败】
;sub_456189↓p
//此处注释意为【分析交叉引用有冲突】
//一般是导航带上深红色区域(详见上图2-1)
注:交叉引用简介
定位到红色出错的CALL按D,转变为数据(应该类似OD的删除分析。我猜的)


分析
全部分析错误都没有了,
开始人工分析

(为了方便分析,请先按上面图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,将数据转换为代码


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

E8 F6 FF FF FF call near ptr byte_4560FF
这个near ptr byte_4560FF也是不知其为何物
分析一下,发现这个一整段都是花,没有意义

花指令
一堆花加在一起,是为花指令
这个例子中,有以下几种情形(分析出来类型,方便接下来用脚本去除所有的花指令)
本来想用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)(推荐。)。

浙公网安备 33010602011771号