מניעת העתקת תוכנה באופן בלתי חוקי

בין יצרני התוכנה ופורצי התוכנה מתנהלת מלחמה ארוכת שנים ואינסופית. כל יצרן תוכנה רוצה באופן טבעי להגן על הקניין שלו ולמנוע לא רק שימוש לא מורשה בתוכנה אלא גם גניבת קוד המקור של התוכנה או העתקת אופן פעולתה, אשר באופן טבעי מוגן בעיקר במוצרים שאינם מוצרי קוד פתוח. גם תוכנת “רשומון” פרי פיתוחי משנת 1989, הוגנה על ידי פלאג הגנה של אלאדין בשם AmigaHASP אשר נמכר בהמשך לחברת אלאדין.

קיימות טכנוקות רבות למניעת הגנת תוכנה, פריצה (hacking) של תוכנה וביצוע הינדוס לאחור (reverse engineering) של קובץ התוכנה. לא ניתן לאכוף מערכת רישוי לתוכנה כאשר ניתן בקלות לעקוף מערכת זו על ידי הינדוס לאחור. לכן נעשה שימוש בטכניקות של אובפוסקציה (Obfuscation).

תהליך האובפוסקציה כרוך בשינוי קוד התוכנה באופן שיקשה על הבנתו. תהליך זה מבוצע בשתי רמות: רמת קוד המקור ורמת קובץ הריצה של התוכנה.

ברמת קוד המקור, קיימות שיטות להצפין מחרווזת, להסוות קריאות לפונקציות מערכת הפעלה ושינוי שמותיהם של משתנים ופונקציות מקומיות באופן שיקשה על הבנת ייעודם.

בשנת 2013 פרסמתי מאמר בנוגע להצפנת מחרוזות בתוכנה לצורך אובפוסקציה (זכה בפרס ראשון כמאמר הטוב ביותר ב-++C באותו חודש). במאמר מובא קוד מקור פרי פיתוח צוות הפיתוח שלנו אשר במסגרתו נעשה שימוש בהצפנת AES 256.

ראשית, אציין כי מאמר זה מתמקד בתוכנה כתובה ב-C /C++ ולא בשפות אחרות או בטכנולוגיות DOT NET אשר באופן טבעי אינן מוגנות וקיימים כלים להקשחתם.

לצורך בחינות האפשרויות לבצע אובפוסקציה ברמת קוד המקור, קיים מוצר שנחשב לטוב מסוגו של חברת Semantic Designs.

כדוגמה לקוד לפני ואחרי, מובאת באתר שלהם הדוגמה הבאה:

לפני ביצוע התהליך קוד המקור נראה כך:

 

for (i=0; i < M.length; i++){
   // Adjust position of clock hands
   var ML=(ns)?document.layers['nsMinutes'+i]:ieMinutes[i].style;
   ML.top=y[i]+HandY+(i*HandHeight)*Math.sin(min)+scrll;
   ML.left=x[i]+HandX+(i*HandWidth)*Math.cos(min);
 }

לאחר התהליך הוא ייראה כך:

