首页
社区
课程
招聘
EncryptPE V1.2003.5.18 脱壳――某国产外挂软件
发表于: 2005-8-9 12:07 6442

EncryptPE V1.2003.5.18 脱壳――某国产外挂软件

2005-8-9 12:07
6442
破文标题:EncryptPE V1.2003.5.18 脱壳――某国产软件

壳下载地址:http://www.encryptpe.com/EncryptPEV12003518.zip
软件安装包下载地址:http://softcn.spritegame.com/hlsetup.exe
软件简介:1. 加密保护常规PE文件(EXE、DLL、OCX等),防静态分析修改,反动态跟踪调试。2. 将普通软件变成共享软件,增加定时注册提醒、限制试用日期、限制试用次数、限制试用天数、限制每次试用多长时间等功能。3. 根据最终用户的机器信息、注册用户名计算注册码,从 100 多种加密算法中随机选择一种用于注册码的计算。4. 支持多语言,除GB外的其他语言形式的界面元素由“EncryptPE.INI”文件设置,便于增删改,注册窗口界面与语言相关。5. 向待加密软件提供方便的编程接口,便于设计个性注册方式,同时使被加密程序与加密壳之间融为一个整体,增加破解难度。6. 经加密软件可以运行于多种 Windows 平台,包括 9X/ME/NT/2000/XP。(copy来的。HOHO。)
脱壳目标:EncryptPE 1.2003.5.18加壳的某软件
调试环境:winxp sp2、flyODBG、PEiD、LordPE、ImportREC、Fi
脱壳声明:看了fly和springkang的脱文后上手练习之作,纯属感兴趣,没有其他目的,如有失误请多指教。
********************************************************************************************************************************************
脱壳过程:

下载软件后peid查是tElock 0.98b1 -> tE!的壳,随便抓个脱壳机脱了。
再查,壳为EncryptPE 1.2003.5.18 -> WFS *

Od插件去掉调试器标志,忽略所有异常选项。添加“同时忽略0EEDFADE、C0000008、009B25C、00953D74”异常
载入后停在下面:
00462000 >  60              pushad
00462001    9C              pushfd
00462002    64:FF35 0000000>push dword ptr fs:[0]
00462009    E8 79010000     call qqgamek.00462187
0046200E    0000            add byte ptr ds:[eax],al
00462010    0000            add byte ptr ds:[eax],al
发现入口关键字。启用esp定律。F8到00462002    64:FF35 0000000>push dword ptr fs:[0]
查看esp值为0012ffa0
命令行下断d 0012ffa0 下断点――硬件访问――dword断点
F9运行
程序中断在下面地方:
711A37AE    25 00010000     and eax,100
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]
删除硬件断点。Alt+M调出内存窗口,属于主程序qqgamek的有如下几项:
内存映射,项目 22
地址=00400000
大小=00001000 (4096.)
物主=qqgamek  00400000 (自身)
区段=
包含=PE header
类型=Imag 01001002
访问=R
初始访问=RWE

内存映射,项目 23
地址=00401000
大小=00061000 (397312.)
物主=qqgamek  00400000
区段=.data
类型=Imag 01001002
访问=R
初始访问=RWE

内存映射,项目 24
地址=00462000
大小=0007B000 (503808.)
物主=qqgamek  00400000
区段=.data
包含=code,imports
类型=Imag 01001002
访问=R
初始访问=RWE

内存映射,项目 25
地址=004DD000
大小=00005000 (20480.)
物主=qqgamek  00400000
区段=.rsrc
包含=resources
类型=Imag 01001002
访问=R
初始访问=RWE

内存映射,项目 26
地址=004E2000
大小=00003000 (12288.)
物主=qqgamek  00400000
区段=.data
包含=data
类型=Imag 01001002
访问=R
初始访问=RWE

选择内存映射,项目 23 下内存访问断点(这里还是不大明白。为什么下这不是下在项目24的code那。参考springkang老大写的脱文下的)

F9运行,直接中断在程序的oep了。使用LordPE完整dump,得到dumped.exe(试过用od的dump插件dump,结果进程直接死掉。希望老大们告知原因)

下面。
要获得程序的输入表进行修复。
我使用的是fly老大的脱壳――Win98的Notepad里的方法

