飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 6514|回复: 5

[原创] PEncrypt 3.1 Final手动修复函数,去自效检简单脱文

[复制链接]

该用户从未签到

发表于 2006-9-2 17:58:46 | 显示全部楼层 |阅读模式
破解作者】 windycandy[PYG]
【使用工具】 OD,Peid0.94,LordPE,ImportREC F1.6
【破解平台】 WinXP
【软件名称】 winzip 9.0汉化版
【下载地址】 www.hanzify.org
【软件简介】 这个软件没有人不知道吧,此汉化版是企业注册版,本文只是将手动修复的过程写出来与大家分享,希望大家喜欢。
【加壳方式】 PEncrypt 3.1 Final -> junkcode
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】


1.前言

本软件是汉化世纪吕达嵘前辈的汉化版本,最近看到论坛有朋友写脱这个壳的教程,再写上一个简单
的手动修复无效函数及去自效检的文章做灌水。献给象我一样的菜鸟,高手则略国。

2.过程

OD 载入加壳程序

004A0D42 W> $  B8 00506B00           mov eax,WINZIP32.006B5000
004A0D47    .  FFD0                            call eax
004A0D49    .  78 62                            js short WINZIP32.004A0DAD
004A0D4B    .  2D 0000BF94              sub eax,94BF0000
004A0D50    .  0000                            add byte ptr ds:[eax],al
004A0D52    .  008B C7E8A60A         add byte ptr ds:[ebx+AA6E8C7],cl
004A0D58    .  0000                           add byte ptr ds:[eax],al

用网友snetluck提供的方法
https://www.chinapyg.com/viewthr ... &extra=page%3D1
直接在命令行下 hr eip

F9运行,中断在

006B52A7     F3:A4                   rep movs byte ptr es:[edi],byte ptr ds>----------中断在这里
006B52A9     59                        pop ecx
006B52AA     5F                        pop edi
006B52AB     5E                        pop esi
006B52AC     C3                        retn-------------------返回OEP

F8几下就到达OEP了

004A0D42 W> $  6A 60                   push 60
004A0D44    ?  68 F8634C00           push WINZIP32.004C63F8
004A0D49    .  E8 622D0000           call WINZIP32.004A3AB0
004A0D4E    ?  BF 94000000           mov edi,94
004A0D53    ?  8BC7                        mov eax,edi
004A0D55    ?  E8 A60A0000           call WINZIP32.004A1800
004A0D5A    .  8965 E8                    mov dword ptr ss:[ebp-18],esp
004A0D5D    .  8BF4                         mov esi,esp
004A0D5F    .  893E                          mov dword ptr ds:[esi],edi
004A0D61    .  56                              push esi

到这里用LordPE纠正大小后dump

不关OD,直接用ImportREC F1.6填入OEP:A0D42,自动查找IAT,发现有一个无效函数
rva:000BC0E0   ptr:006B5337

Level 1无法修复,直接剪掉后修复,但是运行修复后的程序出错并退出运行。
看来这个无效函数是不能直接剪掉的。好的,让我们来寻找并修复这个函数

ctrl+F2重新载入加壳程序
先在命令行下he eip (这是为了方便找到OEP)
命令行下dd 4BC0E0 (即上面无效函数的rav+基址)
你在数据窗口看到了什么?4BC0E0上的函数是不是好好的在那里吗?

004BC0E0 >77C4889D  GDI32.CreateFontIndirectA-----------------就是这个东东
004BC0E4 >77C6DC9C  GDI32.UpdateColors
004BC0E8 >77C436D1  GDI32.CreateCompatibleBitmap

现在有这个函数,为什么在脱壳后不能修复呢?很简单,加壳程序肯定对这个函数进行处理了
跟踪一下就知道了, let's go!!!
在数据窗口单击鼠标右键------>断点------->硬件访问断点------>Dword

F9运行程序,硬件中断

006B5223     8956 24             mov dword ptr ds:[esi+24],edx  GDI32.CreateFontIndirectA-------断在这里
006B5226     E8 06010000     call WINZIP32.006B5331
006B522B     8B56 75             mov edx,dword ptr ds:[esi+75]
006B522E     8902                   mov dword ptr ds:[edx],eax
006B5230     8B56 28              mov edx,dword ptr ds:[esi+28]
006B5233     8956 75              mov dword ptr ds:[esi+75],edx

F8往下走,注意数据窗口数值的变化

