吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13925|回复: 21
收起左侧

[原创] EncryptPE 脱壳手记

  [复制链接]
〇〇木一 发表于 2013-7-30 18:12
本帖最后由 〇〇木一 于 2013-7-30 19:15 编辑

经过一段时间的学习,总算对脱壳的知识有了一点了解
今天遇到了一壳EncryptPE,不怎么常见,也没有遇到过,就尝试着脱脱看

2.jpg
查壳显示为v2.2008.6.18版本,用od载入F9运行,
3.jpg
提示未注册,不知道注册码,点击确定后程序就退出了。很显然这样是无法脱壳的,要先过了注册。
下面是H大写的一片文章,就是关于EncryptPE 的壳pass key的。
http://hi.baidu.com/52hmily/item/6f502f49b969c5e31281da74
按照H大的思路,重新载入,F9运行后暂停,在堆栈中向下拉,找到
4.jpg
跟随到反汇编窗口,向上找到头部
5.jpg
下好硬件执行断点,重新载入程序,F9运行后,断下来,F8单步向下走,
6.jpg
当走到这里后出现窗体,点确定,再向下走
9.jpg
call1为验证call,call2为退出,这里使跳转1、跳转2都跳转,程序就通过注册了。
接下来是找OEP
一般壳的运行规则是不变的
1.先在代码断写入代码
2.写入处理过的IAT和处理过的IAT call
3.跳转到oep
所以一般找oep最重要的就是先找一个点,就是刚好处理完IAT之后的点,然后再在代码段下内存访问断点,运行之后就能断在oep了。
这里我一番好找,终于发现了较快的一种方法
当运行到上图跳转2时让它可以跳,但是先不要运行,
8.jpg
先在EPE1区段下好内存写入断点,两次F9后就是处理完IAT之后的点了,然后在EPE0段,也就是oep所在的区段下内存访问断点,两次F9后就到达OEP了
10.jpg
可以看出这是vc写的一个程序
接下来就是最重要的一步-----修复IAT了
先找到IAT表的位置
11.jpg
从这里右键数据窗口跟随很快就能找到iat表的位置了
12.jpg
可以看出这些有些IAT已经被加密了,要做的就是修复这部份IAT
个人认为一般修复IAT有两种方法,
第一种就是在其加密之前找到判断某IAT是否加密的跳转,上图就可以看出没些IAT加密,某些没有加密,说明肯定有一个比较IAT是否加密的地方,只要修改那个跳转就能修复IAT了,这也就是所谓的magic jmp。
第二种就是事后修补,像上图那样某些IAT已经加过密了,要找到他真实所指向的API,再重新赋值。因为加过密之后,在程序运行时肯定要进行还原,在这过程中就可以获取真实所指向的API了。
寻找magic jmp太难了,本菜鸟努力很久也找不到。所以只能尝试第二种方法了。
先找一个加过密的IAT,就上图中0041F158的那个吧。
0041F158处的值为01380528,反汇编窗口转到01380528
14.jpg
右键---在此新建eip,会提示,按确定,F7跟进此call。
可以看到指令很花,F8向下走,此时就要注意各个窗口了,它会在某步还原出真实的API
一路走,一路观察,终于。。。  嘿嘿
15.jpg

17.jpg
当运行到711A9388时,经过一个call后eax指向了还原后的API地址,只要把此时的eax写入IAT地址0041F158,一个IAT就修复好了
————————————————————————————————
有了这个发现就可以用脚本修复所有的IAT了,下面是我写的一个脚本,当然只能用来脱这个程序的壳
[AppleScript] 纯文本查看 复制代码
VAR IatStart                  //记录IAT起始
VAR IatEnd                    //记录IAT末
VAR OEP                       //记录OEP
VAR OepEsp                    //记录OEP时的栈顶
BC
BPHWCALL
BPHWS 712062A5,"x"            //在验证注册时下段
ESTO
BPHWC 712062A5
STO
MOV !ZF,0                     //pass key jmp
STO
STO
STO
STO
MOV !ZF,1                     //pass key jmp
BPWM 42F000,90000             //EPE1段下内存写入断点
ESTO
ESTO
BPMC
BPRM 401000,2E000             //EPE0段下内存访问断点
ESTO
ESTO
BPMC
CMT eip, "<--OEP"             //到达OEP
MOV OEP,eip                   //获取OEP地址
MOV OepEsp,esp                //获取OEP时的栈顶
MOV IatStart,0041F000         //获取IAT起始地址
MOV IatEnd,0041F434           //获取IAT结束地址
////////////////////
BPHWS 711A938B,"x"            //断在此处eax为真实API地址

fixIAT:
CMP IatStart,IatEnd
JA exit
CMP [IatStart],10000000       //判断此时IAT是否加过密
JA continue
CMP [IatStart],00000000
je continue
////////////////////
MOV eip,[IatStart]            //eip移至处理后的IAT处
ESTO
MOV [IatStart],eax            //写入IAT真实API地址
////////////////////
continue:
MOV esp,OepEsp                //还原栈
ADD IatStart,4                //逐个取IAT
jmp fixIAT
////////////////////
exit:
MOV eip,OEP                   //eip移至OEP
MOV esp,OepEsp                //还原栈
BPHWCALL
RET

运行脚本,出现注册框点确定即可,运行完成后,IAT已经修复
18.jpg
上LordPE,importREC就能脱成功了
以上献给同在慢慢摸索的新手同胞们。


附件: 测试.zip (562.99 KB, 下载次数: 173)
脚本: 脚本.zip (722 Bytes, 下载次数: 169)
                                                                                                                                                         〇〇木一
                                                                                                                                                         2013-07-30

免费评分

参与人数 3热心值 +3 收起 理由
电子男巫 + 1 起码是中级魔法师了,楼竹真是太谦虚了
ashidamana + 1 谢谢@Thanks!
吾爱扣扣 + 1 膜拜会写脚本的大大

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

小雨细无声 发表于 2013-7-31 09:51
膜拜大牛,很详细。
瓜子吧3 发表于 2013-7-30 18:14
吾爱扣扣 发表于 2013-7-30 18:19
本帖最后由 吾爱扣扣 于 2013-7-30 18:21 编辑

不错的手记!收藏!
1354669803 发表于 2013-7-30 18:25
IAT加密 头疼啊
txke 发表于 2013-7-30 18:32
膜拜会写脚本的大大,IAT真是让人蛋疼啊,脚本下载来研究研究
宜搜百度 发表于 2013-7-30 18:45
前来学习,膜拜大神。。。。
kevinjian 发表于 2013-7-30 19:16
不明觉历,感觉好复杂
天山雪鹰 发表于 2013-7-30 20:55
好难的样子,新手膜拜
wanwanle 发表于 2013-8-1 11:18
嗯  的确写的不错  支持下啰
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-14 13:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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