• 标 题:轻松+愉快 esp定律+内存断点快速脱老王的EncryptPE1.0加壳的记事本
  • 作 者:springkang[DFCG
  • 时 间:004-08-04,12:17
  • 链 接:http://bbs.pediy.com

【破文标题】轻松+愉快 esp定律+内存断点快速脱老王的EncryptPE1.0 V1.2003.5.18加壳的记事本
【破文作者】springkang[DFCG]
【作者主页】www.chinadfcg.com
【作者邮箱】springkang2003@yahoo.com.cn
【所属组织】DFCG
【软件名称】EncryptPE1.0加壳的一个记事本
【下载地址】本地下地
【破解工具】OD,impr,loadpe,
【保护方式】
【软件下载】http://bbs.pediy.com/showthread.php?s=&threadid=3506
【破解难度】中等
----------------------------------------------------
软件介绍:
    老王老师的猛壳,曾经难倒众多高手!可是壳已经老了,因为老王的新版壳出来了!
----------------------------------------------------
破解声名:几个月前学习fly的脱文,可是水平很菜,脱不了。前几天有个网友要我帮忙搞一个软件,加的就是这个壳。没办法,只有硬着头皮试了。重新看了fly大侠的脱文,就开始上路!没想到这个猛壳不防esp定律,大菜鸟我又捡了个漏:D
----------------------------------------------------
【破解分析】
    用fly的修改版载入(没有修改版也没关系,添加“同时忽略0EEDFADE、C0000008、009B25C、00953D74”异常,就行了。否则会很难看的),忽略所有异常,再用IsDebugPresent插件隐藏一下!
0040D000 >  60              pushad   //停在这里,F8单步运行二步。
0040D001    9C              pushfd
0040D002    64:FF35 0000000>push dword ptr fs:[0]  //到这里esp=0012ffa0 ,在命令行下:hr 0012ffa0 F9运行。
0040D009    E8 79010000     call NOTEPAD.0040D187
0040D00E    0000            add byte ptr ds:[eax],al
0040D010    0000            add byte ptr ds:[eax],al

几个入口点警告之后,出现注册对话框,点确定,中断在硬件断点处
711A37AE    25 00010000     and eax,100    //中断在这里,取消硬件断点,用ALT+M打开内存模块,下内存访问断点
711A37B3    3D 00010000     cmp eax,100
711A37B8    74 05           je short V1200351.711A37BF
711A37BA    E8 C996FFFF     call V1200351.7119CE88
711A37BF    6A 10           push 10
711A37C1    A1 8CC71B71     mov eax,dword ptr ds:[711BC78C]
711A37C6    8B00            mov eax,dword ptr ds:[eax]
711A37C8    E8 3713F8FF     call V1200351.71124B04

内存镜像, 项目 23
 地址=00401000
 大小=0000C000 (49152.)
 Owner=NOTEPAD  00400000
 Section=EPE0    //在这里下内存访问断点,因为加了密,所以就不是以前的 code了,其实还是一样的。
 类型=Imag 01001002
 访问=R
 初始访问=RWE

F9运行,中断在入口处了
004010CC    55              push ebp        //中断在这里,是不是很熟悉? :) 用loadpe dump后,用impr修复,
004010CD    8BEC            mov ebp,esp
004010CF    83EC 44         sub esp,44
004010D2    56              push esi
004010D3    FF15 E4634000   call dword ptr ds:[4063E4]
004010D9    8BF0            mov esi,eax

因为加了密,所以修复不了。看看fly写的文章,现在我们只要能找开加密点,进行修改就行了,至于为什么确定那里是加密点,此处暂不讨论!
先看看第一个无效的指针地址:rva:000062e4
按CTRL+F2重新开始,在命令行dd 004062e4,下内存访问断点。F9运行,
7112295D    F3:A5           rep movs dword ptr es:[edi],dword ptr ds:[esi]    //中断在这里,再按两次F9后(如果再按一次F9会怎样呢?自己试试吧),此时CTRL+G来到      711A33A1(这里要参考fly大侠的文章,或者自己去跟,体会一下,这里我没时间多说了)
7112295F    89C1            mov ecx,eax
71122961    83E1 03         and ecx,3
71122964    83C6 03         add esi,3
71122967    83C7 03         add edi,3
7112296A    F3:A4           rep movs byte ptr es:[edi],byte ptr ds:[esi]

711A33A1    8B55 F8         mov edx,dword ptr ss:[ebp-8]   //到这里,F2下断,F9运行。中断在此。我们在命令行DD ebp-4,看到了什么?是RegQueryValueExA,(在此内存区域上下看看,观察一下。)好的,修改指令。
711A33A4    8910            mov dword ptr ds:[eax],edx  //如果刚才再按一次F9,就会发生内存中断,来到这里,呵呵,加密的指针已经处理完了,我们停在这里有什么用呢?所以就要在上一行下断,那里正好在处理加密的批针。
711A33A6    33C0            xor eax,eax
711A33A8    5A              pop edx
711A33A9    59              pop ecx

711A33A1 8B55 F8  mov edx,dword ptr ss:[ebp-8]//加密指针 ★ 
改为:
711A33A1 8B55 FC  mov edx,dword ptr ss:[ebp-4]//正确函数
取消内存断点和F2断点,F9运行(如果不取消,F9,我们会看到711A33A1处正在处理正确函数 ,呵呵!),虽然程序异常无法再运行,但是所有的函数均自动还原了。
运行ImportREC,选择这个进程。把OEP改为000010CC,点“Get Import”,
只修复了一些,还有很多没修复。没关系,再来一次。
现在看看还没修复的无效的指针地址,先看第一个:rva:000062fc
方法同上,只是有点不同。我这里是下hr 004062fc ,(下内存访问断点不太行,会直接中断在  711A33A4    8910            mov dword ptr ds:[eax],edx  已经处理完了加密指针,中断在这里有什么用?),中断在
7112295D    F3:A5           rep movs dword ptr es:[edi],dword ptr ds:[esi]  然后CTRL+G来到711A33A1。后面的就一样做了。
经过两次修复后,一切OK了。
脱壳后文件有点大,按fly的方法重建也还是一样。没办法了,不管它,能运行就行 :D


----------------------------------------------------
【总结】
    本文参考了fly大侠的脱文,该文很有参考价值,省了偶不少时间,向fly 大侠致敬了!另外还要向老王老师致敬,不好意思拿他的壳开了刀!
    用这个方法脱了用EncryptPE加的一个程序同样有效!
----------------------------------------------------
【版权信息】
版权公有,人权私有!谢谢转载,注明作者!