Od重新载入程序
BP IsDebuggerPresent下断断下后取消断点。
程序断在如下位置
7C812E03 >  64:A1 18000000  mov eax,dword ptr fs:[18]
7C812E09    8B40 30         mov eax,dword ptr ds:[eax+30]
7C812E0C    0FB640 02       movzx eax,byte ptr ds:[eax+2]
7C812E10    C3              retn
7C812E11    90              nop

继续下断 BP GetProcAddress
F9运行。观察堆栈 直到
0012FEDC    711A41BE  /CALL 到 GetProcAddress 来自 V1200351.711A41B9
0012FEE0    7C800000  |hModule = 7C800000 (kernel32)
0012FEE4    00ADC6C0  \ProcNameOrOrdinal = "VirtualProtect"
0012FEE8    0012FEF4  指针到下一个 SEH 记录

F2取消断点,然后Ctrl+F9返回
7C80AC87     C2 0800               retn 8
7C80AC8A     837D 10 00            cmp dword ptr ss:[ebp+10],0
7C80AC8E   ^ 0F85 81E6FFFF         jnz kernel32.7C809315

F8跟进一步。到
711A41BE     8945 B8               mov dword ptr ss:[ebp-48],eax               ; kernel32.VirtualProtect
711A41C1     33C0                  xor eax,eax
711A41C3     8903                  mov dword ptr ds:[ebx],eax
711A41C5     8B45 C0               mov eax,dword ptr ss:[ebp-40]
711A41C8     E8 3F07F8FF           call V1200351.7112490C
711A41CD     8BC8                  mov ecx,eax
711A41CF     8B45 B0               mov eax,dword ptr ss:[ebp-50]
711A41D2     83C0 02               add eax,2
711A41D5     8BD3                  mov edx,ebx
711A41D7     E8 0834F8FF           call V1200351.711275E4
711A41DC     A1 74C71B71           mov eax,dword ptr ds:[711BC774]
711A41E1     8038 00               cmp byte ptr ds:[eax],0
711A41E4     0F85 D8010000         jnz V1200351.711A43C2
711A41EA     8A45 EF               mov al,byte ptr ss:[ebp-11]
711A41ED     50                    push eax
711A41EE     A1 14C91B71           mov eax,dword ptr ds:[711BC914]
711A41F3     8B00                  mov eax,dword ptr ds:[eax]
711A41F5     8B55 E4               mov edx,dword ptr ss:[ebp-1C]
711A41F8     8B0490                mov eax,dword ptr ds:[eax+edx*4]
711A41FB     8B4D B4               mov ecx,dword ptr ss:[ebp-4C]
711A41FE     8B55 B8               mov edx,dword ptr ss:[ebp-48]
711A4201     E8 E2F0FFFF           call V1200351.711A32E8
711A4206     E9 B7010000           jmp V1200351.711A43C2

其中711A4201     E8 E2F0FFFF           call V1200351.711A32E8
为加密iat的地方。
对711A4201下硬件执行断点
Ctrl+F2重载程序。F9运行,程序断在
711A4201     E8 E2F0FFFF           call V1200351.711A32E8

取消硬件断点 F7跟进call
到达这:
711A32E8     55                    push ebp
711A32E9     8BEC                  mov ebp,esp
711A32EB     83C4 F8               add esp,-8
711A32EE     53                    push ebx

修改711A33A1     8B55 F8               mov edx,dword ptr ss:[ebp-8]
为711A33A1     8B55 F8               mov edx,dword ptr ss:[ebp-4]

F9运行
程序中断在异常处。不管它,打开ImportREC 选中调试中的qqgamek.exe进程。Oep中填写前文得到的
00021D4D 点自动搜索IAT,获取输入表 当前值都为真。直接修复抓取文件dump.exe。运行。程序可以执行。Peid和fi查壳 为Microsoft Visual C++ 7.0 。至此。脱壳完毕。

********************************************************************************************************************************************
总结:本文参考了fly老大和springkang老大的脱文,学习到了很多东西,向两位大虾致敬。同时也向王老师致敬,不好意思拿他的壳开刀了。
********************************************************************************************************************************************

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
抢个沙发坐
2005-8-9 12:34
0
雪    币: 217
活跃值: (91)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
学习、再学习!
2005-8-9 13:20
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
炒冷饭,你可以试试看14的非ser的版本
2005-8-9 14:04
0
游客
登录 | 注册 方可回帖
返回
//