首页
论坛
专栏
课程

[商业保护] StarForce 加密小窥

2005-4-7 14:53 25845

[商业保护] StarForce 加密小窥

2005-4-7 14:53
25845
今天小弟hook 一个函数,不小心却发现了StarForce 超度虚拟光驱的一点秘密,
游戏名称《大富翁7》,保护方式Starforce 3.3,今天偶hook ScsiPortInitialize
函数跟Starforce 撞车,也许这对大家早就不是秘密了,可是对偶却是新鲜。所以
贴上来让大家见笑。

starforce保护文件的名称 prosync1.sys

这个文件属性如下:
该文件的说明
StarForce Protection Synchronization Driver
产品版本
version 3.3

StarForce Protection System

.text:000103E5 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:000103E8                 align 10h
.text:000103F0 aScsiportinitia db 'ScsiPortInitialize',0 ; DATA XREF: sub_10411+A4o
.text:00010403                 align 4
.text:00010404 aNtoskrnl_exe   db 'ntoskrnl.exe',0     ; DATA XREF: sub_10411+E4o
.text:00010411
.text:00010411 ; 圹圹圹圹圹圹圹?S U B R O U T I N E 圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹?
.text:00010411
.text:00010411
.text:00010411 sub_10411       proc near               ; CODE XREF: start+85p
.text:00010411                 push    esi
.text:00010412                 push    0
.text:00010414                 push    656E6F4Eh
.text:00010419                 push    10h
.text:0001041B                 push    0
.text:0001041D                 push    0
.text:0001041F                 push    0
.text:00010421                 push    offset unk_111B0
.text:00010426                 call    sub_10340
.text:0001042B                 push    0
.text:0001042D                 push    656E6F4Eh
.text:00010432                 push    0Ch
.text:00010434                 push    0
.text:00010436                 push    0
.text:00010438                 push    0
.text:0001043A                 push    offset unk_11238
.text:0001043F                 call    sub_10340
.text:00010444                 push    offset unk_111A4
.text:00010449                 call    ds:KeInitializeSpinLock
.text:0001044F                 push    2Ch
.text:00010451                 push    0
.text:00010453                 push    offset dword_1120C
.text:00010458                 call    memset
.text:0001045D                 add     esp, 0Ch
.text:00010460                 mov     byte_11200, 0
.text:00010467                 mov     eax, offset dword_11288
.text:0001046C                 mov     dword_1128C, eax
.text:00010471                 mov     dword_11288, eax
.text:00010476                 mov     dword_11208, 0
.text:00010480                 call    sub_10871
.text:00010485                 mov     esi, eax
.text:00010487                 test    esi, esi
.text:00010489                 jz      short loc_104A5
.text:0001048B                 push    edi
.text:0001048C                 mov     edi, ds:ExDeleteNPagedLookasideList
.text:00010492                 push    offset unk_11238
.text:00010497                 call    edi ; ExDeleteNPagedLookasideList
.text:00010499                 push    offset unk_111B0
.text:0001049E                 call    edi ; ExDeleteNPagedLookasideList
.text:000104A0                 mov     eax, esi
.text:000104A2                 pop     edi
.text:000104A3                 pop     esi
.text:000104A4                 retn
.text:000104A5 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:000104A5
.text:000104A5 loc_104A5:                              ; CODE XREF: sub_10411+78j
.text:000104A5                 push    offset loc_11100
.text:000104AA                 call    sub_10ABA
.text:000104AF                 push    eax
.text:000104B0                 call    sub_10ACA
.text:000104B5                 push    offset aScsiportinitia ; "ScsiPortInitialize"
.text:000104BA                 push    eax
.text:000104BB                 mov     dword_111A0, eax
.text:000104C0                 call    sub_10AFA//这里是hook "ScsiPortInitialize",
.text:000104C5                 push    0
.text:000104C7                 push    0
.text:000104C9                 push    0
.text:000104CB                 push    0
.text:000104CD                 mov     dword_111A8, eax
.text:000104D2                 call    PsGetVersion
.text:000104D7                 test    al, al
.text:000104D9                 jz      short loc_10500
.text:000104DB                 push    offset loc_110EE
.text:000104E0                 call    sub_10ABA
.text:000104E5                 push    offset nullsub_1
.text:000104EA                 mov     dword_11204, eax
.text:000104EF                 push    eax
.text:000104F0                 mov     eax, dword_111A0
.text:000104F5                 push    offset aNtoskrnl_exe ; "ntoskrnl.exe"
.text:000104FA                 push    eax
.text:000104FB                 call    sub_10C0A
.text:00010500
.text:00010500 loc_10500:                              ; CODE XREF: sub_10411+C8j
.text:00010500                 mov     ecx, dword_111A8
.text:00010506                 mov     edx, dword_111A0
.text:0001050C                 push    offset sub_10531//hook "ScsiPortInitialize"的程序的位置,以后程序调用ScsiPortInitialize就先进starfoce的sub_10531
.text:00010511                 push    ecx
.text:00010512                 push    edx
.text:00010513                 call    sub_10BAA
.text:00010518                 xor     eax, eax
.text:0001051A                 pop     esi
.text:0001051B                 retn
.text:0001051B sub_10411       endp ; sp = -10h
.text:0001051B
.text:0001051B ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:0001051C                 dd 90909090h
.text:00010520                 db 90h
.text:00010521 ; [00000003 BYTES: COLLAPSED FUNCTION nullsub_1. PRESS KEYPAD "+" TO EXPAND]
.text:00010524                 dd 3 dup(90909090h)
.text:00010530                 db 90h
.text:00010531

