Download Virtal On

Added to site2002-12-31
Rating80/100
Votes3


virtalon.zip (96418 bytes)

namesizecompressed
Virtual On.txt 12288 3516
VonVR_up.com 569 449
VonVR_CD.com 565 447
Von_CD.com 570 451
FiX.nfo 1968 1051
File_ID.diz 471 179
.exe 176128 89715

Virtual On.txt

Free Information Xchange '98 presents:

Cyber Troopers: Virtual On - CD crack by Static Vengeance

Requirements:
hex editor and full install

	Sega Entertainment has released another fighter game.  This time you take control of huge
battle droids in a one on one fight for control over the moon.  I'm still looking for the accel-
erated PowerVR version that works with the US release of this game.  Anyways the game still runs
pretty fast and has some decent effects.  However there is the CD check bug that needs to be FiX'ed.
So I got W32Dasm up and running and disassembled v_on.exe and set out to remove the CD check.
	I started out by going up to the menu bar and selecting "Refs" and then "String data references"
from the drop down menu.  One the string data refs box showed up I grabbed the slider bar and scrolled
down looking for interesting things like "Insert.. ", "Please insert..", or references to the CD volume
or even "%C:\" which is commonly used in CD checks.  Well I found all three types of references in
Virtual On.  From there I doubled clicked on them and followed the code to see what was going on.
Here is the code along with a brief description of what the code is doing:

* Referenced by a CALL at Address:
|:005C5CF5                                       <-- Where the call was made from.
|
:005C82BA 55                      push ebp
:005C82BB 8BEC                    mov ebp, esp
:005C82BD 83EC04                  sub esp, 00000004
:005C82C0 53                      push ebx
:005C82C1 56                      push esi
:005C82C2 57                      push edi

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005C830D(U)
|
:005C82C3 E826FFFFFF              call 005C81EE                        <-- Check for the CD
:005C82C8 A3605FAE01              mov dword ptr [01AE5F60], eax
:005C82CD 833D605FAE01FF          cmp dword ptr [01AE5F60], FFFFFFFF   <-- Check for the result
:005C82D4 0F840A000000            je 005C82E4                          <-- This jump asks for the CD
:005C82DA B801000000              mov eax, 00000001                    <-- Setup for passed CD check
:005C82DF E92E000000              jmp 005C8312                         <-- Jump to the end of this routine

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005C82D4(C)
|
:005C82E4 6A35                    push 00000035

* Possible StringData Ref from Data Obj ->"Virtual ON for PC"
                                  |
:005C82E6 A148F56B00              mov eax, dword ptr [006BF548]
:005C82EB 50                      push eax

* Possible StringData Ref from Data Obj ->"Please insert VIRTUAL ON CD."  <-- Ask for the CD
                                  |
:005C82EC 6890876C00              push 006C8790
:005C82F1 6A00                    push 00000000

* Reference To: USER32.MessageBoxA, Ord:0197h
                                  |
:005C82F3 FF15E8D56503            Call dword ptr [0365D5E8]
:005C82F9 8945FC                  mov dword ptr [ebp-04], eax
:005C82FC 837DFC02                cmp dword ptr [ebp-04], 00000002    <-- 02 means you hit cancel
:005C8300 0F8507000000            jne 005C830D
:005C8306 33C0                    xor eax, eax                        <-- Setup for a failed CD check
:005C8308 E905000000              jmp 005C8312                        <-- Go to the return section

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005C8300(C)
|
:005C830D E9B1FFFFFF              jmp 005C82C3                        <-- Go back up and retry

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:005C82DF(U), :005C8308(U)
|
:005C8312 5F                      pop edi        <-- This is the section that returns to the caller
:005C8313 5E                      pop esi        <-- eax will already have the result in it when you
:005C8314 5B                      pop ebx        <-- get here.  eax=00 for a failed CD check
:005C8315 C9                      leave          <-- while eax=01 for a passed CD check
:005C8316 C3                      ret

	That's the section that asks for the CD when not found.  So lets check the call to 5C82C3
which is the routine that actually checks for the CD in your CD-ROM drive:

* Referenced by a CALL at Address:
|:005C82C3   
|
:005C81EE 55                      push ebp
:005C81EF 8BEC                    mov ebp, esp
:005C81F1 83EC5C                  sub esp, 0000005C
:005C81F4 53                      push ebx
:005C81F5 56                      push esi
:005C81F6 57                      push edi

* Reference To: KERNEL32.GetLogicalDrives, Ord:00E7h          <-- Common text string in CD checks
                                  |