004BC0E0 >77C4889D  GDI32.CreateFontIndirectA---------------这是原来的数值
004BC0E4 >77C6DC9C  GDI32.UpdateColors
004BC0E8 >77C436D1  GDI32.CreateCompatibleBitmap
004BC0EC >77C4217C  GDI32.CreateSolidBrush
004BC0F0 >77C42945  GDI32.IntersectClipRect

当F8到006B522E时,OD中间的窗口可以看到以下两个数值。
eax=006B5337 (WINZIP32.006B5337)
ds:[004BC0E0]=77C4889D (GDI32.CreateFontIndirectA)

当F8步过006B522E后,数据窗口的数值发生了变化

004BC0E0 >006B5337  WINZIP32.006B5337----------------------原来的函数被这个数值代替了
004BC0E4 >77C6DC9C  GDI32.UpdateColors
004BC0E8 >77C436D1  GDI32.CreateCompatibleBitmap
004BC0EC >77C4217C  GDI32.CreateSolidBrush
004BC0F0 >77C42945  GDI32.IntersectClipRect

到这里,我们可以知道加壳程序在006B522E     8902            mov dword ptr ds:[edx],eax处对函数进行处理
要避开其对函数的处理,将其NOP掉即可。

OD重新载入加壳程序,用以上方法到006B522E,将其nop掉,
F9运行(hr eip)中断
006B52A7     F3:A4                   rep movs byte ptr es:[edi],byte ptr ds>---------中断在这里
006B52A9     59                      pop ecx
006B52AA     5F                      pop edi
006B52AB     5E                      pop esi
006B52AC     C3                      retn

然后一路F8到OEP

004A0D42 W> $  6A 60                 push 60
004A0D44    ?  68 F8634C00           push WINZIP32.004C63F8
004A0D49    .  E8 622D0000           call WINZIP32.004A3AB0
004A0D4E    ?  BF 94000000           mov edi,94
004A0D53    ?  8BC7                  mov eax,edi
004A0D55    ?  E8 A60A0000           call WINZIP32.004A1800
004A0D5A    .  8965 E8               mov dword ptr ss:[ebp-18],esp

现在看看用ImportREC F1.6是不是可以找到所有有效函数了?!!!

运行修复后的程序,出错了,将修复后的程序改名为脱壳前程序的名字,可以正常运行!哈哈看来这个程序有自效检。

现在来对付这个自效检:

OD载入脱壳后的程序

下bp CreateFileA断点, F9运行中断后,Alt+F9返回程序
一路F8,到以下call时弹出错误信息

00444304   |.  E8 27EA0200           call dumped_.00472D30---这里出错
00444309   |.  84C0                  test al,al
0044430B   |.  0F84 B6010000         je dumped_.004444C7

重新载入,并来到444304,F7进入00444304 处的call,并一路F8来到

00472E63   |.  E8 BB140000           call dumped_.00474323
00472E68   |.  83C4 0C               add esp,0C
00472E6B   |.  84C0                  test al,al
00472E6D   |.  74 0A                 je short dumped_.00472E79-------------------------------注意这个跳转
00472E6F   |.  893D C0704E00         mov dword ptr ds:[4E70C0],edi
00472E75   |.  B3 01                 mov bl,1

脱壳后的程序在00472E6D处的跳转已经实现,而OD在入没脱壳程序跟踪到这里的跳转不实现。
将00472E6D处的跳转NOP掉,另存为另一个程序后运行依然出错,看来nop是不能解决这个自效检的问题,
向上找到00472E63的call,看来这个call 有问题。F7跟踪进去

0047446C   |.  E8 43FEFFFF           call dumped_.004742B4
00474471   |.  84C0                         test al,al
00474473   |.  59                              pop ecx
00474474   |.  59                              pop ecx
00474475   |.  75 26                         jnz short dumped_.0047449D

跟踪脱壳后的程序到00474475处的跳转没有实现,而在跟踪没脱壳前的到这里时跳转是实现的,
将脱壳后程序词处的jnz改为JMP即刻解除程序的自效检。







--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
PYG19周年生日快乐!

该用户从未签到

发表于 2006-9-3 00:19:19 | 显示全部楼层
很详细的分析,学习了。
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-4-15 23:26
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2006-9-3 07:27:31 | 显示全部楼层
    谢谢LZ了。。。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-9-3 09:30:09 | 显示全部楼层
    学习了更喜欢你做个动画在旁边一边解释一边做/:D
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-9-28 17:12:35 | 显示全部楼层
    学习一下对付壳的API加密 可惜找不到原程序了 ~~
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    前天 08:56
  • 签到天数: 1837 天

    [LV.Master]伴坛终老

    发表于 2007-10-6 19:35:01 | 显示全部楼层
    很详细的
    再此谢谢了
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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