////////////////////////////////////////////////////////////////////////////////////////////////////////////
///由于prosync1.sys以后只要有ScsiPortInitialize调用StarForce 就先接管进这下边的程序。你是虚拟光驱就难逃法眼。
///Starforce可以在你虚拟光区驱动起来之前,这里先去探测你的scsi卡的寄存器。当你有IDE光驱连接的时候,StarForce
如果探测寄存器失败。这下就可以判断出你是虚拟光驱了。叫你换盘插入。嘿嘿,你只有拔掉IDE光驱线骗StarForce,StarForce
//拔掉IDE光驱线后由于探测不到寄存器所以不敢错杀一千,可以让虚拟光驱通过这万里检查的第一步。后边的DPM的检测才是
//真正利害的!
.text:00010531 ; 圹圹圹圹圹圹圹?S U B R O U T I N E 圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹?
.text:00010531
.text:00010531
.text:00010531 sub_10531       proc near               ; DATA XREF: sub_10411+FBo
.text:00010531
.text:00010531 arg_0           = dword ptr  10h
.text:00010531 arg_4           = dword ptr  14h
.text:00010531 arg_8           = dword ptr  18h
.text:00010531 arg_C           = dword ptr  1Ch
.text:00010531
.text:00010531                 push    ebp
.text:00010532                 push    esi
.text:00010533                 push    edi
.text:00010534                 push    offset unk_111B0
.text:00010539                 call    sub_10370
.text:0001053E                 mov     edi, eax
.text:00010540                 test    edi, edi
.text:00010542                 jnz     short loc_1054F
.text:00010544                 pop     edi
.text:00010545                 pop     esi
.text:00010546                 mov     eax, 0C000009Ah
.text:0001054B                 pop     ebp
.text:0001054C                 retn    10h
.text:0001054F ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:0001054F
.text:0001054F loc_1054F:                              ; CODE XREF: sub_10531+11j
.text:0001054F                 mov     eax, [esp+arg_C]
.text:00010553                 mov     ecx, [esp+arg_8]
.text:00010557                 mov     edx, [esp+arg_4]
.text:0001055B                 mov     esi, [esp+arg_0]
.text:0001055F                 push    eax
.text:00010560                 push    ecx
.text:00010561                 push    edx
.text:00010562                 push    esi
.text:00010563                 call    dword_111A8
.text:00010569                 mov     ebp, eax
.text:0001056B                 and     eax, 0C0000000h
.text:00010570                 cmp     eax, 0C0000000h
.text:00010575                 jnz     short loc_1058A
.text:00010577                 push    edi
.text:00010578                 push    offset unk_111B0
.text:0001057D                 call    sub_103B0
.text:00010582                 pop     edi
.text:00010583                 mov     eax, ebp
.text:00010585                 pop     esi
.text:00010586                 pop     ebp
.text:00010587                 retn    10h
.text:0001058A ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:0001058A
.text:0001058A loc_1058A:                              ; CODE XREF: sub_10531+44j
.text:0001058A                 push    ebx
.text:0001058B                 mov     ecx, offset unk_111A4
.text:00010590                 call    ds:KfAcquireSpinLock
.text:00010596                 push    esi
.text:00010597                 mov     bl, al
.text:00010599                 call    sub_10631
.text:0001059E                 test    eax, eax
.text:000105A0                 jnz     short loc_105CB
.text:000105A2                 mov     eax, [esi+34h]
.text:000105A5                 mov     ecx, [esi+74h]
.text:000105A8                 test    eax, eax
.text:000105AA                 mov     [edi+4], esi
.text:000105AD                 mov     [edi+8], ecx
.text:000105B0                 mov     [edi+0Ch], eax
.text:000105B3                 mov     dword ptr [esi+74h], offset sub_10661
.text:000105BA                 jz      short loc_105C3
.text:000105BC                 mov     dword ptr [esi+34h], offset sub_107E1
.text:000105C3
.text:000105C3 loc_105C3:                              ; CODE XREF: sub_10531+89j
.text:000105C3                 push    edi
.text:000105C4                 call    sub_105F1
.text:000105C9                 jmp     short loc_105D6
.text:000105CB ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:000105CB
.text:000105CB loc_105CB:                              ; CODE XREF: sub_10531+6Fj
.text:000105CB                 push    edi
.text:000105CC                 push    offset unk_111B0
.text:000105D1                 call    sub_103B0
.text:000105D6
.text:000105D6 loc_105D6:                              ; CODE XREF: sub_10531+98j
.text:000105D6                 mov     dl, bl
.text:000105D8                 mov     ecx, offset unk_111A4
.text:000105DD                 call    ds:KfReleaseSpinLock
.text:000105E3                 pop     ebx
.text:000105E4                 pop     edi
.text:000105E5                 mov     eax, ebp
.text:000105E7                 pop     esi
.text:000105E8                 pop     ebp
.text:000105E9                 retn    10h
.text:000105E9 sub_10531       endp
.text:000105E9
.text:000105E9 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:000105EC                 dd 90909090h
.text:000105F0                 db 90h
.text:000105F1
.text:000105F1 ; 圹圹圹圹圹圹圹?S U B R O U T I N E 圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹?
.text:000105F1

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//你也许会说了ScsiPortInitialize()这个函数这样重要吗?嘿嘿,对了。ScsiPortInitialize是虚拟光驱的第一口呼吸。
//StarForce hook该函数的目的就是想把虚拟光驱扼杀哭出第一声来之前,真是太惨了。连摇篮都不愿意给虚拟光驱准备。偶
//一直也不知道ScsiPortInitialize的内幕,最近不是M$的NT4 -SRC泄露出来了吗?嘿嘿以下函数就是在NT4 -SRC中带的这个函数
//的细节有兴趣的朋友可以去看看
/*++

Copyright (c) 1990  Microsoft Corporation

Module Name:

    port.c

Abstract:

    This is the NT SCSI port driver.  This file contains the initialization
    code.

Authors:

    Mike Glass
    Jeff Havens

Environment:

    kernel mode only

Notes:

    This module is a driver dll for scsi miniports.

Revision History:

ULONG
ScsiPortInitialize(
    IN PVOID Argument1,
    IN PVOID Argument2,
    IN PHW_INITIALIZATION_DATA HwInitializationData,
    IN PVOID HwContext OPTIONAL
    )

/*++

Routine Description:

    This routine initializes the port driver.

Arguments:

    Argument1 - Pointer to driver object created by system
    HwInitializationData - Miniport initialization structure
    HwContext - Value passed to miniport driver's config routine

Return Value:

    The function value is the final status from the initialization operation.

--*/

