飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2688|回复: 7

[转贴] PC-Guard 5.0 加密文件简捷无KEY脱壳分析

[复制链接]

该用户从未签到

发表于 2008-1-20 11:29:02 | 显示全部楼层 |阅读模式
Writer by KuNgBiM/[CCG]

Email: kungbim@163.com

Date: January 18, 2008

Debuger Tools: OllyICE、Universal Import Fixer (UIF)、ImportREC

【目标程序信息】

Particle Illusion 3.03

官方主页:http://www.wondertouch.com

Particle Illusion 是一套分子特效應用軟體,使用簡單、快速、功能強大、特效豐富,現在有愈來愈多的多媒體製作公司,使用 Particle Illusion 的特效,包括武俠劇的打鬥效果, Particle Illusion已成為電視台、廣告商、動畫製作、遊戲公司製作特效的必備軟體了。

【分析文件】

PEiD查壳后可知文件中由PC-Guard 5.0加壳的文件有:

particleIllusion.exe
pIllusionRender.exe
wtpi302lic.dll(这个也是PC-Guard 5.0加壳,但分析后得出结论,该文件属于授权系统自带的库文件,所以就不需要脱壳了,删除也罢 )

【正文】

由于篇幅及通用性关系,此篇文件就以particleIllusion.exe主程序作为分析脱壳目标程序。

【找寻OEP】

OllyICE载入目标文件:

0068E000 >  FC                 cld                                       ; EP
0068E001    55                 push ebp
0068E002    50                 push eax
0068E003    E8 00000000        call particle.0068E008
0068E008    5D                 pop ebp
0068E009    60                 pushad
0068E00A    E8 03000000        call particle.0068E012
0068E00F    83EB 0E            sub ebx,0E
0068E012    EB 01              jmp short particle.0068E015
0068E014    0C 58              or al,58
0068E016    EB 01              jmp short particle.0068E019
0068E018    35 40EB0136        xor eax,3601EB40
0068E01D    FFE0               jmp eax
0068E01F    0B61 B8            or esp,dword ptr ds:[ecx-48]
0068E022    9C                 pushfd
0068E023    3941 00            cmp dword ptr ds:[ecx],eax
0068E026    EB 01              jmp short particle.0068E029
0068E028    E3 60              jecxz short particle.0068E08A
0068E02A    E8 03000000        call particle.0068E032
0068E02F    D2EB               shr bl,cl
0068E031    0B58 EB            or ebx,dword ptr ds:[eax-15]

Alt+M打开内存镜像,并在第一区段F2下断,Shift+F9运行。

等出现PC-Guard的注册界面后直接“Continue”:

00BB10FB    281F               sub byte ptr ds:[edi],bl                  ; 中断在此
00BB10FD    50                 push eax
00BB10FE    8B85 B54C4200      mov eax,dword ptr ss:[ebp+424CB5]
00BB1104    3207               xor al,byte ptr ds:[edi]
00BB1106    D1C0               rol eax,1
00BB1108    8985 B54C4200      mov dword ptr ss:[ebp+424CB5],eax
00BB110E    58                 pop eax
00BB110F    47                 inc edi
00BB1110    59                 pop ecx
00BB1111    E2 02              loopd short 00BB1115
00BB1113    EB 05              jmp short 00BB111A
00BB1115  ^ E9 21FFFFFF        jmp 00BB103B

Alt+M再次打开内存镜像,并在PE文件头F2下断,Shift+F9运行:

7C930806    66:8139 4D5A       cmp word ptr ds:[ecx],5A4D                 ; 中断在此
7C93080B    75 1D              jnz short ntdll.7C93082A
7C93080D    8B51 3C            mov edx,dword ptr ds:[ecx+3C]
7C930810    81FA 00000010      cmp edx,10000000
7C930816    73 12              jnb short ntdll.7C93082A
7C930818    8D040A             lea eax,dword ptr ds:[edx+ecx]
7C93081B    8945 E4            mov dword ptr ss:[ebp-1C],eax
7C93081E    8138 50450000      cmp dword ptr ds:[eax],4550
7C930824    0F85 8B830200      jnz ntdll.7C958BB5
7C93082A    834D FC FF         or dword ptr ss:[ebp-4],FFFFFFFF
7C93082E    E8 CFE5FFFF        call ntdll.7C92EE02
7C930833    C2 0400            retn 4

