TweetFollow Us on Twitter

Virus
Volume Number:4
Issue Number:5
Column Tag:Advanced Mac'ing

A Vaccine for the 'nVIR' Virus

By Mike™ Scanlin, Contributing Editor

Unless you are going to Africa or Indochina, viruses and vaccinations are not something that most of us need to worry about. However, even if you’re not planning on travelling, there is one virus you need to be aware of. It is a computer virus that is infecting Macintoshes everywhere. [Note: The virus described in this article is apparently only one of at least three viruses that are going around as reported in the press. This article discusses what we shall name the ‘nVIR’ virus. The other two are the infamous ‘peace message’ virus and the ‘scrapbook’ virus reported in this month’s mousehole column, and in a recent MacWeek article. -Ed]

Are you infected?

Use ResEdit to open your system file and look for ‘nVIR’ resources. If you have them, then your system has been infected and chances are that at least some (if not most or all) of your applications are infected. Don’t panic. This particular virus is relatively harmless. There is an application at the end of this article that will allow you to remove the virus from your infected applications. There is also an ‘INIT’ resource you can put in your System Folder that will warn you if this virus ever shows up on your system. [Note that this vaccine and virus warning init applies only to this particular ‘nVIR’ virus. New vaccines will be necessary for the other two once it is known how they operate. -Ed]

Fig. 1 Vaccination Alert tells Application status

How I found it

Until last week, I had had no experience with computer viruses. I had heard rumors about the existence of Mac viruses, but didn’t really believe them. I do not know when this virus first got into my system. It must have come from some program I downloaded off of a network, but I do not know which one. By the time I figured out what was going on, the virus had modified seventeen of the applications on my hard disk and my System file.

Virus Symptoms

Sometime near the beginning of last week, I started hearing a beep when launching programs. It didn’t happen every time, only once in a while and with no discernable pattern. Using TMON, I trapped SysBeep() and discovered that something was modifying ‘CODE’ 0 and installing several ‘nVIR’ resources into every application I launched. I looked in my System file and, in addition to several ‘nVIR’ resources, found an ‘INIT’ 32 resource that I didn’t put there. I compared the standard ‘INIT’s from an original system disk and none of them matched the ‘INIT’ 32 I had found. What really clued me in to the idea of a virus was that if I took the ‘INIT’ 32 resource out of my System file, quit ResEdit, and then relaunched ResEdit, the ‘INIT’ 32 resource would be back in there. After disassembling ‘INIT’ 32, I learned how it worked and how to make my system immune to it. I am sharing this information so that other Mac users can protect themselves as well. [Note that this virus exhibits the ability to re-install itself after being patched out with ResEdit! -Ed]

How to make your System file immune

Use ResEdit to open your System file. Create an ‘INIT’ 32 resource that consists of these 2 hex bytes: 4E 75 (which is an RTS instruction). If ‘INIT’ 32 already exists and has a size of 366 bytes, then you can be pretty sure it is the virus’ ‘INIT’. Replace the existing ‘INIT’ 32 with the 2 byte version (4E 75). Now create 8 resources of the type ‘nVIR’; the case of the resource type is important -- do not use ‘NVIR’ or ‘nvir’. Their IDs should be 0 through 7, with size zero bytes. If they already exist, then delete them and create 8 new empty ones (with IDs 0-7).

That’s it. Your system is now immune to this particular virus (but not all possible viruses). If you now run an infected application, the virus will think that it is already installed in your system file, since it sees the ‘INIT’ and ‘nVIR’ resources it expects, and will leave it alone.

If your System file was infected before you immunized it, you should reboot the system before using the procedure below to remove the virus from your applications. This guarantees that the effects of ‘INIT’ 32 are removed from memory.

Removing the virus from infected applications

If an application has been infected, it will have several ‘nVIR’ resources, a ‘CODE’ 256 resource, and a possibly modified ‘CODE’ 0 resource. Here are instructions on how to restore an infected application (note: this is only useful if you are certain that your System file is not infected. Otherwise, the applications will become infected again. Also, you should practice on a copy of an infected application):

1) Open the application with ResEdit. If ‘CODE’ 256 exists, use GetInfo on it to check its size. If it is 372 bytes, then remove it. The reason we check for the size is because some applications, such as ReadySetGo, already have a ‘CODE’ 256 resource of their own and we don’t want to remove part of the application’s code.

