标 题:Awave Studio v7.0的破解之SMC--- C-pen
发信人:1212
时 间:2000-12-8 14:42:19
详细信息:
一. 前言: 用SMC去破解ASProtect的保护实在是一种痛苦的事,不过既然有人有兴趣,那我们就来谈谈吧!在底下的文章,我将假设读者已对ASProtect的保护有初步的了解,也跟踪过它,对SMC的技巧有概念,最后先申明一点,因为ASProtect的多层次压缩,所以你要用SMC的话,一定会很繁杂的,希望你有耐心看完并实作,也希望本文能对你有所帮助。
二. 使用工具: (1)Soft-ICE V.4.01 (2)FrogICE (3)16进位编辑器(建议使用Hex workshop和Hiew(方便除错))
三. 本文:
1. ASProtect的保护机制:
(1) 动态位址: 我们要用SMC首先要克服的就是ASProtect的Relocation,它每次运行 的位址都不一样,而我们的Code是不会变动的,故你必须先了解ASProtect是如何Relocation的,答案是ASProtect调用GetTickCount函数,拿其值去当IMAGE_RELOCATION结构中的RelocCount成员,读者有兴趣可以去查阅IMAGE_RELOCATION结构的相关资讯及编程,在此不加详述。其程式码如下:
EAX=GetTickCount
25FFFF0100 AND EAX,0001FFFF
EB04 JMP 0051722F
我们改为:
B811110100 MOV EAX,00011111
EB04 JMP 0051722F
如此RelocCount就会是一个常数,用Hex workshop 打开Awave.exe寻找
25FFFF0100EB04 <-- 将是唯一
改B811110100EB04
如此位址就会固定,不再是变动的了。
(2)多层次压缩:
A..ASProtect的程式码 <--我们称为第一层,这是可以用16进位编辑器直接修改的 地方
B. 解压部份代码 <-- 第二层
C. 解压部份代码 <-- 第三层
D. 利用第三层代码解压第四层代码 <-- 第四层亦就是ASProtect,Anti-Debugger,
CRC Check,Time Limit,NagScreen等….的地方
E. 利用第四层代码解压主程式代码,Import Table加密等 <-- 第五层
如此层层相扣,不要说它在Import Table作手脚,如此多层次的压缩,你要用内存补丁(指在有Soft-ICE的环境下) 机乎很难工作。
(3)首先我们要对付的是ASProtect的保护:
这个软体有3种,Anti-Debugger,BoundsCheck,CRC Check
[Anti-Debugger]:
:005D6184 CALL 005D60D4 <--\\.\SIWDEBUG
:005D6189 TEST AL,AL
:005D618B(753A) JNZ 005D61C7 <-- NOP
:005D618D CALL KERNEL32!GetLastError
:005D6192 CMP EAX,02
:005D6195(7530) JNZ 005D81C7 <-- NOP
:005D6197 MOV EAX,[005DC878]
:005D619C CALL 005D60D4 <-- \\.\SICE
:005D61A1 TEST AL,AL
:005D61A3(7522) JNZ 005D61C7 <-- NOP
:005D61A5 CALL KERNEL32!GetLastError
:005D61AA CMP EAX,02
:005D61AD(7518) JNZ 005D61C7 <-- NOP
:005D61AF MOV EAX,[005DC874]
:005D61B4 CALL 005D60D4 <-- \\.\NTICE
:005D61B9 TEST AL,AL
:005D61BB(750A) JNZ 005D61C7 <-- NOP
:005D61BD CALL KERNEL32!GetLastError
:005D61C2 CMP EAX,02
:005D61C5(7413) JZ 005D61DA <-- JMP
[BoundsCheck]:
:005D6234 MOV EBP,4243484B
:005D6239 JMP 005D623D
发信人:1212
时 间:2000-12-8 14:42:19
详细信息:
一. 前言: 用SMC去破解ASProtect的保护实在是一种痛苦的事,不过既然有人有兴趣,那我们就来谈谈吧!在底下的文章,我将假设读者已对ASProtect的保护有初步的了解,也跟踪过它,对SMC的技巧有概念,最后先申明一点,因为ASProtect的多层次压缩,所以你要用SMC的话,一定会很繁杂的,希望你有耐心看完并实作,也希望本文能对你有所帮助。
二. 使用工具: (1)Soft-ICE V.4.01 (2)FrogICE (3)16进位编辑器(建议使用Hex workshop和Hiew(方便除错))
三. 本文:
1. ASProtect的保护机制:
(1) 动态位址: 我们要用SMC首先要克服的就是ASProtect的Relocation,它每次运行 的位址都不一样,而我们的Code是不会变动的,故你必须先了解ASProtect是如何Relocation的,答案是ASProtect调用GetTickCount函数,拿其值去当IMAGE_RELOCATION结构中的RelocCount成员,读者有兴趣可以去查阅IMAGE_RELOCATION结构的相关资讯及编程,在此不加详述。其程式码如下:
EAX=GetTickCount
25FFFF0100 AND EAX,0001FFFF
EB04 JMP 0051722F
我们改为:
B811110100 MOV EAX,00011111
EB04 JMP 0051722F
如此RelocCount就会是一个常数,用Hex workshop 打开Awave.exe寻找
25FFFF0100EB04 <-- 将是唯一
改B811110100EB04
如此位址就会固定,不再是变动的了。
(2)多层次压缩:
A..ASProtect的程式码 <--我们称为第一层,这是可以用16进位编辑器直接修改的 地方
B. 解压部份代码 <-- 第二层
C. 解压部份代码 <-- 第三层
D. 利用第三层代码解压第四层代码 <-- 第四层亦就是ASProtect,Anti-Debugger,
CRC Check,Time Limit,NagScreen等….的地方
E. 利用第四层代码解压主程式代码,Import Table加密等 <-- 第五层
如此层层相扣,不要说它在Import Table作手脚,如此多层次的压缩,你要用内存补丁(指在有Soft-ICE的环境下) 机乎很难工作。
(3)首先我们要对付的是ASProtect的保护:
这个软体有3种,Anti-Debugger,BoundsCheck,CRC Check
[Anti-Debugger]:
:005D6184 CALL 005D60D4 <--\\.\SIWDEBUG
:005D6189 TEST AL,AL
:005D618B(753A) JNZ 005D61C7 <-- NOP
:005D618D CALL KERNEL32!GetLastError
:005D6192 CMP EAX,02
:005D6195(7530) JNZ 005D81C7 <-- NOP
:005D6197 MOV EAX,[005DC878]
:005D619C CALL 005D60D4 <-- \\.\SICE
:005D61A1 TEST AL,AL
:005D61A3(7522) JNZ 005D61C7 <-- NOP
:005D61A5 CALL KERNEL32!GetLastError
:005D61AA CMP EAX,02
:005D61AD(7518) JNZ 005D61C7 <-- NOP
:005D61AF MOV EAX,[005DC874]
:005D61B4 CALL 005D60D4 <-- \\.\NTICE
:005D61B9 TEST AL,AL
:005D61BB(750A) JNZ 005D61C7 <-- NOP
:005D61BD CALL KERNEL32!GetLastError
:005D61C2 CMP EAX,02
:005D61C5(7413) JZ 005D61DA <-- JMP
[BoundsCheck]:
:005D6234 MOV EBP,4243484B
:005D6239 JMP 005D623D