{
    PDRIVER_OBJECT    driverObject = Argument1;
    ULONG             slotNumber = 0;
    ULONG             functionNumber = 0;
    PDEVICE_EXTENSION deviceExtension = NULL;
    NTSTATUS          returnStatus = STATUS_DEVICE_DOES_NOT_EXIST;
    NTSTATUS          status;

//不过对付这东西没办法了吗?现在不是有starFuck了吗?名字取的不错,问我,我也不知道其是啥原理,因为我没用过,但
//我想可以通过这样的方法躲过这个检查,就是在starfoce prosync1.sys驱动起来之前建立一个驱动,让它成为“虚拟光驱的
//虚拟光驱”。当prosync1.sys在hook 处理ScsiPortInitialize()的时候返回一些端口数据来骗starforce ,不过daemon-tools
//和alcochol好象没这样处理。谁知道呢?daemon 的DPM数据精度探测处理骗过starforce非常利害。
//偶发这个帖子只是想抛专引玉StarFOrce 在驱动中就有5-6个拦路虎,望各位大大多多给予指正。
//其中处理虚拟光驱的一点点,
                                                      Machoman
                                                      2005/4/5

[公告]安全测试和项目外包请将项目需求发到看雪企服平台:https://qifu.kanxue.com

最新回复 (42)
shuair 2 2005-4-8 09:44
2
0
看不懂,支持
laoqian 8 2005-4-8 09:55
3
0
继续啊,发现看雪这里是技术交流的天堂啊。
machoman 1 2005-4-8 11:07
4
0
请问那里有最新的保护游戏mds下载???偶现在可以过starforce 3.3 和Securom New 4但,新游戏偶找不到下载,要不就是速度好慢.急死了!各位大大给点资源好吗?
云淡风蒺 2005-4-8 15:16
5
0
?主可不可以把你所知晷於starforce driver真得??一?,例如把starforce查Alcohol的代瘁列出?,好?小弟想揠法???程序?Alcohol可以摸似新版starforce光?而不?要用USB-CDROM易?哕行.小弟一向都是想揠法?starforce?,所以?有在starforce driver下咿功夫.著著?主提供?考.
nbw 24 2005-4-8 15:53
6
0
有点深。学习!
warcraft 2005-4-8 16:00
7
0
好东西,楼主加油啊
machoman 1 2005-4-8 16:54
8
0
最初由 云淡风蒺 发布
?主可不可以把你所知晷於starforce driver真得??一?,例如把starforce查Alcohol的代瘁列出?
___________________________________________________________
原则上以上代码就可以检查出虚拟设备,因为虚拟设备没有硬件端口的。
alcohol也不列外。

,好?小弟想揠法???程序?Alcohol可以摸似新版starforce光?而不?要用USB-CDROM易?哕行.小弟一向都是想揠法?starforce?,所以?有在starforce driver下咿功夫.著著?主提供?考.


――――――――――――――――――――――――――――――
偶这个文章只是抛专引玉,偶对光盘脱壳技术已经完全不懂了。要向各位大大好好学习,请各位大大也不要吝惜指教,不过发现论坛里边关于这个的文章好少,偶就斗胆在这里发了这个。希望大家多交流。偶对这个游戏保护的认识非常的粗浅的。

再罗嗦一下:各位大大能给偶一些比较新的StarForce 或SecRom NEw 加密的mds
mdf ,iso image 下载吗?我找一天都没找到合适的。
firstrose 16 2005-4-8 18:13
9
0
由于prosync1.sys以后只要有ScsiPortInitialize调用StarForce 就先接管进这下边的程序。你是虚拟光驱就难逃法眼。
///Starforce可以在你虚拟光区驱动起来之前,这里先去探测你的scsi卡的寄存器。当你有IDE光驱连接的时候,StarForce
如果探测寄存器失败。这下就可以判断出你是虚拟光驱了。叫你换盘插入。嘿嘿,你只有拔掉IDE光驱线骗StarForce,StarForce
//拔掉IDE光驱线后由于探测不到寄存器所以不敢错杀一千,可以让虚拟光驱通过这万里检查的第一步。后边的DPM的检测才是
//真正利害的!
=====================================================

什么意思?

无论win还是daemon都要调scsi_init的。物理寄存器探不到应该就可以判断没有相应的光驱了吧。因为这是ring0。拔不拔ide其实没关系的。我以前只玩过ide的detect,但是scsi原理应该一样
blowfish 2005-4-8 18:16
10
0
去游侠网找新游戏
ffsj 2005-4-9 08:58
11
0
正像所有的ring 0上的hook技术一样,starforce的ScsiPortInitialize 被starforce hook了以后最终还是调用系统自己原始的ScsiPortInitialize(),解决办法可以考虑在加载starforce的sys之前再加载一个sys记录下系统最初的ScsiPortInitialize位置,然后再starforce加载之后恢复之,或者直接枚举系统的PE强制查找到原始的ScsiPortInitialize位置然后恢复之
laoqian 8 2005-4-9 13:57
12
0
这个云淡风蒺 是那个CFB的吗?
三国群英五就是starforce,已经被CFB的风清云淡脱壳,在游侠网有下的,我在玩。
情狼 2005-4-9 16:36
13
0
游侠网上有细胞分裂3:混沌法则下载.这个是新版starforce吧.
nbw 24 2005-4-10 17:54
14
0
难怪以前有些RPG需要拔光驱才能用虚拟光驱。原来如此。

CFB是啥?
1anyh 2005-5-2 00:29
15
0
最初由 nbw 发布
难怪以前有些RPG需要拔光驱才能用虚拟光驱。原来如此。

CFB是啥?

游戏破解小组
1anyh 2005-5-2 00:31
16
0
最初由 云淡风蒺 发布
?主可不可以把你所知晷於starforce driver真得??一?,例如把starforce查Alcohol的代瘁列出?,好?小弟想揠法???程序?Alcohol可以摸似新版starforce光?而不?要用USB-CDROM易?哕行.小弟一向都是想揠法?starforce?,所以?有在starforce driver下咿功夫.著著?主提供?考.

没想到会脱starforce也来这里了~
machoman 1 2005-5-2 11:21
17
0
新版本的StarForce 已经把系统的IDE ,SCSI 严密监视起来了,之所以USB易驱能够对付现在的新版本的StarForce 是由于StarForce研究人员还没搞定USB驱动的原因。

目前不脱壳对付StarForce新版本的方法我个人感觉是有两个:
(1)绕过系统的设备驱动层直接读扇区,突破StarForce的监视。但这一点谈何容易,首先要饶过文件系统,然,文件很可能在硬盘上是离散分布的,做到不通过文件系统打开文件本来就很难。然后还要采用out指令直接读扇区,这样可以饶过StarForce的检查。
(2)早于StarForce 驱动起来之前保存idt干掉StarForce ,这又回到Dos年代破解的关键问题,谁先启动谁先有优先权利.

个人拙见,定有错误,但我发现各位高手对starforce谈论比较保守
希望大家多指教。技术的东西保留着没用的。
machoman 1 2005-5-2 11:27
18
0
根据个人研究发现starforce 是一种非常危险的保护方式。它为游戏厂家或者starforce 获得游戏玩家的所有信息(它把IDE,SCSI以后USB存储设备完全监视起来了。你能有安全可言吗),这也是在欧美国家不敢用StarForce加密的原因。感觉StarForce善于耍阴招而已。比较违法的。

论实际的技术SecuRom New 新版本在介质加密技术硬工夫上是远超StarForce的。
StarForce确实开启了光盘加密的一个坏方向,牺牲安全保证加密。
machoman 1 2005-5-2 11:32
19
0
我不知道是否有途径可以像国家机关检举starforce加密的违法行为?因为我发现StarForce的代码确实太危险了。如果有途径,我可以贴出它的不安全的代码。
云淡风蒺 2005-5-2 12:59
20
0
著著machoman兄的分析.干掉IDT是不可行的,因?starforce是用int1?咄入Ring0哕行光??查和主程序解密,呗DeviceIoControl和sysenter都不用,最可?的是他?在Ring0也?行int1和int3及自己用Memory Breakpoint.不咿呃不是?铨,最大?铨是starforce用?代瘁?哕行DPC及StartIO等,非常膣以跟垓.我只是看到starforce?常在等某?Kernel Mutext及DPC,所以要由starforce driver入手破解是非常困膣.?小弟了解,即使是SafeDisc及SecuRom只是用??程序?哕行光??查,?有改掉IDT及?核代瘁,即使SecuRom7也是用Service?哕行.

其?我迂得starforce的pcode已???.?必要干改?核代瘁呃一步,呃已?涉及到Windows的风定及操作.
?西太??是很容易折?的.所以?他?的保罪做到?成?渲之?也是他?未日的?乓,因?那?恐怕已??有多?系靳能?风定的哕行starforce了.
lllaaa 2005-5-2 13:25
21
0
最初由 machoman 发布
我不知道是否有途径可以像国家机关检举starforce加密的违法行为?因为我发现StarForce的代码确实太危险了。如果有途径,我可以贴出它的不安全的代码。


能贴出一小部分吗?
machoman 1 2005-5-2 13:31
22
0
云兄,感谢您参与讨论,偶对StarForce 的Pcode 和驱动采用伪代码运行确实不知。谢谢你的知讯。对于脱壳偶是一点不了解,感觉StarForce确实有入铁桶了。既然您说干idt是不行的,我想第一种直接文件读取的方式是否可行,不通过系统,直接读io Port ,这需要一个简单的文件系统,没有采取分段链表连接的文件系统,从StarFuck的实现功能看来,StarForce 还没BT到把io port 都封住,采取直接io 操作不知道是否可行躲过其磁盘监视。
云淡风蒺 2005-5-2 14:52
23
0
感谢machoman的回答.小弟直迂帐?starforce不?直接用IO port,因?SCSI,USB,SATA等很多都?要用??程式?哕作,不是一??IO port可以解?的.可以肯定的是他?用IRP packet?坐光?,再行?DPC?查光?是否正催,由於大部份代瘁都是pcode,我?唯一能做的就是由IRP stack下手,因?DT和Alcohol是在呃奄模?RMPS的.但是我?Daemon Tools怎?哕作模?RMPS不是很了解,所以不知要怎?下手.相信starforce是非常了解Daemon Tools的哕作,在SCSI的IRP stack?手倪才能Blacklist DT.我?可以在Starforce?手之後IO完劫之前把他??反正,?RMPS儋料能??利通咿?查.
不咿很明锢做比真?困膣千孺倍,否?早就有人干了.相信DT的檫办者也知道呃一?,不膣理解Daemon Tools 4要等呃?久(已差不多一年了)?是未出.

厌充一下晷於Starforce Nightmare的哕作,相信他是用SetupDi等API?哕作,很明锢新版的Starforce封湮了Device Notification之?的回?信息或Device控制等?根本上?掉SN的功能,所以看?一定要由??程式入手,而且要非常精於CDROM的Low-level哕作及?核IRP的哕用才能破掉starforce.恐怕只有DT的檫办者和精於?CDROM??程式之人?才懂得做,以小弟??的道行?真哞哞未??呃方面的程式.
forgot 26 2005-5-3 13:16
24
0
注意一下那个StarFuck.

CFB是不是有人做出类似WKTDebugger的东西啦?

btw:怎么混入CFB
laoqian 8 2005-5-3 13:49
25
0
看来此云淡风蒺 即为风清云淡也,还是海峡对岸的人士,有“??程式”一词即可看出。
machoman 1 2005-5-3 16:59
26
0
starfuck 的原理比较简单,稍微研究就可以做一个类似的东东。

WKTDebugger是啥呢?
liuxiaosha 2005-5-3 17:02
27
0
有点深。学习!
machoman 1 2005-5-4 11:20
28
0
?DT和Alcohol是在呃奄模?RMPS的.但是我?Daemon Tools怎?哕作模?RMPS不是很了解
_______________________________________
请问RMPS 与DPM 之间有关系吗?
云淡风蒺 2005-5-4 14:24
29
0
请问RMPS 与DPM 之间有关系吗?


RPMS是Recordable Media Physical Signature.就是光碟上特有的物理栳?信息.
DPM是Data Position Measurement.就是用?坐取呃些栳?信息的技戌.
至於??是怎?哕作,小弟就不知道了.
machoman 1 2005-5-25 16:00
30
0
今天跟StarForce Nightmare的作者去了封信,他给了我一些答复,里边有一些有关starforce 和starfuck 功能实现的介绍,感觉他们研究的确实比较深入,对付starforce 这样的保护不创造性的根到硬件的最低层要破它确实太难了。

Hi, why you did the same fault, as alcohol/dt did too??
Also, you have the same wrong controller position, as Alcohol or Daemon tools.
Look self, in reality there do not exist any SCSI controllers, which
have same node position.
How Starforce checks for it, first it checks so: give me the parent
node of this cd-rom drive, so starforce knows, this cdrom drive belong
to this scsi controller, now after it starforce asks again, give me
the parent node of scsi controller. Also if it were an real SCSI
controller, starforce wouldn't get any parent response, thus in real
scsi controller there is no additional bus belonging to this scsi
controller. So in your case Starforce sees, aha, something like it
doesn't exist in the nature of Scsi controllers and blacklists the
drive belonging to SCSI controller and additional bus.
What i have done with unblacklisting, as you already understood, just
setting the GUID to another id. That is just temporary fix, it doesn't
unblacklist drive in reality. Just starforce sees this additional bus
not so, as it should, but if they want, they could fix it too. So that
way is not the way you should go. Just rewrite your drivers so, that
you get standalone SCSI controller without parent bus over it. Looks
in newer versions of Gamejack, that is the right way you should go.
Than carbon crack of drivers is actual just for older drivers and game
versions, someone maked it public just because they saw already in
newer starforce versions, that the functions are intercepted, so there
was no reason more to hide this crack. So this is not the real help
for you, if it doesn't work with newer versions. Mini image is ok, the
file system blocking can be overrided with such way forever, but it
works just so long the starforce protection doesn't check for sectors
integrity.
In newer starforce version, where is additional content check, you are
not allowed to use mini images, else the protection wouldn't see
cutted and needed content, so you have to use full image, but in this
case the file system blocking works.
There are few ways to override it, anyway the driver has to be
rewritten, but nothing is better, as to make your own sector accesses
to any harddrive, make your own geometrical transformation and use
your own file system implementation, FAT16, FAT32, NTFS and CDFS. So
you can access files on the drive on your way and not ask windows to
do it.
1. Make your own sector accesses, starforce cant disturb it, because
it has sector accesses too.

2. Then geometrical transformation can you get from universal ide
driver, there are free sources, so you can look and extract this
transformation from sources.
http://alter.org.ua/soft/win/uni_ata/index.php?lang=en&

3. Now the important part, file systems, linux contents sources where
you can extract all sources of file systems for reading files in
FAT16, FAT32, NTFS and CDFS.

If you had something like it, you would have the super weapon against
starforce :-)