2) Open ‘CODE’ 0 and look at the 3rd line of 8 hex bytes (bytes 16-23). If it is “0000 3F3C 0100 A9F0” then you need to replace that line of hex numbers with the 8 bytes contained in the ‘nVIR’ 2 resource. If the third line does not look like the above 8 bytes, then the ‘CODE’ resource is probably protected and did not get modified -- see below for an explanation. In this case leave it alone.

3) Remove all ‘nVIR’ resources. Make sure you have completed step 2 before removing ‘nVIR’ 2. You cannot restore the application without it.

Because this procedure is so automatic, I have written a program that does it for you. The application Vaccination displays the SFGetFile dialog and allows you to choose an application to vaccinate. A message is displayed that tells you the result of the vaccination and the SFGetFile dialog is displayed again. If your system has been infected, you should vaccinate every application on your hard drive. You will only see files of type ‘APPL’, ‘FNDR’ (for the Finder), and ‘dahd’ (for the DA handler) in the SFGetFile dialog so you might want to do a manual tree walk of your hard drive to be sure you vaccinate all of your applications. There is no harm in vaccinating an uninfected application or in vaccinating the same application more than once. This program does not make applications immune to this virus, it only removes this virus from them. But if your System file is immune, then there is no way this particular virus can spread to your applications. Note: you cannot use the Vaccination program to make your System file immune. You will have to do that manually using the procedure above.

How this virus works

This particular virus modifies the ‘CODE’ 0 resource of an application in such a way that when you launch that application the first thing to execute is a piece of virus installation code. That installation code looks for the virus’ presence in the System file you are launching from. If it does not find evidence of the virus, it then installs itself (as ‘INIT’ 32 and several ‘nVIR’ resources) into your System file and then executes the application you had originally launched. Once your System file is infected, every application launched from that system will become infected. The whole infection process only takes a second or two, so there is little chance you will notice it. If the virus detects that it is already in the System file and in the application you are launching (meaning that no installation of itself is necessary on this launch), then there is about a 6% chance (1 in 16) that you will hear a short beep. This is the beep that first got my attention. According to a friend of mine, Chris Borton, whose computer was also infected, if you have MacinTalk in your System Folder, then the virus speaks the words “Don’t Panic” instead of beeping.

This virus does not check if the ‘CODE’ 0 resource of the application it is trying to infect is protected or not. Consequently, applications that have ‘CODE’ 0 resources with the resProtected bit set are still infected, but are not contagious, i.e. they have the ‘CODE’ 256 resource and the ‘nVIR’ resources added to them, but they can not pass the virus on to a clean System file. I learned this by noticing that QUED/M and PageMaker were infected, but were not contagious. I couldn’t figure out why some programs had protected ‘CODE’ resources and others didn’t. Then one of the people I work with, Victor Romano, put it together. He told me that Lightspeed C (which QUED/M and PageMaker were written in) automatically sets the resProtected bit of the ‘CODE’ resources it generates. MPW does not. So, protecting the ‘CODE’ resources (which can be done with ResEdit) is another simple way of preventing this virus from affecting an application.

To be forewarned

I don’t know how far this virus has already spread, or how far it will spread. As a partial defense, however, I have written a piece of code that can be installed as an ‘INIT’ file in your System Folder that will warn you if it detects something that looks like this particular virus. VirusWarnINIT is a patch on 2 routines that this virus relies on: GetResource() and ChangedResource(). The patch to GetResource() makes a beep if theType == ‘nVIR’. The patch to ChangedResource() makes a beep if theResource is a handle to a ‘CODE’ 0 resource. I wouldn’t suggest installing this ‘INIT’ in a system known to be infected -- the number of beeps is sure to annoy you. I would have used something like an alert window instead of a beep as a warning, but I can’t be sure that the Window Manager has been initialized at the time the virus is detected. If you install this ‘INIT’ in a clean system and then launch a contagious application, you will hear about 5 or 6 beeps in a row as the virus tries to install itself in your System file.

Note that this ‘INIT’ is only a warning, not a vaccination. The virus will still install itself. The advantage is that you will know about it right away and can stop it before it spreads very far.

Now that my Mac has been vaccinated, it’s my turn. After Typhoid, Yellow Fever, Cholera and Meningococcal vaccinations, I’m off to Africa and Indochina. I wonder if I can get David Smith to send MacTutor to Serengeti National Park? Or do they already get it there? I’ll let you know

/* Vaccination.c
   * by Mike™ Scanlin   12 March 88
   *
   * Removes the ‘nVIR’ virus from an 
 * application chosen by the user.
  */
  