Alt+M最后一次打开内存镜像,并在第一区段F2下断,Shift+F9运行,飞向OEP:

004D7F46    6A 60              push 60                                    ; OEP
004D7F48    68 A8A75300        push particle.0053A7A8
004D7F4D    E8 D6080000        call particle.004D8828
004D7F52    BF 94000000        mov edi,94
004D7F57    8BC7               mov eax,edi
004D7F59    E8 D2F3FFFF        call particle.004D7330
004D7F5E    8965 E8            mov dword ptr ss:[ebp-18],esp
004D7F61    8BF4               mov esi,esp
004D7F63    893E               mov dword ptr ds:[esi],edi
004D7F65    56                 push esi
004D7F66    FF15 08F45100      call dword ptr ds:[51F408]                 ; kernel32.GetVersionExA
004D7F6C    8B4E 10            mov ecx,dword ptr ds:[esi+10]
004D7F6F    890D B4A65500      mov dword ptr ds:[55A6B4],ecx
004D7F75    8B46 04            mov eax,dword ptr ds:[esi+4]
004D7F78    A3 C0A65500        mov dword ptr ds:[55A6C0],eax
004D7F7D    8B56 08            mov edx,dword ptr ds:[esi+8]
004D7F80    8915 C4A65500      mov dword ptr ds:[55A6C4],edx
004D7F86    8B76 0C            mov esi,dword ptr ds:[esi+C]
004D7F89    81E6 FF7F0000      and esi,7FFF
004D7F8F    8935 B8A65500      mov dword ptr ds:[55A6B8],esi
004D7F95    83F9 02            cmp ecx,2
004D7F98    74 0C              je short particle.004D7FA6

【Dump及修复IAT】

1、使用OllyDump插件去掉"Rebuild Import"选项后,直接在OEP处dump保存文件。

注意:如果这时直接使用ImportREC修复文件,IAT会存在一个无效函数,所以我们现在利用新工具Universal Import Fixer (UIF)来获取及修正IAT。

2、在此时的OD中打开附件进程功能,找到目标进程,复制进程的PID,然后打开UIF并粘贴到"Process ID"中,勾选"Fix Dircetly Imports"选项,OK,"Start"开始修复IAT表。

UIF修复记录:(附件:Uif-Log.txt)

===============================================================

Patch Success...

IAT RVA  : 00FB0000
IAT Size : 0000093C

Normal Imports   : 4644
Directly Imports : 0
All Imports      : 4644

===============================================================

3、运行ImportREC,设置选项:重建原始FT、创建新的IAT、修正EP到OEP、使用来自磁盘的PE头文件头,最后找到进程并填写相关数据:

OEP      : 000D7F46
IAT RVA  : 00FB0000
IAT Size : 0000093C

最后获取输入表,检查函数全部有效,修复抓取文件即可。

程序运行正常,程序为 Microsoft Visual C++ 7.0 所编译。

【小小总结】

PC-Guard 5.0 在没使用SDK而加壳的情况下可以不需要KEY来解码。

【鸣谢】

感谢linhanshi一直长期为我们提供国外的优秀工具。

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入我们

x
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2008-1-20 11:29:54 | 显示全部楼层
目标程序下载:
hxxp://rapidshare.com/files/84809303/particleIllusion3.03.rar.html
大侠的作品,转来学习下!
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2008-1-20 11:31:35 | 显示全部楼层
这个是脚本:
@KuNgBiM
try script PC Guard Original iat restore for app. MSVC
var gmh
var codebase
var szcode
var iat_st
var dll_n
var i_sz
var chk_dl
var cnt
var pntwr
var path
var i_wr
var pntchk
var imbase
var load
var chk_oep
var counter
var oep
var chek_data
var endiat_pg
mov counter,0
ask "Введите адрес секции .data или .rdata или .idata.(Enter the address of section .data or .rdata or .idata.)"
cmp $RESULT, 0
je quit
mov intd,$RESULT
and intd,FF0000