The another part is the deactivating ide drives, ok, if you can
override starforces high irql, just as example, by forcing to set your
threads in the task planer, then you could go an better way as just
deactivating ide channels or drives separately.
Every time starforce wants to check for atapi on ide and cd check, it
stops all windows ports accesses to ide controller and can do its work
without to be disturbed, if they wouldnt do it, they would crach the
system. So, that is the point, where you can see, aha, fucking
starforce want to check for ide and at this time you can deactivate in
pci space whole ide controller, so starforce wouldnt be able to get
access to ide controller, and when starforce lets again the windows os
to make its ports access to ide controller, there you have quickly to
activate the controller again. This way of deactivating would work for
longer time and you don't need to collect datasheets to know, how to
deactivate any channel separatelly by different vendors, thus the
deactivating of any pci device in pci space is standart for any
device. You could look just for all controllers in pci space with IDE
subclass 01 01 ** and deactivate and reactivate it by changing just
one bit.
PS: you are allowed to use StarForce Nightmare.
But anyway, if you want to fuck starforce in its ass :), you should
do, what i have described. But if you are able to do it.
Bye
threads in the task planer, then you could go an better way as just
deactivating ide channels or drives separately.
Every time starforce wants to check for atapi on ide and cd check, it
stops all windows ports accesses to ide controller and can do its work
without to be disturbed, if they wouldnt do it, they would crach the
system. So, that is the point, where you can see, aha, fucking
starforce want to check for ide and at this time you can deactivate in
pci space whole ide controller, so starforce wouldnt be able to get
access to ide controller, and when starforce lets again the windows os
to make its ports access to ide controller, there you have quickly to
activate the controller again. This way of deactivating would work for
longer time and you don't need to collect datasheets to know, how to
deactivate any channel separatelly by different vendors, thus the
deactivating of any pci device in pci space is standart for any
device. You could look just for all controllers in pci space with IDE
subclass 01 01 ** and deactivate and reactivate it by changing just
one bit.
PS: you are allowed to use StarForce Nightmare.
But anyway, if you want to fuck starforce in its ass :), you should
do, what i have described. But if you are able to do it.
Bye
machoman 1 2005-5-25 16:12
31
0
最初由 云淡风蒺 发布