:005C81F7 FF1518D46503            Call dword ptr [0365D418]
:005C81FD 8945F4                  mov dword ptr [ebp-0C], eax
:005C8200 C745F800000000          mov [ebp-08], 00000000
:005C8207 E903000000              jmp 005C820F

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:005C822C(U), :005C8294(U)
|
:005C820C FF45F8                  inc [ebp-08]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005C8207(U)
|
:005C820F 837DF820                cmp dword ptr [ebp-08], 00000020
:005C8213 0F8D80000000            jnl 005C8299
:005C8219 B801000000              mov eax, 00000001
:005C821E 8A4DF8                  mov cl, byte ptr [ebp-08]
:005C8221 D3E0                    shl eax, cl
:005C8223 8545F4                  test dword ptr [ebp-0C], eax
:005C8226 0F8505000000            jne 005C8231
:005C822C E9DBFFFFFF              jmp 005C820C

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005C8226(C)
|
:005C8231 8B45F8                  mov eax, dword ptr [ebp-08]
:005C8234 83C041                  add eax, 00000041
:005C8237 50                      push eax

* Possible StringData Ref from Data Obj ->"%c:\"                <-- Common refs string to check out
                                  |
:005C8238 6888876C00              push 006C8788
:005C823D 8D45A4                  lea eax, dword ptr [ebp-5C]
:005C8240 50                      push eax

* Reference To: USER32.wsprintfA, Ord:026Ch
                                  |
:005C8241 FF1540D56503            Call dword ptr [0365D540]
:005C8247 83C40C                  add esp, 0000000C
:005C824A 8D45A4                  lea eax, dword ptr [ebp-5C]
:005C824D 50                      push eax

* Reference To: KERNEL32.GetDriveTypeA, Ord:00CEh              <-- Commonly used call in CD check routines
                                  |
:005C824E FF151CD46503            Call dword ptr [0365D41C]
:005C8254 83F805                  cmp eax, 00000005            <-- 05 is the CD-ROM drive value
:005C8257 0F8537000000            jne 005C8294

* Possible StringData Ref from Data Obj ->"V_ON\V_ON.EXE"      <-- Checkin for the EXE with full path of CD
                                  |
:005C825D 6878876C00              push 006C8778
:005C8262 8D45A4                  lea eax, dword ptr [ebp-5C]
:005C8265 50                      push eax

* Reference To: KERNEL32.lstrcatA, Ord:0266h
                                  |
:005C8266 FF15D4D46503            Call dword ptr [0365D4D4]
:005C826C 6A00                    push 00000000
:005C826E 8D45A4                  lea eax, dword ptr [ebp-5C]
:005C8271 50                      push eax

* Reference To: KERNEL32._lopen, Ord:0262h
                                  |
:005C8272 FF1520D46503            Call dword ptr [0365D420]
:005C8278 8945FC                  mov dword ptr [ebp-04], eax
:005C827B 837DFCFF                cmp dword ptr [ebp-04], FFFFFFFF
:005C827F 0F840F000000            je 005C8294
:005C8285 8B45FC                  mov eax, dword ptr [ebp-04]
:005C8288 50                      push eax

* Reference To: KERNEL32._lclose, Ord:025Fh
                                  |
:005C8289 FF1524D46503            Call dword ptr [0365D424]
:005C828F E905000000              jmp 005C8299

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:005C8257(C), :005C827F(C)
|
:005C8294 E973FFFFFF              jmp 005C820C

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:005C8213(C), :005C828F(U)
|
:005C8299 837DF820                cmp dword ptr [ebp-08], 00000020
:005C829D 0F850A000000            jne 005C82AD
:005C82A3 B8FFFFFFFF              mov eax, FFFFFFFF                <-- Need to return with FFFFFFFF
:005C82A8 E908000000              jmp 005C82B5                     <-- for a passed CD check

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005C829D(C)
|
:005C82AD 8B45F8                  mov eax, dword ptr [ebp-08]      <-- Any other value is a failed check
:005C82B0 E900000000              jmp 005C82B5

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:005C82A8(U), :005C82B0(U)
|
:005C82B5 5F                      pop edi
:005C82B6 5E                      pop esi
:005C82B7 5B                      pop ebx
:005C82B8 C9                      leave
:005C82B9 C3                      ret

	Yet another example of what a CD check might look like.  So we know call to the CD check was
made from 5C82C3 which is part of the "insert CD" routine.  The insert Cd routine runs from 5C82BA to
5C8316 and is called from 5C5CF5.  So now we need to check out the surounding code in that area:

:005C5CE1 837DD43D                cmp dword ptr [ebp-2C], 0000003D
:005C5CE5 0F850A000000            jne 005C5CF5
:005C5CEB C705E0846C0001000000    mov dword ptr [006C84E0], 00000001

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005C5CE5(C)
|
:005C5CF5 E8C0250000              call 005C82BA          <-- Do the CD check
:005C5CFA 85C0                    test eax, eax          <-- Test the result
:005C5CFC 0F8507000000            jne 005C5D09           <-- Take this jump to continue with the game
:005C5D02 33C0                    xor eax, eax           <-- Set up for a quit to Win95
:005C5D04 E901060000              jmp 005C630A           <-- then go do it

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005C5CFC(C)
|
:005C5D09 E85FA8F7FF              call 0054056D                     <-- Continue with the game
:005C5D0E 837D0C00                cmp dword ptr [ebp+0C], 00000000
:005C5D12 0F851B000000            jne 005C5D33
:005C5D18 8B4508                  mov eax, dword ptr [ebp+08]
:005C5D1B 50                      push eax
:005C5D1C E8E8FBFFFF              call 005C5909

	There, we now have all the information we require to crack this game.  Just overwrite the call to