GMI eip, MODULEBASE
mov imbase,$RESULT
GMI eip, CODEBASE
mov codebase,$RESULT

GMEMI codebase, MEMORYSIZE
mov szcode,$RESULT
mov espval,esp-4
gpa "GetModuleHandleA","kernel32.dll"
mov gmh,$RESULT


bpwm codebase, szcode
erun
bpmc
bp gmh
chek_pl:
erun
mov chek_data,ebx
and chek_data,FF0000
cmp chek_data,intd
jne chek_pl

mov dll_n,eax
rtu
mov chk_dl,eax
mov pntchk,eip
mov load,pntchk
add load,B
bc gmh
find eip,#C3#
cmp $RESULT,0
je quit
bp $RESULT
erun
bc eip
rtu

sti
mov pntwr,eip
find eip,#89048FEB01#
cmp $RESULT,0
je quit
fill $RESULT,3,90
find eip,#668946FE#
cmp $RESULT,0
je quit
fill $RESULT,4,90
find eip,#89048A33C0#
cmp $RESULT,0
je quit
mov path,$RESULT+8
fill $RESULT,3,90
fill path,2,90


bp pntchk
mov iat_st,ebx
find ebx,#0000000000000000#
cmp $RESULT,0
je quit
mov endiat_pg,$RESULT-4
lwr:

fill ebx,14,00
mov i_wr,ebx
mov [i_wr],edx-imbase
add i_wr,c
mov [i_wr],dll_n-imbase
add i_wr,4
sti
mov [i_wr],edi

loop:

erun
bphws espval,"r"
cmp eip,pntchk
jne go_oep
cmp eax,0
je noload
cmp eax,chk_dl,
je loop

lWr1:
mov dll_n,ebx
mov chk_dl,eax

bp pntwr
erun
bc pntwr
jmp lwr

noload:

go load
jmp lWr1
go_oep:

f:
mov chk_oep,eip
add codebase,szcode
cmp chk_oep,codebase
ja find
cmp imbase,chk_oep
ja find

//---------check iat--------
sub endiat_pg,i_wr
cmp endiat_pg,14
je fill_z
final:
mov oep,eip
sub oep,imbase
sub iat_st,imbase
mov counter,imbase
add counter,3C
mov counter,[counter]
add counter,imbase
add counter,28
mov [counter],oep
add counter,58
mov [counter],iat_st
DPE "dump.exe",eip
msg "The file is completely unpacked! Dump it on a disk. Do not use ImpREC, import is already restored! "
ret
find:
erun
jmp f
quit:
msg "Not PCGUARD"
ret
fill_z:
fill i_wr+4,14,00
jmp final
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-12-19 05:15
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2008-1-21 08:43:48 | 显示全部楼层
    真是及时雨啊,谢谢楼主
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2024-2-5 17:25
  • 签到天数: 980 天

    [LV.10]以坛为家III

    发表于 2008-1-21 09:27:05 | 显示全部楼层
    真是太感谢KuNgBiM大侠帮我把这个软件脱壳了,现在汉化工作已经基本完成。这个教程做的也很好,学习了!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-12-19 05:15
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2008-1-21 10:45:23 | 显示全部楼层
    那个脚本怎么用,在什么时候用
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-12-19 05:15
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2008-1-21 12:26:10 | 显示全部楼层
    为什么脱壳后的程序运行后退出程序后出错

    [ 本帖最后由 pygwang 于 2008-1-21 12:29 编辑 ]

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-1-21 15:38:51 | 显示全部楼层
    真是及时的学习资料啊
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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