RPMS是Recordable Media Physical Signature.就是光碟上特有的物理栳?信息.
DPM是Data Position Measurement.就是用?坐取呃些栳?信息的技戌.
至於??是怎?哕作,小弟就不知道了.


谢谢云兄的解释。就我的理解DPM 其实就是对光盘上不同的扇区段采取不同的“线密度”的方式存储,这个“线密度”保存在DPM 中成为4字节的值,当检测的时候读不同位置采取不同的“线密度”延迟就可以做到DPM 的模拟。

RPMS 的原理小第目前还没研究出眉目,好象大概也是这个意思,不过是刻在光盘上。但RPMS 有一个好处就是可以支持USB接口,这好象是现在对付新版的唯一方法,StarForce Nightmare作者在上边提到的更好方法实现起来难度太大(自己写文件系统、设备驱动、),非小第所能为。就连Daemon-tools 目前也没有解决
kkx2008 2005-5-25 19:37
32
0
最初由 machoman 发布
starfuck 的原理比较简单,稍微研究就可以做一个类似的东东。


WKTDebugger是啥呢?

调试VB Pcode的东东
TarZan 2005-12-18 17:48
33
0
网上的dpm
rpms的资料好少啊。
有没有人能提供一点看看?
多谢
TarZan 2005-12-19 18:24
34
0
最初由 machoman 发布
请问那里有最新的保护游戏mds下载???偶现在可以过starforce 3.3 和Securom New 4但,新游戏偶找不到下载,要不就是速度好慢.急死了!各位大大给点资源好吗?