#include“QuickDraw.h”
#include“ResourceMgr.h”
#include“StdFilePkg.h”
#include“FileMgr.h”

#define NIL 0L
#define reg register

#define REPORT_STATUS_ALERT 129

#define nVIR_CODE_256_SIZE372

#define nVIR2Bad -10
#define nVIR2NotFound-11

void    RemoveResourceFromFile(long theType, int theID, int    
 refNum);
intInnoculate(Str255 *fileName, int vRef);
void    pStrCpy(char *p2, char *p1);
Boolean ChooseFile(Str255 *fn, int *vRef);
void    main(void);

static  SFReply  reply;
static  int applResFile;


/* RemoveResourceFromFile(theType, theID, refNum)
   *
   * This will remove the resource of type theType 
 * and ID theID from the open resource file
   * whose refNum is refNum.
  */
void  RemoveResourceFromFile(theType, theID, refNum)
long  theType;
inttheID;
intrefNum;
{
 reg Handle theResource;
 
 if ((theResource = GetResource(theType, theID)) && (HomeResFile(theResource) 
== refNum))
 RmveResource(theResource);
}

/* Innoculate(fileName, vRef)
  *
  * This removes the ‘nVIR’ virus from *fileName 
 in directory vRef.
  */
int     Innoculate(fileName, vRef)
reg Str255*fileName;
intvRef;
{
 reg Handle oldCODE, currentCODE;
 reg inti, refNum, returnVal;
 ParamBlockRec   pb;
 
 /* init the ParamBlockRec to all zeros */
 asm {
 lea    pb,A0
 move.l #sizeof(ParamBlockRec),D0
 subq.l #1,D0
 
 @1clr.b(A0)+
 dbra D0,@1
 }
 
 /* set the current working directory */
 pb.ioParam.ioVRefNum = vRef;
 PBHSetVol(&pb, FALSE);
 
 refNum = OpenResFile(fileName);
 
 if ((oldCODE = GetResource(‘nVIR’, 2)) && (HomeResFile(oldCODE) == refNum)) 
{
 if (GetHandleSize(oldCODE) != 8)
 /* if ‘nVIR’ 2 isn’t 8 bytes, then something 
 isn’t right. */
 returnVal = nVIR2Bad;
 else {
 if ((currentCODE = GetResource(‘CODE’, 0)) && (HomeResFile(currentCODE) 
== refNum)) {
 asm {
 MOVE.L oldCODE, A1
 MOVE.L (A1),A1
 MOVE.L currentCODE, A0
 MOVE.L (A0),A0
 ADDA #16, A0
 MOVE.L (A1)+, (A0)+
 MOVE.L (A1), (A0)
 }
 ChangedResource(currentCODE);
 }
 
 /* kill the ‘nVIR’ resources */
 for (i = 0; i <= 7; i++)
 RemoveResourceFromFile(‘nVIR’, i, refNum);

 /* kill the extra ‘CODE’ resource that this 
 virus adds (only if it has the size 
 of nVIR_CODE_256_SIZE) */
 if ((currentCODE = GetResource(‘CODE’, 256)) &&
 (GetHandleSize(currentCODE) == 
 nVIR_CODE_256_SIZE) && (HomeResFile(currentCODE) 
 == refNum))
 RmveResource(currentCODE);
 
 returnVal = noErr;
 }
 }
 else
 returnVal = nVIR2NotFound;
 
 if (refNum != applResFile)
 CloseResFile(refNum);
 
 return(returnVal);
}

/* pStrCpy(p2, p1)
  *
  * Copy the pascal string at *p1 to *p2.
  */
void pStrCpy(p2, p1)
reg char*p2, *p1;
{
 reg intlen;
 
 len = *p2++ = *p1++;
 while (--len >= 0) 
 *p2++ = *p1++;
}


/* ChooseFile(fn, vRef)
   *
   * Use SFGetFile() to get the name of an 
 * application from the user. Return the directory
   * of the chosen file in *vRef. Return FALSE if the 
 * user clicked Cancel, TRUE if they clicked
   * Open.
  *
  * Thanks to Chris Borton for this routine.
  */
