破解之对壳的补充

无壳程序:方便修改,可以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的教程和小生的教程

原文地址:https://www.cnblogs.com/blazarstar/p/12892587.html