可以请问一下楼主大侠,你是怎么样过的sf3啊???
TarZan 2005-12-19 18:28
35
0
最初由 云淡风蒺 发布
?主可不可以把你所知晷於starforce driver真得??一?,例如把starforce查Alcohol的代瘁列出?,好?小弟想揠法???程序?Alcohol可以摸似新版starforce光?而不?要用USB-CDROM易?哕行.小弟一向都是想揠法?starforce?,所以?有在starforce driver下咿功夫.著著?主提供?考.


楼主你好。
我也对sf3有点兴趣,
我可以提供一点思路,
就是去做掉sf的三个驱动程序。

或者是采用注入式代码给它来个v-code记录。
就不怕它的代码解释器protect.dll了。
machoman 1 2005-12-20 11:09
36
0
只要能做好DPM和RPMS 就能过了.DPM已经没啥问题,RPMS偶现在正准备研究.由于SF对SCSI已经严密控制所以用RPMS模拟DPM成为当前的唯一选择,这方面的资料是很少,连DT 4.0 也没解决好这个问题.前边的讨论已经把DPM原理谈的差不多了.具体的操作还是比较复杂的.耐心研究总有收获.
JillPal 2006-1-14 14:07
37
0
现在用SF加密的游戏很多说明书上都有万一CD-KEY错误如何重新制作的说明,我买的风色幻想3和4都是如此。可见SF加密的弊端已经越来越大了。现在看来SF加密似乎已经对镜象文件和系统文件也开始进行监视了,如此一来可能光靠RPMS模拟DPM也行不通了。
云重 1 2006-1-17 16:16
38
0
hehehehe
fnp902003 2006-1-17 16:47
39
0
我现在在玩《细胞分裂:混沌理论》和《三国志10威力加强版》两款游戏都用不同的光盘保护措施,前者用你们说的SF保护,后者用SafeDisk保护。前者可以用SFAFSB驱动配合SFNightmare屏蔽器完美运行,后者只要一个极小镜像用DT4虚拟就可以了~
不过我想知道的是这两者使用的光盘保护有何区别?
顺便询问一下Armadillo 3.00a - 3.61 -> Silicon Realms Toolworks壳用什么工具脱?或者有个提示方法也行。
谢谢~
arwin 2006-1-17 17:19
40
0
手脱
fnp902003 2006-1-17 17:36
41
0
最初由 arwin 发布
手脱