Boolean ChooseFile(fn, vRef)
Str255  *fn;
int*vRef;
{
 SFTypeList myTypes;
 static Point  SFGwhere = { 90, 82 };
 
 myTypes[0] = ‘APPL’;
 myTypes[1] = ‘FNDR’;
 myTypes[2] = ‘dahd’;
 
 SFGetFile(SFGwhere, NIL, 0L, 3, myTypes, 0L, &reply);
 if (reply.good) {
 pStrCpy((char *)fn , (char *)reply.fName);
 *vRef = reply.vRefNum;
 return(TRUE);
 }
 else
 return(FALSE);
}

void main() {
 
 Str255 fileName;
 int    vRef;
 
 /* save the application’s resource file refNum */
 applResFile = CurMap;
 
 InitGraf(&thePort);
 InitFonts();
 InitWindows();
 InitMenus();
 InitDialogs(0L);
 InitCursor();

 /* keep choosing files until the user hits Cancel */
 while (ChooseFile(&fileName, &vRef)) {
 switch (Innoculate(&fileName, vRef)) {
 case   nVIR2Bad:
 ParamText(&fileName, “\pResource ‘nVIR’ 2 is not 8 bytes long. File 
cannot be repaired.”, NIL, NIL);
 break;
 case nVIR2NotFound:
 ParamText(&fileName, “\pResource ‘nVIR’ 2 not found. File is not infected 
or cannot be repaired.”, NIL, NIL);
 break;
 default:
 ParamText(&fileName, “\pVirus successfully removed.”, NIL, NIL);
 }
 
 /* show the result of the attempted removal */
 Alert(REPORT_STATUS_ALERT, NIL);
 }
}


/* VirusWarnINIT.c
   * by Mike™ Scanlin   13 March 88
   *
   * Put this in your system folder to warn you 
 * about the ‘nVIR’ virus.
   * It patches GetResource() and ChangedResource().
  */
  
#include “Asm.h”
#include “ResourceMgr.h”

#define GetResource0xA9A0
#define ChangedResource 0xA9AA
#define JMP 0x4EF9
#define memFullErr -108
#define beepDuration 20

void  main(void);

void  main()
{
 asm  {

/* beginning of the code that installs the patches */

 move.l D3,-(SP)
 
/* get the original GetResource address */   
 move #GetResource,D0
 _GetTrapAddress
/* set up the JMP instruction that calls the original GetResource */
 lea    @origGR,A1
 move #JMP,(A1)+
 move.l A0,(A1)

/* get the original ChangedResouce address */
 move #ChangedResource,D0
 _GetTrapAddress
/* set up the JMP instruction that calls the original ChangedResource 
*/
 lea    @origCR,A1
 move #JMP,(A1)+
 move.l A0,(A1)

/* get some space in the system heap for the patches */
 lea    @last,A0
 lea    @first,A1
 suba.l A1,A0    /* the length of our patches */
 move.l A0,D0
 add.l  #254,D0  /* the extra space for the Str255 at the end (@name) 
*/
 move.l D0,D3    /* save for _BlockMove */
 _NewPtrSYS
 cmpi   #memFullErr,D0
 beq.s  @noPatch
 move.l A0,-(SP) /* save for _BlockMove */
 move.l (SP),-(SP) /* for _SetTrapAddress */

/* set GetResource to the beginning of the space we just got in the system 
heap */
 move #GetResource,D0
 _SetTrapAddress

/* set ChangedResource trap */
 lea    @changedResouce,A0
 lea    @getResource,A1
 suba.l A1,A0
 adda.l (SP)+,A0
 move #ChangedResource,D0
 _SetTrapAddress
 
/* now move it into place */
 lea    @first,A0
 move.l (SP)+,A1
 move.l D3,D0
 _BlockMove

@noPatchmove.l (SP)+,D3
 rts
 
/* end of the code that installs the patches */

@first  

/*
  * This is the patch to GetResource
  *
  */
@getResource
 move.l 6(SP),D0 /* get theType */
 cmpi.l #’nVIR’,D0
 bne.s  @origGR

/* at this point we know something is trying to load an ‘nVIR’ resource 
*/ 
 move #beepDuration,-(SP)
 _SysBeep
/* note that this is only a warning beep, it falls through 
 * to the original GetResource, so the calling function 
 * never knows that it was detected. */
@origGR nop /* JMP to original trap */
 nop
 nop

/*
  * This is the patch to ChangedResource
  *
  */
@changedResouce

/* call GetResInfo() to see if we are changing a CODE 0 resource */
 move.l 4(SP),-(SP)/* copy the resource handle 
 * that was passed to
   * ChangedResouce() */
 pea    @theID
 pea    @theType
 pea    @name
 _GetResInfo
 
 lea    @theType,A0
 move.l (A0),D0
 cmpi.l #’CODE’,D0
 bne.s  @origCR
 
 lea    @theID,A0
 tst    (A0)
 bne.s  @origCR

/* give a warning beep a CODE 0 resource is being changed */   
 
 move #beepDuration,-(SP)
 _SysBeep
 
@origCR nop /* JMP to original trap */
 nop
 nop
 
@theID  dc0
@theTypedc.l0
@name   dc0 
 /* there are actually 254 more bytes to this
 * variable (for a total of 256). Check the
 * add.l #254,D0 instruction in the install code. */

@last
 }
}
 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Microsoft Remote Desktop 8.0.34 - Connec...
