TesseractOCR is the probably the best open source OCR engine out there and is very flexible as to what it can recognize. It allows for training with custom data, so essentially any language is possible as long as your willing to put in the work (i.e. create the training set).
There are tools provided by tesseract (with a gui interface) that can help create the data set where you specify the bounding box of characters and the corresponding transcription.
EDIT: Noticed from another post (linked above) that a training set on Arabic has already been created for version 3.01. You'd just need to plug in the Arabic data and your problem is solved :).