飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 23908|回复: 62

脱壳入门,看看有好处

[复制链接]

该用户从未签到

发表于 2005-12-15 02:17:51 | 显示全部楼层 |阅读模式
一、找OEP
脱壳的一般流程是:查壳->寻找OEP->Dump->修复
查壳没什么好说的,FI和PEiD,不幸的是FI和PEiD都不能识别出这个壳:)

我找OEP的一般思路如下:
先看壳是加密壳还是压缩壳,压缩壳相对来说容易些,一般是没有异常,找到对应的popad后就能到入口,跳到入口的方式一般为
1、 jmp OEP
2、 push OEP
ret
3、 call OEP
当然也有其他的,如 je OEP等等,一般都是段之间的大跳转,OD的反汇编窗口里都是同一个段的内容,所以更好区别是否是段间跳转
『这里我说说关于F8(Step Over)和F7(Step in)的一般方法,粗跟的时候一般都是常用F8走,但是有些call是变形的Jmp,此时就需要F7代过,区别是否是变形Jmp的一个简单方法是比较call的目标地址和当前地址,如果两者离的很近,一般就是变形Jmp了,用F7走 』
对于加密壳,我的方法一般是用OD载入,钩掉所有异常(不忽略任何异常,有时由于异常过多可以适当忽略一些异常),运行,数着用了多少次Shift+F9程序运行,显然最后一次异常后,程序会从壳跳到OEP开始执行,这就是我们寻找OEP的一个关键,而对于这个壳可知是加密壳,Shift+F9 16次后运行,重来,Shift+F1 15次后到这
0042CBD3 ^\73 DC jnb short kill_luj.0042CBB1
0042CBD5 CD 20 int 20
0042CBD7 64:67:8F06 0000 pop dword ptr fs:[0] <---这里
一般的处理方法是找到pop fs:[0]处下断点或者是[esp+4]处下断点,如果学习一下SEH的处理会更好些
0012FF58 0012FFE0 Pointer to next SEH record
0012FF5C 0042CBB7 SE handler <---这里一般包含Anti-Debug的代码
0012FF60 0042CB8A RETURN to kill_luj.0042CB8A from kill_luj.0042CB90
我首选第一种,在0042CBD7处下断之后,耐心的用F7走,因为变形call太多了...,关键注意一下往回跳的跳转,寻找合适的位置跳出循环,有耐心的话你就能这样走到OEP了;)
当然你也可以用另一个好东西——Trace,在Command里来个tc eip<42b000 (42b000是当前段的起始位置,滚动条拖到最上面就能看到了,一般程序编译的基地址为400000),OK,稍等一会我们就会停在这了(如果是ASPr可能要几分钟了)
00419F68 55 push ebp <----停在这
00419F69 8BEC mov ebp, esp
00419F6B 83C4 F0 add esp, -10
呵呵,OEP找到了;)
当然,这个用PEiD就能找到OEP,比较一下,是不是一样:D,对于用PEiD找到的OEP可以直接G到OEP

此时就可以Dump了,用LordPE来Dump吧,由于有Anti-Dump,所以要先Correct Imagesize一下再Dump

二、修复IAT
由于加密壳对输入表进行了重定位,所以现在的文件还不能正常使用,我们的目标就是恢复它,先用ImportREC,填入正确的OEP, IAT AutoSearch, Get Import,无效的不少,Show Invalid,右键->Trace Level1(Disasm),失败!!看来是只有自己恢复了。记下IAT的地址0001C128
好,重新运行,在OD的Dump窗口里Go to Expression,到0041C128,盯着它默默数着按了多少次Shift+F9,在第13次后发现0041C128变了,而且和最后到OEP处一样,可见刚才壳修复了IAT也顺便破坏了IAT,于是我们重来,Shift+F9 12次以后按照前面说的方法跳过异常,这里我们可以在0041C128处选择用内存断点或硬件断点,如Memory, On Write, On Access,Hardware,On Access等,我用Memory On Write,在壳几次解码IAT以后(0041C128处变了好几次),我们可以到这里
0042C7C7 60 pushad
0042C7C8 8327 00 and dword ptr ds:[edi], 0 <----停在这
0042C7CB 8B85 5B314000 mov eax, dword ptr ss:[ebp+40315B]
0042C7D1 40 inc eax
0042C7D2 0F84 A8000000 je kill_luj.0042C880
0042C7D8 80A5 04294000 FF and byte ptr ss:[ebp+402904], 0FF
0042C7DF 0F84 9B000000 je kill_luj.0042C880 <----这个地址跳转就不被破坏
0042C7E5 80A5 05294000 FF and byte ptr ss:[ebp+402905], 0FF
0042C7EC 0F84 8E000000 je kill_luj.0042C880
0042C7F2 8B85 5F314000 mov eax, dword ptr ss:[ebp+40315F]
0042C7F8 8907 mov dword ptr ds:[edi], eax <-----看这里,被破坏了;)
再看一下eax的值,
eax 77F525CA ntdll.DeleteCriticalSection
很不错的样子:D,IAT的重定向已经找到了,正常修复IAT在哪里呢??多跟几回,就会发现是在这
0042C880 61 popad <---前面的je就是跳到这
0042C881 3107 xor dword ptr ds:[edi], eax <---OK,到这就好了
0042C883 58 pop eax
于是乎,修改je为jmp,IAT就不会被破坏了,再到OEP处用ImportREC修复就好了
这里我说的似乎很轻松,其实这些东西要靠跟出来的,下面是一些我找到的关键点的分析

首次解码IAT 0042c3ef
解码 Dll Name 0042c4ea -> 解码出正确 Dll Name
Clear dll Name 0042c645 -> 清除 Dll 的名字
0042c6ac -> 解码出正确 First Thunk
0042c66d -> 解码出正确 First Thunk
最后解码IAT 0042c693 -> 解码出正确的RVA 指向函数名
ReDirect 0042c7c8 -> Import 重定向, 这里会置0 必经路线
0042c7f8 -> Import 重定向, 这里指向壳里
Normal 0042c881 -> 不重定向时正常输入表地址
Clear Function Name 0042c88d -> 清除 函数 名字
Repair IAT Over 0042c8fa -> BreakPoint 到这里IAT修复完成

解码 dll 名的那段代码没仔细找;),你如果有兴趣可以找找

当然再有兴趣的朋友可以自己添加代码修复IAT,这样就可以不用ImportREC,手动修复IAT

一般来说壳到这就差不多了,不过也会有某些变态壳要修修补补,这就没法说了也超出了本文的范围了
PYG19周年生日快乐!
  • TA的每日心情
    郁闷
    2015-12-31 10:09
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2005-12-20 10:23:25 | 显示全部楼层
    谢谢分享
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2005-12-27 21:25:13 | 显示全部楼层
    是阿,好好学习。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-3-5 02:00:46 | 显示全部楼层
    想请问版主这篇文章有没有具体练习的软件?有的话发上来可以吗?
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-3-7 14:05:42 | 显示全部楼层
    谢谢.学习中.....
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-12-19 05:15
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2006-3-9 13:16:31 | 显示全部楼层
    确实挺初级的,谢谢!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-3-12 20:14:46 | 显示全部楼层
    谢谢了
    楼主辛苦了
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2016-6-4 16:11
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2006-3-13 12:46:41 | 显示全部楼层
    感谢楼主,先收藏了~~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-10-1 22:25:18 | 显示全部楼层
    收藏之~~~~~受益之~~~~~~~~~~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-10-6 06:46:42 | 显示全部楼层
    楼主是用反汇编的工具么?没说清楚啊..我是新来的,不好意思..
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表