首页
社区
课程
招聘
轻松+愉快 esp定律+内存断点快速脱老王的EncryptPE1.0加壳的记事本
发表于: 2004-8-4 12:17 15862

轻松+愉快 esp定律+内存断点快速脱老王的EncryptPE1.0加壳的记事本

2004-8-4 12:17
15862

【破文标题】轻松+愉快 esp定律+内存断点快速脱老王的EncryptPE1.0 V1.2003.5.18加壳的记事本
【破文作者】springkang[DFCG]
【作者主页】www.chinadfcg.com
【作者邮箱】springkang2003@yahoo.com.cn
【所属组织】DFCG
【软件名称】EncryptPE1.0加壳的一个记事本
【下载地址】本地下地
【破解工具】OD,impr,loadpe,
【保护方式】
【软件限制】
【破解难度】中等
----------------------------------------------------
软件介绍:
    老王老师的猛壳,曾经难倒众多高手!可是壳已经老了,因为老王的新版壳出来了!
----------------------------------------------------
破解声名:几个月前学习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加的一个程序同样有效!
----------------------------------------------------
【版权信息】
版权公有,人权私有!谢谢转载,注明作者!点击下载:附件!encryptPE1.0.rar


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (26)
雪    币: 149
活跃值: (1186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
附件不能下载呀
2004-8-4 12:21
0
雪    币: 323
活跃值: (589)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
3
自己去:http://www.encryptpe.com/下个加壳试试。
附件就是加壳的记事本和fly的脱文。
2004-8-4 16:00
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
4
附件暂时不要用长的文件名
你重新上传一下
用短英文名就可以下载了
2004-8-4 16:03
0
雪    币: 323
活跃值: (589)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
5
请fly 删掉旧的链接。
等下我重新上传,可以下载了
2004-8-4 16:22
0
雪    币: 201
活跃值: (141)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
菜鸟问题~~如何取消硬件断点?
2004-8-4 18:04
0
雪    币: 323
活跃值: (589)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
7
最初由 freefree 发布
菜鸟问题~~如何取消硬件断点?

调试菜单下有“硬件断点”选项
2004-8-4 18:08
0
雪    币: 227
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
能不能把修复过程做个动画啊~~肯定有东东没说明白。老是不行啊。

:( :(
2004-8-5 09:55
0
雪    币: 323
活跃值: (589)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
9
最初由 xs007 发布
能不能把修复过程做个动画啊~~肯定有东东没说明白。老是不行啊。

:( :(

重新编辑了一下,把一些要点重复了,因为昨天时间很紧。
应该好懂些了!:)
2004-8-5 10:09
0
雪    币: 201
活跃值: (141)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
疑问:
按CTRL+F2重新开始,在命令行dd 004062e4,下内存访问断点。F9运行。(内存断点下在哪儿),我下在00401000处,每次都断在71122843(好像是这里,反正能看到下面的7112295D)处,
7112295D    F3:A5           rep movs dword ptr es:[edi],dword ptr ds:[esi]    //中断在这里,
2004-8-5 12:50
0
雪    币: 227
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谢谢~~~我搞定了。
2004-8-5 13:07
0
雪    币: 227
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
最初由 freefree 发布
疑问:
按CTRL+F2重新开始,在命令行dd 004062e4,下内存访问断点。F9运行。(内存断点下在哪儿),我下在00401000处,每次都断在71122843(好像是这里,反正能看到下面的7112295D)处,
7112295D F3:A5 rep movs dword ptr es:[edi],dword ptr ds:[esi] //中断在这里,


命令行dd 004062e4,看左下角,有004062e4的数字,鼠标放上去点右键,然后下内存断点。
2004-8-5 13:09
0
雪    币: 227
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
这种方法好象不是通用的吧。唉,同样也是EncryptPE1.0的壳,这个就不起作用啦。
按照上面的方法,俺走到了OEP??这象吗?好象又是一只一层壳。~~~~~~~~~晕了,休息了。
0040E000     60                  pushad
0040E001     9C                  pushfd
0040E002     64:FF35 00000000    push dword ptr fs:[0]
0040E009     E8 79010000         call pt.0040E187
0040E00E     0000                add byte ptr ds:[eax],al
0040E010     0000                add byte ptr ds:[eax],al
0040E012     0000                add byte ptr ds:[eax],al
0040E014     0000                add byte ptr ds:[eax],al
0040E016     0000                add byte ptr ds:[eax],al
0040E018     0000                add byte ptr ds:[eax],al
0040E01A     5E                  pop esi
0040E01B     E0 00               loopdne short pt.0040E01D
2004-8-5 16:34
0
雪    币: 201
活跃值: (141)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
最初由 xs007 发布



命令行dd 004062e4,看左下角,有004062e4的数字,鼠标放上去点右键,然后下内存断点。


OK,断下了~
2004-8-5 16:51
0
雪    币: 201
活跃值: (141)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
方法同上,只是有点不同(是不是ctrl+F2重新开始呀)。下hr 000062fc后,是不是直接按F9?我按F9后不能中断在7112295D处,请教!
谢谢楼主~
2004-8-5 17:27
0
雪    币: 398
活跃值: (1078)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
16
真的是轻松愉快啊.
2004-8-6 00:25
0
雪    币: 323
活跃值: (589)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
17
最初由 freefree 发布
方法同上,只是有点不同(是不是ctrl+F2重新开始呀)。下hr 000062fc后,是不是直接按F9?我按F9后不能中断在7112295D处,请教!
谢谢楼主~

:) 是我的一个笔误,应该是 hr 004062fc。
不好意思了:p 已经修正了!
2004-8-6 08:15
0
雪    币: 323
活跃值: (589)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
18
最初由 xs007 发布
这种方法好象不是通用的吧。唉,同样也是EncryptPE1.0的壳,这个就不起作用啦。
按照上面的方法,俺走到了OEP??这象吗?好象又是一只一层壳。~~~~~~~~~晕了,休息了。
0040E000 60 pushad
0040E001 9C pushfd
0040E002 64:FF35 00000000 push dword ptr fs:[0]
0040E009 E8 79010000 call pt.0040E187
0040E00E 0000 add byte ptr ds:[eax],al
0040E010 0000 add byte ptr ds:[eax],al
0040E012 0000 add byte ptr ds:[eax],al
0040E014 0000 add byte ptr ds:[eax],al
0040E016 0000 add byte ptr ds:[eax],al
0040E018 0000 add byte ptr ds:[eax],al
0040E01A 5E pop esi
0040E01B E0 00 loopdne short pt.0040E01D

这个方法脱了几个EncrypePE1.0加壳的程序,都有用的!
两步就能到入口点!只是修复加密指针的时候稍稍有点不同,原理还是一样,我脱的几个加密点就是在:711a33a1。没有一点变化!
2004-8-6 08:28
0
雪    币: 223
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
我还是不行
哎 是不是自己太傻了
2004-11-6 22:26
0
雪    币: 223
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
我点不了注册那个
然后就卡住了
2004-11-6 23:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
【破解分析】
    用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运行。

我执行到这里时,就跑到
77E5B332 k>- E9 6D5CFEFF         jmp kernel32.77E40FA4
77E5B337     53                  push ebx
77E5B338     57                  push edi
77E5B339     8B7D 0C             mov edi,dword ptr ss:[ebp+C]
77E5B33C     BB FFFF0000         mov ebx,0FFFF
77E5B341     3BFB                cmp edi,ebx
77E5B343   ^ 0F86 894BFFFF       jbe kernel32.77E4FED2

请问哪里出错了?
2005-1-5 16:26
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
22
学习学习!
2005-1-5 17:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
【破解分析】
    用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运行。

我执行到这里时,就跑到
77E5B332 k>- E9 6D5CFEFF         jmp kernel32.77E40FA4
77E5B337     53                  push ebx
77E5B338     57                  push edi
77E5B339     8B7D 0C             mov edi,dword ptr ss:[ebp+C]
77E5B33C     BB FFFF0000         mov ebx,0FFFF
77E5B341     3BFB                cmp edi,ebx
77E5B343   ^ 0F86 894BFFFF       jbe kernel32.77E4FED2

请问哪里出错了?
2005-1-6 02:59
0
雪    币: 2443
活跃值: (494)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
24
我打开内存镜像怎么没有看到如下东西:
内存镜像, 项目 23
地址=00401000
大小=0000C000 (49152.)
Owner=NOTEPAD  00400000
Section=EPE0    //在这里下内存访问断点,因为加了密,所以就不是以前的 code了,其实还是一样的。
类型=Imag 01001002
访问=R
初始访问=RWE

只有一些代码
2005-1-8 11:06
0
雪    币: 203
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
终于搞定。
2005-1-14 11:03
0
游客
登录 | 注册 方可回帖
返回
//