· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Исследование Starforce 3 Pro

<< . 1 . 2 . 3 . 4 . 5 . 6 . >>

Посл.отвђт Сообщенiе


Дата: Апр 13, 2004 12:42:27

[ Asterix: Дык он уже дизассемблирован и на reversing'е лежит его idb кажется ;-) ]

Это древний декомпил by The Owl. Сделан года три, если не четыре назад и под маздай. Хотя, всё равно поучительно.


Дата: Апр 14, 2004 13:52:12

Да, на реверсинге действительно очень древний вариант лежит. Но зато там с точки зрения подразобраться как айс работает - самое то.

А никто не знает, какая сейчас последняя версия SF?


Дата: Май 13, 2004 16:17:00

Никто не разбирался в алгоритме расшифровки байткода? ибо сначала байткод зашифрован еще где-то как-то...
И где сидит обработчик int3 ? В каком из драйверов?


Дата: Авг 22, 2004 23:20:58

Драсте всем. У меня мысля появилась... Ну СФ достает драйвера из своего тела, потом сравнивает верси и т.п.
Может попробовать с драйверами чего-нибудь ;) Я бы и сам попробовал вот жаль в этом мире я новичок, если кому не лень посоветуйте как в драверах копаться(SICE - не в счет,ну если уже без него никак,то ладно), слать мне на мыло
] OLE_Server@mail.ru [ Заранее благодарен.


Дата: Авг 23, 2004 00:42:03

ИДУ в руки в вперед! =)
Внутри ИДЫ отладчик, реализованный плагином помогает иногда...


Дата: Авг 23, 2004 12:32:07