the CD check with mov eax, 00000001 and this will force the jne 005C5D09 at 5C5CFC to always be taken.
This in turns forces the game to always run if the CD is present or not.
	There is PowerVR version from NEC Japan for Virtual On, however it doesn't work with the US release
of this game due to the added files required for the PowerVR version.  In fact the CD check fails even with
an original Virtual On CD online!  The PowerVR version's exe file is vonpvr.exe and it's the file that needs
to be editted.  If you happen to own a PowerVR card and the special PowerVR version of Virtual On I have
added the required edits for it also.  The edit you need to make is:

For the DirectX CD version edit v_on.exe
===============================================
Search for: E8 C0 25 00 00  at offset 1,855,733
Change to : B8 01 00 00 00

For the PowerVR CD version edit vonpvr.exe
=============================================
Search for: E8 6F 26 00 00  at offset 964,135
Change to : B8 01 00 00 00

For the PowerVR net update edit vonpvr.exe
=============================================
Search for: E8 6F 26 00 00  at offset 964,359
Change to : B8 01 00 00 00

	Once again with a simple edit another Sega game, Virtual On, has been FiX'ed

Static Vengeance



NOTE:  A simple search string to find the CD check would be: "E8 xx xx 00 00 0F 85 07 00 00 00 33 C0 E9"
       Once found, change the E8 xx xx 00 00 to B8 01 00 00 00 and you have cracked Virtual On.



FiX.nfo

       Free Information Xchange  -=|=-  Share the Knowledge!

   Date: [ 02/28/97 ]       CD crack and tutorial by Static Vengeance ]
Program: [ Cybertroopers: Virtal On by Sega Entertainment             ]
    URL: [ http://www.nehe.nec.co.jp/j_s/hs/HS/pc3d/UTIL/PVRPATCH.EXE ]
Comment: [                                                            ]
Protect: [ Read the tutorial for complete information                 ]
Contact: [ [email protected]                             ]

   http://www.crackstore.com   Simply the best for game cracks!

 Greets: [ shadowRUNNER  R!SC  esoteric  TonyTOP  Zor                 ]


FiX Tutorials:
Addiction Pinball
Balls of Steel v1.0 - v1.2
Battle Arena Toshinden 2
Centipede 3D
Claw v1.20 & 1.3beta
Cyber Gladiators
CyberTroopers: Virtual-On CD & PowerVR versions
Daytona USA
Daytona USA Deluxe v1.0 & D3D patch
Deathtrap Dungeon
Forsaken
Frogger v1.0 - v3.0u
Get Medieval
Hardcore 4x4
HEDZ v1.0 & updated "old Win95" patch
Hexen II v1.03 - v1.11 OpenGL and DirectX
House of the Dead
Incoming v1.0 - current & OEM bundled
Klingon Honor Guard v1.0
Last Bronx
ManxTT Supperbikes v1.0 & v1.1
Master Mind CD & v7.3
Monopoly StarWars Edition v1.00z & v1.03b
Mortal Kombat 3
Mortal Kombat 4 v1.0 - Patch3
Motocross Madness
Need for Speed 3 CD & net patch1
Pandemonium
Powerboat Racing
Powerslide
ProPinball - The Web
ProPinball - Timeshock! v1.05 - 1.09b
RE-Loaded Win95/PowerVR patch
Sega Rally v1.0 & MMX upgrade
Sega Touring Car Championship v1.0 & v1.03
Shadow Master
Shipwreckers!
Speedboat Attack DirectX & 3Dfx
Star Wars-Rogue Squadron 3D v1.0
SWIV 3D Assualt all versions
Tempest 2000
The Divide
Turok
Twisted Metal 2
Ultim@te Race Pro all upto v1.4
Unreal all versions CD - 2.16
Virtua Figter v1.0 & DirectX3 upgrade
Virtua Figter 2 all versions
Virtua Squad
Virtua Squad 2
Wargods
WipeoutXL D3D & PowerVR
World Wide Soccer v1.0 & D3D patch



File_ID.diz

----------------------------------------
       Free Information Xchange
         Share the Knowledge!
________________________________________
      ____________    ___
     /  ______/\  \  /  /   FiX  
     \  \_____  \  \/  /
      \_____  \  \    /
     ______/  /   \  /
     \_______/tatic\/engeance
________________________________________
    Tutorial and crack for Virtal On
        From Sega Entertainment
----------------------------------------



# 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z