With Microsoft Remote Desktop, you can connect to a remote PC and your work resources from almost anywhere. Experience the power of Windows with RemoteFX in a Remote Desktop client designed to help... Read more
Data Rescue 4.2.3 - Powerful hard drive...
Use Data Rescue to recover: crashed, corrupted or non-mounting hard drive deleted, damaged, or lost files reformatted or erased hard drive One powerful new feature found in Data Rescue 4 is... Read more
Viber 6.2.0 - Send messages and make cal...
Viber lets you send free messages and make free calls to other Viber users, on any device and network, in any country! Viber syncs your contacts, messages and call history with your mobile device, so... Read more
Lyn 1.7.2 - Lightweight image browser an...
Lyn is a fast, lightweight image browser and viewer designed for photographers, graphic artists, and Web designers. Featuring an extremely versatile and aesthetically pleasing interface, it delivers... Read more
Lyn 1.7.2 - Lightweight image browser an...
Lyn is a fast, lightweight image browser and viewer designed for photographers, graphic artists, and Web designers. Featuring an extremely versatile and aesthetically pleasing interface, it delivers... Read more
Tunnelblick 3.6.7beta02 - GUI for OpenVP...
Tunnelblick is a free, open source graphic user interface for OpenVPN on OS X. It provides easy control of OpenVPN client and/or server connections. It comes as a ready-to-use application with all... Read more
jAlbum Pro 13.4 - Organize your digital...
jAlbum Pro has all the features you love in jAlbum, but comes with a commercial license. You can create gorgeous custom photo galleries for the Web without writing a line of code! Beginner-friendly... Read more
calibre 2.65.1 - Complete e-book library...
Calibre is a complete e-book library manager. Organize your collection, convert your books to multiple formats, and sync with all of your devices. Let Calibre be your multi-tasking digital librarian... Read more
jAlbum 13.4 - Create custom photo galler...
With jAlbum, you can create gorgeous custom photo galleries for the Web without writing a line of code! Beginner-friendly, with pro results - Simply drag and drop photos into groups, choose a design... Read more
Backblaze 4.2.0.966 - Online backup serv...
Backblaze is an online backup service designed from the ground-up for the Mac. With unlimited storage available for $5 per month, as well as a free 15-day trial, peace of mind is within reach with... Read more