ОК!Попробую ИДУ. Вот мля, теперь на рынок к пиратам в гости надо идти и денюжку готовить :( Главное чтоб толк был 8D


Дата: Авг 24, 2004 10:38:41

Драйвера, по сути, никаких особено выдающихся функций не несут. Да, там есть обработчики на int1/int3 - я имею распаковщик для драйверов, который перепаковывает их таким образом, что становится возможным работа в распакованом виде. Обработчики int1/int3 я заместил своим кодом, который при выполнении автоматом восстанавливает свой обработчик для парного вектора (то есть, обработчик int1 восстанавливает обработчик int3, а обработчик int3 восстанавливает обработчик int1), причем каждый из обработчиков, восстановив парный вектор, передает управление по адресу оригинального обработчика, из копии оригинальной IDT, сохраненной у Старфорса во внутренней таблице. Плюс к тому, в драйвере prodrv06 есть два обнуления dr0-dr7. Я их вытираю, но сути проблемы это не меняет. (основное полезное назначение драйверов - обеспечение протокола обмена между драйвером/ДЛЛ) - достаночно элементарная операция, шифрующая/расшифровывающая пакеты данных ключом в 64 бита. Основной же код для антиотладки находится в пкоде ДЛЛ - там же находится и чтение портов, и определение АТАПИ девайсов и чтение конфигурации PCI.
В настоящее время я делаю полноценный эмулятор для Старфорса, который действует по аналогии с VMWare, полностью контролируя весь процесс с возможностью логирования всех внешних вызовов и интересных мест пкода. Возможно, скоро по поводу СФ будет статья.


Дата: Авг 24, 2004 13:27:11

ECk
>Возможно, скоро по поводу СФ будет статья.
Это было бы просто замечательно!
(скрестив пальцы ждет и надеется)


Дата: Авг 26, 2004 08:46:38

Как-то возился с SF, непомню какая версия. Так вот, для этой цели нарисовал свой маленький драйвер, который цеплялся за IofCallDriver+CompleteRequest отлавливал, все что идет для/от SF и логил это дело в файл. Затем на основании этого файла эмулировал запрос/ответ для драйвера SF. Короче, походу, толку в этом мало...


Дата: Авг 26, 2004 14:32:00

Может кому будет интересно...


StarForce Mov Instruction


.sforce:00BA28C8 sub_BA28C8 proc near
.sforce:00BA28C8 mov eax, [edi+8]
.sforce:00BA28CB add eax, [edi+14h] ; Add VM Base to Opcode Ptr(EIP)
.sforce:00BA28CE mov ecx, [eax] ; Get Opcode Data Dword 1 - 0x98004200
.sforce:00BA28D0 mov edx, [eax+4] ; Get Opcode Data Dword 2 - 0x08600135
.sforce:00BA28D3 add dword ptr [edi+14h], 8 ; Increase EIP
.sforce:00BA28D7
.sforce:00BA28D7 ########## Extract Data for Metaphorsis ################
.sforce:00BA28D7 .
.sforce:00BA28D7 push ecx ; Save Opcode 1
.sforce:00BA28D8 .
.sforce:00BA28D8 mov eax, edx ; Get Opcode 2
.sforce:00BA28DA .
.sforce:00BA28DA shl eax, 4
.sforce:00BA28DD shr eax, 1Dh ; extract bits 28,27,26 - EAX = 04
.sforce:00BA28E0 .
.sforce:00BA28E0 mov ebx, ecx ; Get Opcode 1
.sforce:00BA28E2 .
.sforce:00BA28E2 shl ebx, 5
.sforce:00BA28E5 shr ebx, 1Bh ; extract bits 23,24,25,26,27 - EBX = 0
.sforce:00BA28E8 .
.sforce:00BA28E8 mov ecx, edx ; Get Opcode 2
.sforce:00BA28EA .
.sforce:00BA28EA shl ecx, 7
.sforce:00BA28ED shr ecx, 1Bh ; extract bits 21,22,23,24,25 - ECX = 6
.sforce:00BA28F0
.sforce:00BA28F0
.sforce:00BA28F0 ############## START STREAM/METAPHORSIS ENCODING ##############
.sforce:00BA28F0
.sforce:00BA28F0 or eax, eax
.sforce:00BA28F2 jz short loc_BA2914
.sforce:00BA28F4 cmp eax, 1
.sforce:00BA28F7 jz short loc_BA291A ; EIP STREAM
.sforce:00BA28F9 cmp eax, 2
.sforce:00BA28FC jz short loc_BA2920 ; EIP STREAM
.sforce:00BA28FE cmp eax, 3
.sforce:00BA2901 jz short loc_BA2926 ; EIP STREAM
.sforce:00BA2903 cmp eax, 4
.sforce:00BA2906 jz short loc_BA292B ; EIP STREAM
.sforce:00BA2908 cmp eax, 5
.sforce:00BA290B jz short loc_BA2930 ; DESTINATION STREAM
.sforce:00BA290D cmp eax, 6
.sforce:00BA2910 jz short loc_BA293A ; SOURCE STREAM
.sforce:00BA2912 jmp short loc_BA2944 ; Restore Opcode 1
.sforce:00BA2914 ; ---------------------------------------------------------------------- -----
.sforce:00BA2914
.sforce:00BA2914 loc_BA2914: ; CODE XREF: sub_BA28C8+2A j
.sforce:00BA2914 bts [edi+24h], ecx
.sforce:00BA2918 jmp short loc_BA2944 ; Restore Opcode 1
.sforce:00BA291A ; ---------------------------------------------------------------------- -----
.sforce:00BA291A
.sforce:00BA291A loc_BA291A: ; CODE XREF: sub_BA28C8+2F j
.sforce:00BA291A btr [edi+24h], ecx
.sforce:00BA291E jmp short loc_BA2944 ; Restore Opcode 1
.sforce:00BA2920 ; ---------------------------------------------------------------------- -----
.sforce:00BA2920
.sforce:00BA2920 loc_BA2920: ; CODE XREF: sub_BA28C8+34 j
.sforce:00BA2920 btc [edi+24h], ecx
.sforce:00BA2924 jmp short loc_BA2944 ; Restore Opcode 1
.sforce:00BA2926 ; ---------------------------------------------------------------------- -----
.sforce:00BA2926
.sforce:00BA2926 loc_BA2926: ; CODE XREF: sub_BA28C8+39 j
.sforce:00BA2926 rol byte ptr [edi+24h], cl
.sforce:00BA2929 jmp short loc_BA2944 ; Restore Opcode 1
.sforce:00BA292B ; ---------------------------------------------------------------------- -----
.sforce:00BA292B
.sforce:00BA292B loc_BA292B: ; CODE XREF: sub_BA28C8+3E j
.sforce:00BA292B ror byte ptr [edi+24h], cl
.sforce:00BA292E jmp short loc_BA2944 ; Restore Opcode 1
.sforce:00BA2930 ; ---------------------------------------------------------------------- -----
.sforce:00BA2930
.sforce:00BA2930 loc_BA2930: ; CODE XREF: sub_BA28C8+43 j
.sforce:00BA2930 shl ecx, 5
.sforce:00BA2933 or ebx, ecx
.sforce:00BA2935 mov [edi+0Ch], ebx
.sforce:00BA2938 jmp short loc_BA2944 ; Restore Opcode 1
.sforce:00BA293A ; ---------------------------------------------------------------------- -----
.sforce:00BA293A
.sforce:00BA293A loc_BA293A: ; CODE XREF: sub_BA28C8+48 j
.sforce:00BA293A shl ecx, 5
.sforce:00BA293D or ebx, ecx
.sforce:00BA293F mov [edi+10h], ebx
.sforce:00BA2942 jmp short $+2
.sforce:00BA2944 ###################################################################### ##########
.sforce:00BA2944
.sforce:00BA2944 loc_BA2944: ; CODE XREF: sub_BA28C8+4A j
.sforce:00BA2944 ; sub_BA28C8+50 j ...
.sforce:00BA2944 pop ecx ; Restore Opcode 1
.sforce:00BA2945 mov ebx, [edi] ; VMRAM/REGISTERBASE Into EBX
.sforce:00BA2947 .
.sforce:00BA2947 mov esi, edx ; Get Opcode 2
.sforce:00BA2949
.sforce:00BA2949 ######### GET DESTINATION REGISTER ###########
.sforce:00BA2949
.sforce:00BA2949 shl esi, 14h ; Decode Source Register
.sforce:00BA294C shr esi, 18h ; Bits 5->12
.sforce:00BA294F add esi, [edi+10h] ; ESI = 0x13 + [EDI+10h] = 0x23 SRC.REG+SRC_STREAM = REG 0x36
.sforce:00BA2952 and esi, 0FFh ; 1 Byte Reg
.sforce:00BA2952
.sforce:00BA2952 ###############################################
.sforce:00BA2958 .
.sforce:00BA2958 mov esi, [ebx+esi*4] ; REG * 4 = REG_D8 + vmbase for location of data
.sforce:00BA295B .
.sforce:00BA295B ######## GET SOURCE REGISTER ##################
.sforce:00BA295B
.sforce:00BA295B mov eax, ecx ; Get Opcode 1
.sforce:00BA295D .
.sforce:00BA295D shl eax, 0Fh ; Decode Destination Register
.sforce:00BA2960 shr eax, 18h ; Bits 10->18
.sforce:00BA2963 add eax, [edi+0Ch] ; EAX = 0x21 + [EDI+0Ch] = 0x15 DEST.REG+DEST_STREAM = REG 0x36
.sforce:00BA2966 and eax, 0FFh ; 1 Byte Reg
.sforce:00BA296B
.sforce:00BA296B ################################################
.sforce:00BA296B
.sforce:00BA296B
.sforce:00BA296B
.sforce:00BA296B
.sforce:00BA296B .
.sforce:00BA296B mov [ebx+eax*4], esi ; !MOV INSTRUCTION! - COPY DATA INTO REG
.sforce:00BA296E
.sforce:00BA296E
.sforce:00BA296E
.sforce:00BA296E
.sforce:00BA296E
.sforce:00BA296E #### Obtain Instruction Index i.e find next instruction ####
.sforce:00BA296E
.sforce:00BA296E mov esi, ecx ; Get Opcode 1
.sforce:00BA2970 .
.sforce:00BA2970 shr esi, 1Bh ; ESI = 13
.sforce:00BA2973 mov ebp, edx ; Get Opcode 2
.sforce:00BA2975 shl ebp, 1Ch
.sforce:00BA2978 shr ebp, 17h ; EBP=0xA0
.sforce:00BA297B or esi, ebp ; ESI = 0xB3, INDEX = 0xB3 !
.sforce:00BA297D
.sforce:00BA297D ##########################################################
.sforce:00BA297D
.sforce:00BA297D ########## Get Index Decrypt Key ####################
.sforce:00BA297D
.sforce:00BA297D mov eax, ecx ; Get Opcode 1
.sforce:00BA297F .
.sforce:00BA297F shl eax, 17h
.sforce:00BA2982 shr eax, 17h
.sforce:00BA2985 and eax, [edi+24h] ; EAX = 0 [EDI+24] = 0x20 0&&0x20 = 0
.sforce:00BA2988
.sforce:00BA2988 ######################################################
.sforce:00BA2988 .
.sforce:00BA2988
.sforce:00BA2988 xor esi, eax ; Index Decrypt with key from opcode, still 0xB3
.sforce:00BA298A
.sforce:00BA298A
.sforce:00BA298A .
.sforce:00BA298A mov eax, [edi+1Ch] ; Get Instruction Table Offset
.sforce:00BA298D mov esi, [eax+esi*4] ; Add our instruction ID*4
.sforce:00BA2990 add esi, [edi+8] ; Add VMBASE
.sforce:00BA2993 jmp esi ; Jmp to Instruction
.sforce:00BA2993 sub_BA28C8 endp


StarForce VM RAM

EDI =

Stack[0000033C]:0012E238 dd 12E238h <-> [EDI+0] VM RAM START
Stack[0000033C]:0012E23C dd 12E638h <-> [EDI+4] VM RAM END
Stack[0000033C]:0012E240 dd 0B97000h <-> [EDI+8] VM BASE

Stack[0000033C]:0012E244 dd 15h <-> [EDI+0C] SRC_REG STREAM - SHL WITH OPCODE DATA
Stack[0000033C]:0012E248 dd 23h <-> [EDI+10] DEST_REG STREAM - SHL WITH OPCODE DATA

Stack[0000033C]:0012E24C dd 21D2E4h <-> [EDI+14] EIP
Stack[0000033C]:0012E250 dd 0 <-> [EDI+18]
Stack[0000033C]:0012E254 dd 0BCC320h <-> [EDI+1C] INSTRUCTION TABLE
Stack[0000033C]:0012E258 dd 0BA28C8h <-> [EDI+20]
Stack[0000033C]:0012E25C dd 8 <-> [EDI+24] EIP STREAM - ROL/ROR/BTC/BTS/BTR
Stack[0000033C]:0012E260 dd 302h <-> [EDI+28] EFLAGS
Stack[0000033C]:0012E264 dd 21D2E4h <-> [EDI+2C]


StarForce Example Data Encoding

98004200
08600135

OPCODE 1 - [0x98004200]
10011 00000 00000 00100001 000000000
| | | |
Instr | | Instruction Xor
Part1 | |
| DESTINATION REG
|
REGISTER STREAM CHANGE DATA


OPCODE 2 - [0x08600135]
0000 100 00110 00000000 00010011 0101
Instr | | | Instr
Part2.B| | | Part2.A
| | |
| | SOURCE REG
| |
| EIP STREAM CHANGE DATA
|
STREAM CHANGE TYPE


Дата: Окт 7, 2004 01:39:30

Sluchajno natknulsia na "starforce driver uninstaller"
reversing etogo mozet posposobstvovat process'u ;)

http://www.star-force.com/index.phtml?category=200&type=5


Дата: Окт 7, 2004 12:51:03

2 jihnz: не поспособствует...


Дата: Окт 7, 2004 15:20:49

s VMWare poslednim,
poslednij(3.04.050.001,18.09.04)SF ne rabotaet :\


Дата: Окт 7, 2004 15:35:35 · Поправил: Oldmen

2 ECk:
А поюзать твой анпакер дров от СФ возможно?
Если че, пиши на Leo.RedSky(at)gmail.com


Дата: Окт 11, 2004 12:05:26

А что мешает повесить драйвер, который будет вешаться на порты atapi устройств и сообщать, что их нет.

<< . 1 . 2 . 3 . 4 . 5 . 6 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.329