无壳程序:方便修改,可以DIY
ollydbg
软件界面中字母快捷键的含义:
t是线程(一般都是单线程)w是窗口 h是句柄的信息 c是反汇编窗口
还有一些快捷键 + - p是修改代码 可以看到自己修改的信息 可还原可恢复 b是断点
vc6的特征:
ollydbg和exeinfo都可以看区段信息
exeinfo界面中下方第二行就可以直观的看到编译信息及有无加壳
区段有名称 第一行是代码段 第二行是....NAME中可以看出来’
而在OD中可以看到入口特征:压栈之后有两个PUSH的值,有api
还有一个信息是区段信息:
入口被虚拟化以后如何修复?停在第一个CALL里,看堆栈窗口找修复的值(9503帧)
VC6比较老,这几年用VS
VS特征:
入口特征:第一句是call,第二句是Jump 然后第一个call进去以后这些API也是相同的
jump进去以后也是相同的
区段:相对于VC6多了一个重定位。(在区段信息最后一行.rebc)
e语言:
一般都是个人开发者使用比较多,大厂商用VS多
分独立编译和非独立编译
非独立编译意味着:带一个独立运行库krnln.fnr
拖入OD中,从入口特征中可以看出是e语言,在压栈之后会Load一些它的运行库
特征入截图,很容易看到 F9是运行 (在e模块窗口中) 运行以后可以看到,它加载了这样一个Krnln.fnr
独立编译:
(e语言的在exeinfo中会被识别为VC,因为编译使用微软编译器进行编译,特征与VC6基本一样)
连入口和区段也一样,唯一区别:(经验)1.搜索字符串,会有一些e语言编译完自带的一些
CTrl+a 能看到字符串或右键analysis,代码在data段,设断点
再就是代码:(11522帧)以及一些调用的库和接口
随便在开头下面找一个call进去,都会调用一些东西核心库
还有一个方法:看代码的结构,一般都是压一堆堆栈之后调接口,
Delphi
区段特征也非常明显,一大坨 BSS
入口特征,第一个call里面有api
代码特征也有,一会后会熟悉
冷门的
BC++
入口是一个非常大的jump
汇编写的东西都非常小,都是系统一些API
一加载就运行了一堆.net运行库
加了壳的:
查壳软件 都是基于一个数据库,但很多年没人维护了,
脱库以后对比特征。。回到上一步
Themida:
带授权与不带授权的加壳
以前老入口:
现在加了随机的代码,解码之后才显示
区段信息: 前面区段是空的,后面两个是任意的
VMP特征看区段比较明显
aspack壳:
入口压栈,之后pushad,然后call,jump
看区段,多了aspack.adata区段,
UPX:
区段信息:UPX0,UPX1,(也都可以随便改) 但是他只有三个区段---->特征
前面一大堆跳转
VMP:
入口特征乱七八糟,f8一下就飞了
识别看区段,原来的代码段数据段保留,但是资源,重定向都添加了,放在后面。0,1不变,前边随便变,
SE:
代码段与idata一般都不会变,sedata ,
入口加了两个跳转,
要分析一下,hex数据会显示。
(逆向资源区有)
虚拟化的,.net的,等等。
可以找个记事本,去加壳,这样能看到每种程序加壳以后的特征。
参考ximo的教程和小生的教程