如果楼上是对我说的话,能给点心得否?
TarZan 2006-1-22 17:29
42
0
[QUOTE]最初由 machoman 发布


谢谢云兄的解释。就我的理解DPM 其实就是对光盘上不同的扇区段采取不同的“线密度”的方式存储,这个“线密度”保存在DPM 中成为4字节的值,当检测的时候读不同位置采取不同的“线密度”延迟就可以做到DPM 的模拟。

RPMS 的原理小第目前还没研究出眉目,好象大概也是这个意思,不过是刻在光盘上。但RPMS 有一个好处就是可以支持USB接口,这好象是现在对付新版的唯一方法,StarForce Nightmare作者在上边提到的更好方法实现起来难度太大(自己写文件系统、设备驱动、),非小第所能为。就连Daemon-tools 目前也没有解决
[/QUOT]
通过对sfn和sffuck的研究,我得出一点心得,
就是无论是在哪个操作系统下,如果光驱和硬盘不在一个物理的ide接口上,只要把光驱所在的那个ide channal屏掉,sf3都只有被迫让dt运行。不用sfn和sffuck都可以,只要在设备管理器,把光驱所在的那个ide channel停用(win98,win2ksever,winxp pro下)或者卸载(win2k pro winxp home下)就可以了。
可是,这只是一种无耐的方法。
我在想能不能从根本上重写系统中断服务,如同在dos下重写idt一样,把对ide的,或者光驱的int 21e 服务重写,就能运用dt的虚拟光驱,或者读到sf3的dpm数据,像做模拟狗一样来模拟它。
对了,我在网上找不到光驱底层的资料,如果楼主m-man大侠有的话,能不能给我点参考,因为我想到:按照sf3的产品制作过程,他的母盘也是在普通刻录机上制作的,然后才去压制,这样的话,我们必然也能自己写出一种驱动程序,来运行光驱,读取光盘上的每一个字节的数据,然后重写一张盘,也就是如同硬盘的ghost程序一样。我现在就想写一个这样的程序。
machoman 1 2006-1-25 17:33
43
0
呵呵,偶把偶以前做过的屏蔽starforce  3.3以前版本的IDE接口的程序段给post上来。如果楼上的朋友要了解IDE或SCSI的标准你可以去国际标准化委员会的以下两个小组的地址,里边有足够的标准免费供您阅读
http://www.t10.org   这个是SCSI标准小组
http://www.t13.org   这个是ATAPI(IDE)小组

