esp脱壳+文件大小自校验

步骤如下

1.查壳
由图可见,显然有壳

image

2.找oep(ESP定律)

程序加载进OD,F8单步运行,右边寄存器窗口发现只有esp的值在变,符合ESP定律。
在寄存器位置右键,点击HW-break下硬件断点。然后F9运行到断点处,到达跳转到oep 的前一步,单步运行,遇到如下图:右键分析点击在模块中删除分析,即得到OEP.在oep处右键用ollydump脱壳当前进程。复制当前oep.

image

image

3.脱壳(LordPE)

在lordPE中打开样本程序,选中右键纠正镜像大小,再右键完全脱壳。


image

4.修复导入表(ImportREC)

在ImportREC中打开目标进程即样本进程,然后右边选项中输入之前在OD中选中的OEP,点击IAT自动搜索,然后点击获取导入表。

image

5.文件大小自检

脱壳以后双击没得反应,可能是有文件大小自检校验,脱壳后的程序载入OD,在GetFileSize函数下断点,在插件中选API断点设置工具->常用API断点。选中文件类的GetFileSize.然后F9运行程序,到断点处停下,在堆栈中右键反汇编跟随,找到调用这个函数的位置,然后下断点,把刚刚的那个断点删除。在断点后发现是几个cmp ,很明显是比较文件大小,故而把这两个cmp右键二进制->用nop填充。然后复制到可执行文件,保存文件。再次点击程序,发现正常运行。


image
image
image

**
注:esp 定律**

ESP定律算是我们在脱壳当中最常使用的方法之一,也特别适合像我一样的新手!而今天文章说的是ESP脱壳的原理和分析!只有知道原理了,我们的技术才能走得列远!

一.准备知识
在我们开始讨论ESP定律之前,说些简单的汇编知识。

1.call

这个命令是访问子程序的一个汇编基本指令。也许你说,这个我早就知道了!别急请继续看完。call真正的意义是什么呢?我们可以这样来理解:

1.向堆栈中压入下一行程序的地址;
2.JMP到call的子程序地址处。

例如:

代码:

00401029.E8 DA240A00 call 004A3508
0040102E.5A pop edx

在执行了00401029以后,程序会将0040102E压入堆栈,然后JMP到004A3508地址处!

2.RETN

与call对应的就是RETN了。对于RETN我们可以这样来理解:

1.将当前的ESP中指向的地址出栈;

2.JMP到这个地址。

这个就完成了一次调用子程序的过程。在这里关键的地方是:如果我们要返回父程序,则当我们在堆栈中进行堆栈的操作的时候,一定要保证在RETN这条指令之前,ESP指向的是我们压入栈中的地址。这也就是著名的“堆栈平衡”原理!

3.狭义ESP定律

ESP定律的原理就是“堆栈平衡”原理。

让我们来到程序的入口处看看吧!

1.这个是加了ASPACK壳的入口时各个寄存器的值!

代码:

EAX 00000000

ECX 0012FFB0

EDX 7FFE0304 //堆栈值

EBX 7FFDF000 //堆栈值

ESP 0012FFC4

EBP 0012FFF0

ESI 77F57D70 ntdll.77F57D70

EDI 77F944A8 ntdll.77F944A8

EIP 0040D000 ASPACK.<ModuleEntryPoint>

2.这个是ASPACK壳JMP到OEP后的寄存器的值!

代码:

EAX 004010CC ASPACK.004010CC

ECX 0012FFB0

EDX 7FFE0304 //堆栈值

EBX 7FFDF000 //堆栈值

ESP 0012FFC4

EBP 0012FFF0

ESI 77F57D70 ntdll.77F57D70

EDI 77F944A8 ntdll.77F944A8

EIP 004010CC ASPACK.004010CC

呵呵~是不是除了EIP不同以外,eax保存当前OEP值,其他都一模一样啊!

为什么会这样呢?我们来看看

0040D000 A> 60 pushad //注意这里ESP=0012FFC4

0040D001 E8 00000000 call ASPACK.0040D006 //ESP=0012FFA4

PUSHAD就是把所有寄存器压栈!我们在到壳的最后看看:

代码:

0040D558 61 popad //ESP=0012FFA4

0040D559 75 08 jnz short ASPACK.0040D563 //注意这里ESP=0012FFC4

也就是说当我们对ESP的0012FFA4下硬件访问断点之后。当程序要通过堆栈访问这些值,从而恢复原来寄存器的值,准备跳向苦苦寻觅的OEP的时候,OD帮助我们中断下来。

小结:我们可以把壳假设为一个子程序,当壳把代码解压前和解压后,他必须要做的是遵循堆栈平衡的原理。

因为大家对ESP理解各有异同,但是,大同小异!一般理解可以为:

1、在命令行下断hr esp-4(此时的ESP就是OD载入后当前显示的值)

2、hr ESP(关键标志下一行代码所指示的ESP值(单步通过))

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容