for(O79=0;O79<l6x.length;O79++){var O63=(l70)?document.layers["nsM
\151\156u\164\145s"+O79]:ieMinutes[O79].style;O63.top=l61[O79]+O76+(O79*O75)
*Math.sin(O51)+l73;O63.left=l75[O79]+l77+(O79*l76)*Math.cos(O51);}

במהלך תהליך זה נתמכות הפעולות הבאות, כל אחת תורמת את חלקה להפיכת הקוד לבלתי ניתן להבנה:

  • Output encoding in ASCII, European ASCII, or UNICODE
  • No changes to the your C++ compilation or execution procedurs or environment
  • User definable list of preserved names
  • Predefined list of reserved identifiers for C++ standard libraries provided
  • Can preserve most preprocessor conditionals and macro calls in obfuscated source
  • Option to neatly format C++ source code to aid development before obfuscation.
  • Output encoding in ASCII, European ASCII, or UNICODE
  • Command line and GUI interfaces

 לעומת זאת, ברמה הבינארית של קובץ הריצה של התוכנה, התהליך מתבצע בשתי צורות עיקריות:

1. ביצוע שינויים ברמה הבינארית ועם זאת מבלי לפגוש במבנה של הקובץ (משום שפגיעה משמעותית במבנה הקובץ תהפוך אותו ללא קריא למערכת ההפעלה).

2. שימוש ב-Loader

הדרך הראשונה אפשרית באופן מוגבל, כאמור בשל הצורך לשמר את מבנה הקובץ באופן שיאפשר ריצתו. ברגע שהופכים קובץ ריצה (exe) לקובץ לגמרי אחר, ככל שיהיה מוגן ומוצפן, מערכת ההפעלה לא תזהה אותו ולא תריץ אותו.

הדרך השניה מבוססת על הצפנת קובץ הריצה כולו, והפעלתו על ידי תוכנה קטנה הטוענת את המידע המוצפן בזמן ריצה, פותחת את ההצפנה ומריצה אותו. שיטה זו מסורבלת ומקשה על עידכונים, דיבוג  ותחזוקה. ובנוסף עלולה להביא לחסימה על ידי רוב האנטי וירוסים המזהים סוג כזה של הפעלה כמאפיין לנוזקות למינהן; אם בוחנים את אופן פעולה של Loader, הוא משמש כ”סוס טרויאני” אשר עם הפעלתה, פותח ושולף מתוכו את התוכנה האמיתית. סוג כזה של פעולה מתאים לנוזקות המסוות את ייעודן האמיתי אולם ככל שמדובר בתוכנה לגיטימית, תוכנה כזו תיחסם בשל אותה תבנית פעולה. מצד שני, ברמה של הגנה, שיטה זו יעילה ביותר שכן היא מאפשרת הצפנה של מרבית התוכנה. (תמיד מדובר בהצפנה של “מרבית” ולא של “כל” התכונה, זאת משום שללא החלק הלא מוצפן, לא תתפאשר הרצת התוכנה. צלילה למבנה ה-PE (המבנה אשר עומד מאחורי כל תוכנה שתרוץ ברגע שתופעל בלחיצה כפולה), מתואר במאמרים רבים כדוגמת מאמר זה.

קיימות מספר שיטות אשר שימוש בהן עשוי להקשיח את התוכנה ולהקשות על הינדוס לאחור שלה:

  • שימוש בresources מוצפנים או שימוש בבלוקי מידע מוצפנים במקום resources.
  • הצפנת מחרוזות.
  • החלפת קריאות לפונקציות מערכת ההפעלה בקריאה לפסדאו-פונקציה פנימית אשר טוענת מצביע לפונקציה האמיתית (תוך הצפנה ופתיחה בזמן ריצה של שם הפונקציה), ואז קריאה לפונקציה האמיתית.

לדוגמה

GetProcAddress(hModule,reinterpret_cast<const char*>(reinterpret_cast<int>(szName)

בנוסף נעשה שימוש בטכניקות המקשות על הפעלת כלי דיבוג (Debuggers) ואלה יפורטו להלן:

  1. בדיקות תזמון של ריצת קטעי קוד, מתוך הנחה שאם אלה רצים כאשר במקביל מופעל debugger, זמן הריצה יהיה ארוך יותר.
  2. בדיקת קיומם של debuggers ידועים לפי שם התהליך (process) שלהם.
  3. שימוש בחתימת קוד / חתימה דיגטלית אחרת של קטעי תוכנה, ואימות חתימה זו בזמן ריצה על מנת להבטיח שלא הוחלפו.

 

לדוגמה, אם התוכנה עושה שימוש ב-DLL, הוא ייחתם דיגיטלית בחתימת קוד (Code Signing Certificate). לאחר מכן, בזמן ריצה, תאומת החתימה (כמובן לא על ידי ה-DLL עצמו).

לאחרונה פיתחתי כלי סיוע לחתימת קוד וניתן להוריד כלי זה כאן.

בנוסף, למיקרוסופט יש ספריה לחתימה ואימות חתימה וניתן לקרוא עליה כאן.

תיאור זה הנו על קצה המזלג וניתן לקרוא עוד (באנגלית) בבלוג של Secured Globe, Inc ובבלוג של מערכת הגנת התוכנה שלנו.

מיכאל האפרתי Michael Haephrati

Secured Globe, Inc.

 

Free Forensics Tools

Here are free forensics tools I have added recently:

https://sourceforge.net/projects/chrome-credentials-viewer/

https://sourceforge.net/projects/firefox-credentials-viewer/

https://sourceforge.net/projects/ie-credentials-viewer/

Also you can read about these tools in the following articles:

https://www.codeproject.com/Articles/1164749/The-Secrets-of-Wi-Fi-Credentials

https://www.codeproject.com/Articles/1167954/Firefox-Credentials-Secrets

https://www.codeproject.com/Articles/1167935/The-Secrets-of-Google-Chrome-Credentials

https://www.codeproject.com/Articles/1167943/The-Secrets-of-Internet-Explorer-Credentials

How to play with the ‘date’ taken’ attribute of photos

Original article I have published at Code Project

http://www.codeproject.com/Articles/792931/Date-time-batch-changer-for-photos-and-other-files

Source code

Executable to download

Background

I recently looked for photos and videos of an important event and couldn’t understand why I can’t find any video files, even though I recalled that my wife and my daughter took both photos and videos…

I then realized that our still camera (Nokia D5000) and camcorder (Sony) are both set up with the wrong time, each with a different wrong time… One was 7 hours and 36 minutes earlier and the other was 3 hours later. That was the reason for the confusion, and I spent a lot of time checking backups, etc. thinking my precious files were somehow deleted.  I calculated the correct times of both video and photo files, adjusting their time stamp and happily found out that both occurred within the same time frame, so everything was OK. I then setup the time of the camcorder and the camera to the correct time. and looked for a way to fix the incorrect time stamps of my photos and video files. That is when I decided to program such tool myself…

Introduction

Even though there can be many occasions in which a program like the one I am about to introduce, can be useful, I originally developed it for the purpose of adjusting wrong time stamp of photos and videos, which are a result of incorrect settings or timezone in the camcoder or camera.  The idea is to define the following:

  • Path – where to look (will bring a path dialog box where the user can type or choose the start path to search. For example: c:\ or c:\users\myuser\documents\

  • Query – what to look for (for example all files ending with .AVI, or all files within a certain date, or files which contain a certain string in their name).

  • Date related attributes to apply to– which can be either:

    • Date Created
    • Date Last Modified
    • Date Last Accessed
    • Date Taken
  • Requested change – which can be either:

    • Fixed date and time, for example: 7.7.2014 01:00
    • Relative change of currently stamped date and time, for example: 7 and a half hours earlier (Dec 12, 2014 12:31AM will be adjusted to: Dec 11, 2014 5:01PM)

The Building Blocks

Searching for files based on a given criteria

Our application allows you to either state the extension of files searched for, the name (or part of it) but also to process only files having a certain date/time stamp. I will elaborate about the various attributes files have, which are date/time related in the next section, however, for the simplicity of this article, our program changes all of these attribute at once. A ComboBox is used to allow the user to make the selection among the above options.

Changing a file’s date/time related attributes

There are several attributes which are relevant for our goal, among them:

  • Date Created- The date and time in which the file was first created.
  • Date Modified- The date and time in which the file was last modified.
  • Date Accessed – The date and time in which the file was last accessed.

for photos there is another important attribute: Date Taken. That is the date and time a photo was taken.

For the purpose of the article, “photos” are identified by their extension and include .jpg and .nef (Nokia) photos, but that of course can and should be enhanced.


The Date Taken Property

The Date Taken property appears as one of the optional columns Windows Explorer allows to choose. This property is only valid for photos. Unlike the other date related file properties, this one is taken from the EXIF (Exchange Image File format) of the image file.

In order to read and manipulate the EXIF of the file, I have used exif.cpp and exif.h written by Davide Pizzolato, which based his work on jhead-1.8 by Matthias Wandel.

When a file is identified as a photo, getTakenXap is called:

Then the current “Date Taken” attribute value is used to call parseXapTime.

Calculating date and time differences

If you look at web sites like this one, you can check the possibilities covered in the code, for example changing the date/time stamp of a file so it will show 7 and a half hours backward.

To do such calculations from an application, we can use CTime for storing the time, and CTimeSpan for the calculations.

CTime

The CTime class is used to hold an absolute time and date.

Microsoft provides 7 different constructors for the CTime class which amongst others, allows you to do the following:

  1. Create a time class using a Standard Library time_t calender time.
  2. Create a time class using a dos date and time.
  3. Create a time class using a Win32 SYSTEMTIME or FILETIME
  4. Create a time class using individual entries for year, month, day, hour, minute, and second.

By incorporating the ANSI time_t data type, the CTime class provides all the functionalities discussed above in section 1. It also has methods to get the time in SYSTEMTIME or FILETIME or GMT format.

In addition this class also overloads the +, -, = , ==, <, <<, >> operators to provide many more useful features.

You can find the definition of CTime class in afx.h header file and it is as following:

The Process

First you select the search creteria, and / or a folder where you wish to start…

Alternatively, files can be just dragged and dropped to the dialog box.

Note: in this version only one file can be dragged, but that will be fixed later.

For the purpose of this article, I have created a folder named “test” and copied there many files, and folders. These files are both photos (.jpg) and non photos (.txt).

After the files are found based on the search criteria, selected or dragged and dropped, the process starts. Each file is checked and its date/time attributes are changed.

  • If a certain date and time are requested, the change takes into consideration the local time zone and whether day light savings is on or off.

}

  • An “Undo” button allows reversing any change.
  • The log of the changes that have taken place is displayed on screen, along with the date/time before and after the process.
  • The user can check via check boxes which dates should be changed.
  • The dates include the “Date Taken” attribute which is unique for photos (such as .jpg and camera specific files such as .NEF files (Nikon camera), etc. That is done via accessing the EXIF of the graphic file.

User Interface

As part of my efforts to make my small application user friendly and easy to use, I have done the following:

  • Keeping last entered values:

    Since there are two types of input from the user: a fixed date / time and a relative time (number of hours), which are indicated by setting a Combo box to either “Relative Date” or “Fixed Date”, it is important that when the user switches between the two, the last value entered will be show. For example, if you entered the fixed date “2000/01/01” and then entered 8:30 as a Relative Date, when you select “Fixed Date” again, the last value “2000/01/01” should be shown, and when switching back to Relative Date, the last relative value, “8:30” should be shown as well.

  • Allowing flexible data entry

    It should be possible to enter the following as a fixed date:

    • 2000/01/01 00:00:00
    • 2000/01/01 00:00
    • 2000/01/01

          It should be possible to enter a relative time in various ways:

  • 10 (means 10 hours forward)
  • -5 (means 5 hours backward)
  • 10:30 (means 10 and a half hours forward)

and so on…

  • Error handling

    In case there is an error, such as a file being locked, the log entry of this specific file is marked as “Failed” and the process continues.

Code Signing

As I am involved with large scale projects, my software venture purchases a Code Signing Certificate from Verisign (they cost $499 a year, and are suitable also for Kernel drivers).

To sign an executable, I use a tool named kSign by Commodo.

The difference between signing your executables and not signing them can be explained by the warrning your customer will get when trying to download a non signed executable.

and also:

But if your executable is signed, the user will get this message:

Which is better. Obtaining a Verisign certificate means that your identity (or your company’s identity) are fully verified.

Final Notes

Thanks to Aha-Soft for the icon used for the demo application. Copyright © 2000-2014 Aha-Soft

If you find bugs, please feel free to send me the revised source code Smile | :)

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Target Eye Revealed – part 6

This new article contains another portion of the Target Eye Monitoring System’s source code along with the secret behind the method used by Target Eye to hide its files. Target Eye was able to hide its own files along with all files collected from the target machine, prior to sending it to its operator. The article explains how these files are hidden, along with exposes how to reveal these hidden files.

The default UI

Target Eye uses a simple (and yet unique) mechanism  to hide files but the trick will work on most new Windows systems (including Windows 8) that because the only option to reveal these hidden files is not part of the default user interface of the Windows Files Explorer, so even if the “Show Hidden Items” is checked, the Target Eye hidden files will not be revealed.

You can read more and browse further parts of the Target Eye source code in the following articles:

1.  The first article is about Target Eye’s Auto Update mechanism, and how it is capable of checking for updates, downloading them when there are, installing them and running them instead of the old version currently running, all of the above, with no end-user intervention.

2. The second article was about the Target Eye’s screen capturing mechanism, and how compact JPG files are created combining a reasonable image quality and a small footprint.

3. The third article was about the Shopping List mechanism.

4. The forth article is about Keyboard capturing.

5.The fifth article deals with the packaging used to let our Secret Agent in. In other words, how Target Eye can be used to wrap it with what we refer to as “cover story”

6. The Sixth article explains how files are hidden and when, along with exposing how to reveal these hidden files.

סדרת מאמרים אודות תוכנת Target Eye

Here is a list of articles I have written about Target Eye Monitoring System

Target Eye Revealed – part 1

http://www.codeproject.com/Articles/310530/Target-Eye-Revealed-part-1-Target-Eyes-Unique-Auto

Target Eye Revealed – part 2

http://www.codeproject.com/Articles/460498/Target-Eye-Revealed-part-2-Target-Eyes-Screen-Capt

Target Eye Revealed – part 3

http://www.codeproject.com/Articles/461344/Target-Eye-Revealed-part-3-The-Shopping-List-Mecha

Target Eye Revealed – part 4

http://www.codeproject.com/Articles/635134/Target-Eye-Revealed-part-4-Keyboard-Capturing

Target Eye Revealed – part 5

http://www.codeproject.com/Articles/635384/Target-Eye-Revealed-The-Cover-Story

Target Eye Revealed – part 6

http://www.codeproject.com/Articles/785450/Target-Eye-Revealed-part-6-File-Hiding

2012 במבט לאחור

The WordPress.com stats helper monkeys prepared a 2012 annual report for this blog.

Here’s an excerpt:

600 people reached the top of Mt. Everest in 2012. This blog got about 7,100 views in 2012. If every person who reached the top of Mt. Everest viewed this blog, it would have taken 12 years to get that many views.

Click here to see the complete report.

האקרים טורקים הפילו 50 אתרים ישראלים

קבוצת האקרים טורקיים הפילה לאחרונה 50 אתרים ישראלים.

הם כתבו על כך בדף הפייסבוק שלהם

בעליו של אחד האתרים פנה אלי בבקשת עזרה דחופה אותה נתתי בשמחה.

רוב האתרים ברשימה (אם לא כולם) מאוכסנים בשרתים של נט ויזיון. בשל סיבות טכניות (ואחרות) לא ניתן היה לקבל מהם סיוע ממשי. הם שינו את הסיסמה אולם לא עלה בידם לשחזר את תוכן האתר לפני הפריצה.

האתר הפרוץ הוביל לדף בודד ובו התוכן והתמונות הבאות:

ברור ש-50 האתרים נפרצו בהעדר אמצעי אבטחה מינימליים.

לאחר הפריצה, הקשיחה חברת נט ויזיון את הכניסה לשרת, וכך הפך כל נסיון לסייע לקשה יותר. על מנת להכנס לשרת נדרש ממני לתת את כתובת ה-IP שלי, לקבל אישור לכניסה מכתובת זו, ורק אז להכנס. למה חושבים על זה רק אחרי שאתרים נפרצים? (על זה נאמר: too little. Too late). הגבלה כזו הייתה מונעת את הפריצה, ולאחר הפריצה האטה את הסרת דברי הנאצה.

הסעודים שיתפו פעולה

בשלב מסויים חשבתי להסיר את התמונות, ובדקתי היכן הן מאוכסנות. לא הפתיע לגלות שהם מאוכסנות בחברה היושבת בסעודיה. לא היו לי הרבה ציפיות אולם פניתי לאותה חברה בבקשה להסיר תמונות אלה, בשל היותן מסיתות ופוגעות.

התשובה לא אחרה לבוא. למען האמת, תגובת הסעודים הייתה מהירה מתגובת נט ויזיון…

וכך נראה האתר אחרי ההסרה:

לעומת זאת, לא נראה פתרון מהכיוון הישראלי. זה היה מתסכל. חשבתי שזה עניין של דקות. כבר נראה יותר הגיוני לפרוץ מחדש לאתר כדי להחליף פריצה אחת (של הטורקים) בפריצה חדשה (שלנו)…. בסופו של דבר (יום למחרת) לא היה צורך לפרוץ. נט ויזיון הצליחו לסגור את האתר (אם כי לא לשחזר אותו), וזה מוביל לחלק החשוב: איך למנוע פריצה.

איך להגן על אתר בפני פריצה

1. להשתמש בסיסמאות חזקות לממשק עריכת האתר, העלאת תכנים באמצעות FTP (סיסמה נפרדת), התחברות מרחוק לשרת (Remote Desktop) – גם כאן, סיסמה נפרדת.

2. החליפו את הסיסמאות אחת לחודש.

3. השתמשו בסטנדרטי קידוד שימנעו ככל האפשר פריצה באמצעות SQL Injection

4. הגדירו את הכניסה לאתר באופן שמתיר כניסה אך ורק מכתובת (או מספר כתובות) IP, וחוסמת את הכניסה מכתובות אחרות. לחליפין, ניתן לחסום גישה ממדינות מסויימות אולם האקרים יכולים להשתמש בProxie שיתחזה לכתובת מישראל. לעומת זאת, בלתי אפשרי להתחזות לכתובת IP ספציפית.

5. בצעו גיבוי על בסיס קבוע והשתמשו בשירותי אכסון הכוללים גיבוי יומי של השרת.

6. הפעילו Firewall ו-Antivirus על השרת, ובצעו עדכונים באופן קבוע (Windows Update).

כיצד להפוך קובץ אודיו לרינגטון

מכשיר האייפון הוא מכשיר פלאי וידידותי למשתמש אולם בכל הנוגע ליצירת רינגטון, או בחירת שיר והפיכתו לרינגטון הדבר קשה ואף מסובך.  קיימות מספר תוכנות ואפקליציות אשר מתיימרות לעשות זאת, אולם בכל אחת מהן עדיין נשאר לבצע מספר פעולות באופן ידני וכך למעשה אפליקציות אלה אינן תורמות הרבה, ואף עולות כסף. חשוב לומר: ניתן לייצר ולהמיר כל שיר או קטע ואף הקלטה קולית לרינגטון, ולעשות זאת ללא עלות כלשהי.

במאמר זה אסביר כיצד בכל זאת כל אלה ניתנים לביצוע ובחינם:

המצרכים הדרושים

התהליך כולו מצריך מכשיר אייפון, כבל USB, תוכנת ITunes וכמובן מחשב. הלחנתי קטע מוסיקלי קצר אותו ניתן לשמוע כאן, והפכתי אותו לרינגטון שלי. שם הקטע במקור הוא “סוף סוף”.

הכנת הקטע הקולי

בשלב ראשון יש להכין או לבחור את הקטע הקולי, שאורכו עד 40 שניות, אשר ישמש בתור רינגטון. ניתן לבחון קובץ mp3 כלשהו. ניתן להקליט כל דבר, ובמידה והקובץ אינו נשמר בפורמט זה, אלא בפורמט .wav קיימת תוכנה אינטרנטית חינמית לביצוע ההמרה.

שם התוכנה Media.IO

מעבר להמרה עצמה, לעיתים נדרשת עריכה של הקטע. הוספת fade in ו-fade out, חיתוך וחיבור קטעים, וכיו”ב. כל אלה ניתנים לביצוע בכלי עריכת אודיו, ואינם מצריכים אפליקציית יצירת רינגטון ייעודית. כלים חינמיים לא חסרים – לדוגמה הכלי הבא. במקרה שלי, התוצר הסופי הוא קובץ בשם סוף סוף .mp3

המרת הפורמט

השלב הבא מצריך את תוכנת ITunes.

1. הוספת הקובץ לספריה

מוסיפים את קובץ הmp3 המעובד לספריית המוסיקה. ניתן לגרור או לבחור בתפריט Add File to Library

2. איתור הקובץ בספריה

עכשיו בוחרים את הוקבץ מתוך רשימת השירים ועם קליק ימני בוחרים בGet Info

או אז יופיע המסך הבא (יש לעבור לתצוגת Options):

בשלב זה יש להגביל את אורך הקטע ל-40 שניות. הדבר נעשה בכתיבת הערך 0:40 מימין ל”Stop Time”.

לוחצים על OK ונחים קצת..

3. המרה לפורמט AAC

שוב בוחרים את הקובץ ברשימת השירים ובקליק ימני בוחרים בתפריט Create AAC Version

4. איתור הקובץ המומר

עכשיו יש לאתר את הקובץ שנוצר, דרך הExplorer או הFinder (אם אתם עובדים עם מק). הקובץ יהיה בתיקיית השירים של ITunes. ניתן לחפשו לפי השם שלו.

כפי שתראו, הקובץ שאותר הנו סוף סוף.m4a (זו הסיומת של קבצי AAC).

יש לשנות את שם הקובץ לm4r. 

לאחר השינוי, לחיצה כפולה עליו תפתח אותו מ-ITunes, אלא שהפעם הוא ייפתח כרינגטון בספריית הרינגטונים המקומית של המחשב.

ספריה זו נקראת Tunes והיא מופיעה אך ורק באם קיים לפחות רינגטון אחד.

עכשיו צריך לסנכרן ספריה זו עם ספריית הרינגטונים של המכשיר.

סינכרון בין ITunes למכשיר הIPhone

על מנת שכל מה שתואר כאן יעבוד, יש להגדיר סינכרון בין משכיר האייפון לתוכנת ITunes. כאשר מחברים את המכשיר בכבל USB, הוא יופיע בצד שמאל. לחיצה עליו תאפשר ביצוע Sync, כאשר ניתן להגדיר מה יסונכרן ומה לא, לרבות תמונות, וידאו, אנשי קשר, ובין השאר גם “Tones” קרי: רינגטונים. לאחר שינוי הסיומת של הקובץ, הוא הופך לרינגטון ומכאן הדרך פשוטה.