bool CSkinTestDlg::StarFoce_Disable_IDE(HANDLE FileSCSI)
{
  USHORT  Port;
  UCHAR  Value;

  Port = 0x1F7;//IDE端口号
  Value = 0x9F;//ATA命令 ,后边同理,具体命令意义可查标准。
#if MINPORT
PS_WRITE_IDE_IDE_PORT_UCHAR(FileSCSI,Port,Value);//该函数与WRITE_PORT_UCHAR 实际上是一样的,只不过偶用汇编从新实现了它,避免被StarForce所监视。这需要做个很简单的驱动
#else
outportb(Port,Value);
#endif
Port = 0x1F7;
#if MINPORT
PS_READ_IDE_IDE_PORT_UCHAR(FileSCSI,Port,&Value);//同理自己实现在ring0,中
#else
Value = inportb(Port);
#endif

Sleep(100);

  Port = 0x1F6;
  Value = 0x9F;
#if MINPORT
PS_WRITE_IDE_IDE_PORT_UCHAR(FileSCSI,Port,Value);
#else
outportb(Port,Value);
#endif
Port = 0x1F6;
#if MINPORT
PS_READ_IDE_IDE_PORT_UCHAR(FileSCSI,Port,&Value);
#else
Value = inportb(Port);
#endif
Sleep(100);

  Port = 0x1F7;
  Value = 0xA1;
#if MINPORT
PS_WRITE_IDE_IDE_PORT_UCHAR(FileSCSI,Port,Value);
#else
outportb(Port,Value);
#endif
Port = 0x1F7;
#if MINPORT
PS_READ_IDE_IDE_PORT_UCHAR(FileSCSI,Port,&Value);
#else
Value = inportb(Port);
#endif
Sleep(100);

  Port = 0x1F6;
  Value = 0xA1;
#if MINPORT
PS_WRITE_IDE_IDE_PORT_UCHAR(FileSCSI,Port,Value);
#else
outportb(Port,Value);
#endif
Port = 0x1F6;
#if MINPORT
PS_READ_IDE_IDE_PORT_UCHAR(FileSCSI,Port,&Value);
#else
Value = inportb(Port);
#endif
Sleep(100);

  Port = 0x1F7;
  Value = 0xA1;
#if MINPORT
PS_WRITE_IDE_IDE_PORT_UCHAR(FileSCSI,Port,Value);
#else
outportb(Port,Value);
#endif
Port = 0x1F7;
#if MINPORT
PS_READ_IDE_IDE_PORT_UCHAR(FileSCSI,Port,&Value);
#else
Value = inportb(Port);
#endif
Sleep(100);

   Port = 0x1F6;
   Value = 0x9F;
#if MINPORT
PS_WRITE_IDE_IDE_PORT_UCHAR(FileSCSI,Port,Value);
#else
outportb(Port,Value);
#endif
Port = 0x1F6;
#if MINPORT
PS_READ_IDE_IDE_PORT_UCHAR(FileSCSI,Port,&Value);
#else
Value = inportb(Port);
#endif
Sleep(100);

   Port = 0x1F7;
   Value = 0x9F;
#if MINPORT
PS_WRITE_IDE_IDE_PORT_UCHAR(FileSCSI,Port,Value);
#else
outportb(Port,Value);
#endif
Port = 0x1F7;
#if MINPORT
PS_READ_IDE_IDE_PORT_UCHAR(FileSCSI,Port,&Value);
#else
Value = inportb(Port);
#endif
Sleep(100);

   Port = 0x1F7;
   Value = 0xA0;
#if MINPORT
PS_WRITE_IDE_IDE_PORT_UCHAR(FileSCSI,Port,Value);
#else
outportb(Port,Value);
#endif
Port = 0x1F7;
#if MINPORT
PS_READ_IDE_IDE_PORT_UCHAR(FileSCSI,Port,&Value);
#else
Value = inportb(Port);
#endif
Sleep(100);

   Port = 0x177;
   Value = 0x9F;
#if MINPORT
PS_WRITE_IDE_IDE_PORT_UCHAR(FileSCSI,Port,Value);
#else
outportb(Port,Value);
#endif
Port = 0x177;
#if MINPORT
PS_READ_IDE_IDE_PORT_UCHAR(FileSCSI,Port,&Value);
#else
Value = inportb(Port);
#endif
Sleep(100);

   Port = 0x176;
   Value = 0x9F;
#if MINPORT
PS_WRITE_IDE_IDE_PORT_UCHAR(FileSCSI,Port,Value);
#else
outportb(Port,Value);
#endif
Port = 0x176;
#if MINPORT
PS_READ_IDE_IDE_PORT_UCHAR(FileSCSI,Port,&Value);
#else
Value = inportb(Port);
#endif
Sleep(100);

   Port = 0x177;
   Value = 0xA1;
#if MINPORT
PS_WRITE_IDE_IDE_PORT_UCHAR(FileSCSI,Port,Value);
#else
outportb(Port,Value);
#endif
Port = 0x177;
#if MINPORT
PS_READ_IDE_IDE_PORT_UCHAR(FileSCSI,Port,&Value);
#else
Value = inportb(Port);
#endif
Sleep(100);

   Port = 0x176;
   Value = 0xA1;
#if MINPORT
PS_WRITE_IDE_IDE_PORT_UCHAR(FileSCSI,Port,Value);
#else
outportb(Port,Value);
#endif
Port = 0x176;
#if MINPORT
PS_READ_IDE_IDE_PORT_UCHAR(FileSCSI,Port,&Value);
#else
Value = inportb(Port);
#endif
Sleep(100);

   Port = 0x177;
   Value = 0xA1;
#if MINPORT
PS_WRITE_IDE_IDE_PORT_UCHAR(FileSCSI,Port,Value);
#else
outportb(Port,Value);
#endif
Port = 0x177;
#if MINPORT
PS_READ_IDE_IDE_PORT_UCHAR(FileSCSI,Port,&Value);
#else
Value = inportb(Port);
#endif
Sleep(100);

   Port = 0x176;
   Value = 0x9F;
#if MINPORT
PS_WRITE_IDE_IDE_PORT_UCHAR(FileSCSI,Port,Value);
#else
outportb(Port,Value);
#endif
Port = 0x176;
#if MINPORT
PS_READ_IDE_IDE_PORT_UCHAR(FileSCSI,Port,&Value);
#else
Value = inportb(Port);
#endif
Sleep(100);

   Port = 0x177;
   Value = 0x9F;
#if MINPORT
PS_WRITE_IDE_IDE_PORT_UCHAR(FileSCSI,Port,Value);
#else
outportb(Port,Value);
#endif
Port = 0x177;
#if MINPORT
PS_READ_IDE_IDE_PORT_UCHAR(FileSCSI,Port,&Value);
#else
Value = inportb(Port);
#endif
Sleep(100);

   Port = 0x177;
   Value = 0xA0;
#if MINPORT
PS_WRITE_IDE_IDE_PORT_UCHAR(FileSCSI,Port,Value);
#else
outportb(Port,Value);
#endif
Port = 0x177;
#if MINPORT
PS_READ_IDE_IDE_PORT_UCHAR(FileSCSI,Port,&Value);
#else
Value = inportb(Port);
#endif
  Sleep(100);

return TRUE;
}
游客
登录 | 注册 方可回帖
返回