Mummy madness in new action game Tomb He...
Hot on the tail of Bump Hero, ZPlay is giving gamers another reason to get screen bashing with a brand new release. Tomb Heroes is a challenging action game in which you battle enemies in various tombs around the world. You can select from nine... | Read more »
Siralim 2 (RPG / Roguelike) (Games)
Siralim 2 (RPG / Roguelike) 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: Siralim 2 is an old-school monster catching RPG. Summon and customize hundreds of creatures to fight for you as... | Read more »
Clean Text (Productivity)
Clean Text 1.0 Device: iOS Universal Category: Productivity Price: $3.99, Version: 1.0 (iTunes) Description: | Read more »
Gemini - A Journey of Two Stars (Games)
Gemini - A Journey of Two Stars 1.0.1 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0.1 (iTunes) Description: *** SPECIAL LAUNCH SALE: $2.99 (25% off) *** "A mesmerizing and unexpectedly emotional journey." -- Los... | Read more »
How to get four NFL superstars for your...
Even though you're probably well on your way to building a top notch squad for the new season in Madden NFL Mobile, let's say you could beef it up by adding Rob Gronkowski, Antonio Brown, Von Miller, and Todd Gurley to your roster. That's... | Read more »
Cartoon Network Superstar Soccer: Goal!!...
Cartoon Network Superstar Soccer: Goal!!! – Multiplayer Sports Game Starring Your Favorite Characters 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Become a soccer superstar with your... | Read more »
NFL Huddle: What's new in Topps NFL...
Can you smell that? It's the scent of pigskin in the air, which either means that cliches be damned, pigs are flying in your neck of the woods, or the new NFL season is right around the corner. [Read more] | Read more »
FarmVille: Tropic Escape tips, tricks, a...
Maybe farming is passé in mobile games now. Ah, but farming -- and doing a lot of a other things too -- in an island paradise might be a little different. At least you can work on your tan and sip some pina coladas while tending to your crops. [... | Read more »
Become the King of Avalon in FunPlus’ la...
King Arthur is dead. Considering the legend dates back to the 5th century, it would be surprising if he wasn’t. But in the context of real-time MMO game King of Avalon: Dragon Warfare, Arthur’s death plunges the kingdom into chaos. Evil sorceress... | Read more »
Nightgate (Games)
Nightgate 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: *** Launch Sale: 25% OFF for a limited time! *** In the year 2398, after a great war, a network of intelligent computers known as... | Read more »

Price Scanner via MacPrices.net

9-inch 32GB iPad Pros on sale for $70 off MSR...
B&H Photo has 9″ 32GB WiFi Apple iPad Pros on sale for $70 off MSRP, each including free shipping. B&H charges sales tax in NY only: - 9″ Space Gray 32GB WiFi iPad Pro: $529 $70 off MSRP - 9... Read more
Mac minis on sale for up to $140 off MSRP
Adorama has Mac minis on sale for up to $100 off MSRP including free shipping plus NY & NJ sales tax only: - 1.4GHz Mac mini: $449 $50 off MSRP - 2.6GHz Mac mini: $649 $50 off MSRP Amazon has the... Read more
Back To School with OtterBox Essentials
Back to school means back to an environment that is tough on tech. OtterBox has the back to school essentials you need to keep tech safe from drops, bumps, scratches and hallway havoc. Check out the... Read more
VRS Design Releases New iPhone 7 Plus Case Li...
With a device as large and costly as the iPhone 7 Plus, it is primal instinct to protect it from potential damage. According to a study by SquareTrade in 2012, iPhone damages cost Americans roughly $... Read more
MacBook Airs on sale for up to $101 off MSRP
Amazon has 11″ and 13″ MacBook Airs on sale for up to $101 off MSRP for a limited time. Shipping is free: - 11″ 1.6GHz/128GB MacBook Air (model MJVM2LL/A): $798 $101 off MSRP - 11″ 1.6GHz/256GB... Read more
Apple certified refurbished iPad mini 4s avai...
Apple has certified refurbished iPad mini 4s now available for up to $120 off the cost of new models. An Apple one-year warranty is included with each iPad, and shipping is free. The following models... Read more
Apple price trackers, updated continuously
Scan our Apple Price Trackers for the latest information on sales, bundles, and availability on systems from Apple’s authorized internet/catalog resellers. We update the trackers continuously: - 15″... Read more
Global Tablet Shipments Projected to Increase...
Digitimes’ Jim Hsiao reports that global tablet shipments will increase by 16.3 percent sequentially to reach nearly 47 million units in 2016′s third quarter, but that volume will still be down over... Read more
Apple’s 2016 Back to School promotion: Free B...
Purchase a new Mac or iPad using Apple’s Education Store and take up to $300 off MSRP. All teachers, students, and staff of any educational institution qualify for the discount. Shipping is free, and... Read more
Apple refurbished iPad Air 2s available start...
Apple has Certified Refurbished iPad Air 2 available starting at $339. Apple’s one-year warranty is included with each model, and shipping is free: - 128GB Wi-Fi iPad Air 2: $499 - 64GB Wi-Fi iPad... Read more

Jobs Board

*Apple* Solutions Consultant - Apple (United...
# Apple Solutions Consultant Job Number: 51443201 Mishawaka, Indiana, United States Posted: Aug. 25, 2016 Weekly Hours: 40.00 **Job Summary** As an Apple Read more
*Apple* Solutions Consultant - Apple (United...
# Apple Solutions Consultant Job Number: 51218354 Fredericksburg, Virginia, United States Posted: Aug. 18, 2016 Weekly Hours: 40.00 **Job Summary** As an Apple Read more
*Apple* Retail - Multiple Positions Birmingh...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
SW Engineer *Apple* TV - Apple Inc. (United...
The Apple TV team is looking for excellent software engineers with experience in hardware, media management, media playback, content delivery and a passion for Read more
*Apple* Retail - Multiple Positions Victor,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.