Advanced protection of Adobe AIR content (desktop only)

Share Button

airprotectionFew days ago I started small research about protection of Adobe AIR application from some kind of hackers. Many of you may know that after compilation of Adobe AIR app you will receive also SWF file(s) inside package that can be changed. In all cases that I know – developers simply obfuscate that file(s). But protection actually was not applied.

 

You still can change strings, numbers and etc. What if hacker wants just change “Money” default value from 1000 to 9999? This cheater will not decompile SWF because it can simple “edit” it directly using some kind of tools. As some of you thinking right now somthing like “Unity3D can’t be edited” – I assure you that this can be done the same as with Adobe AIR.

It’s easy as for me. Sure, cheater can’t decompile and re-use obfuscated code. But as my experience telling me – not all hackers require sources or injections.

How my protection works:

1) Using Native Extension we re-create at C-level inside AIR two Objects: Loader and ByteArray
2) Using C we embed our content inside our extension as resource and compile it. Than we create ByteArray and load it into the Loader using loaderBytes method. This all was done only at C level.
3) Pass Stage from AS3 to C-level and execute addChild method with our Loader ( C side)

You can grab (for win) compiled application from here and play with it and leave a comments 🙂 Note: this protection can be developed for Mac also.

2014-09-11_001628

Profit! Try to find this image somewhere 🙂 Sure, you can because everything that was compiled – can be hacked. But how you can do this if you must be advanced developer with hacker skills 🙂 Gamers not hackers. Also dumping was not useful here.

Results:

AS3 side consist only from 2 lines of code. Hacker will do nothing here. Just two lines of code!2014-09-11_001020

ANE swc side also pretty simple. But actually this also can’t be helpful for the hacker.
2014-09-11_001300As you can see there is no ByteArray or Loader that can be aimed by cheaters. In my research I don’t apply C resource encryption and type-checking inside ANE so after editing ANE swc hacker can pass not Stage but Sprite and grab it.

But in this case I can simply check passed object type at C level and if it is not a Stage – app can show messagebox with text something like “Application is damaged. Please re-install it”.

There is only image from Jpeg. But same way we can use SWF with full application instead simple image.

This protection of Adobe AIR most best that I know ever and I’m really happy that it works like a charm! Maybe it’s not new, but I don’t saw anything like that!

Update:
Someone asked me could be this applied to mobile. Yes, this could be applied with limitation depending to platform.

Share Button

This Post Has Been Viewed 4,571 Times

Advanced protection of Adobe AIR content (desktop only): 10 комментариев

  1. Матвей

    Чего искать то? всего напросто теперь данные хранятся в dll. Потребовалось минут 10 чтоб выдернуть.
    1. Смотрим Template.dll с помощью IDA Pro
    2. Находим область Segment type: Pure data
    3. Выгружаем область в файл jpeg/swf/png в данном случае в заголовке JFIF (JPEG File Interchange Format)

    Хватит ерундой маяться, делайте проекты интересные и качественные, кому надо те выдернут и на чититят, кто хочет играть будет играть.

    [Embed(source = “Template.dll”, mimeType = “application/octet-stream”)]
    var bytesClass:Class;
    var startBytes:Vector. = Vector.(“0xFF 0xD8 0xFF 0xE0 0x00 0x10 0x4A 0x46 0x49 0x46 0x00 0x01 0x01 0x01 0x00 0x60″.split(” “));
    var endBytes:Vector. = Vector.(“0x72 0x20 0x38 0x3A 0x81 0x06 0x3F 0x10 0x1D 0x21 0x9E 0xAE 0xAE 0x7F 0xFF 0xD9″.split(” “));

    var startLength:uint = startBytes.length;
    var endLength:uint = endBytes.length;
    var start:int = 0;
    var end:int = 0;
    var bytes:ByteArray = new bytesClass();
    bytes.position = 1199;
    var n:int = bytes.length – 4;
    for (var i:int = 0; i < n; i++)
    {
    var ok:Boolean = true;
    for (var j:int = 0; j < startLength; j++)
    {
    if (bytes[i + j] != startBytes[j])
    {
    ok = false;
    break;
    }
    }
    if (ok)
    {
    start = i;
    for (i = start; i < n; i++)
    {
    ok = true;
    for (j = 0; j < endLength; j++)
    {
    if (bytes[i + j] != endBytes[j])
    {
    ok = false;
    break;
    }
    }
    if (ok)
    {
    var jpegBytes:ByteArray = new ByteArray();
    jpegBytes.writeBytes(bytes, start, i – start);
    jpegBytes.position = 0;

    var loader:Loader = new Loader();
    loader.loadBytes(jpegBytes);
    addChild(loader);

    new FileReference().save(jpegBytes, "test.jpeg");
    break;
    }
    }
    break;
    }
    }

    1. TheRabbit Автор записи

      Матвей, во-первых IDA Pro это уже не банальный декомпилятор и диассемблер флеша, давайте не путать мягкое с мокрым 🙂 Плюс он стоит бабла и для работы с ним надо иметь опыт далеко не ниже среднего.

      Во-вторых я четко написал слабые стороны данного метода в конкретном случае. Если зашифровать данные, то pure data не будет иметь ничего читаемого и рип этих даных ничего не даст.

      1. Матвей

        Платность не аргумент. Думаешь люди, ворующие твой код, не скачивают с торрента платное ПО? Опыт тоже не аргумент, достаточно одному человеку со средним опытом поковыряться и он в тот же день выложит в сеть утилиту, которая делает “1000000 монеток на старте игры Крестики-Нолики”. Защищать имеет смысл только какие-то определённые места, например сигнатура для клиент-серверного взаимодействия, когда поменять вариант защиты будет быстрее, чем эту защиту обойти, но для этого нужна именно гибкая система защиты.

        1. TheRabbit Автор записи

          Согласен, что хакер не будет покупать иду. Он её скачает с торрента. Что касается “выложить на торрент” – весьма сомнительно, но допустим.

          На счет главного прочего – достаточно на С стороне запутать бинарник и зашифровать его. Для того, что ты сделал – IDA даже не нужна. Достаточно DLL открыть 7zip архиватором и вытащить .data блок, который является тупо картинкой.

          Что даст тебе картинка, если у неё будет собственный формат? Порядок байт будет запутан и т.д. и т.п.? Ничего 🙂 Ты не будешь даже знать где её искать 🙂 А если и найдешь – сомневаюсь, что это займет 10 минут времени.

          Предлагаемый мною метод весьма крепок. А если еще и обфусцировать предварительно swf контент – заморишься ломать. Но я и не говорил, что это невозможно 😉 Прям так и написал: – “Всё, что было создано – можно разобрать”.

  2. Уведомление: Advanced protection of Adobe AIR content (deskt...

  3. DrGreen

    Hi!
    With the appropriate tool the original swf is can be extracted from the flashplayer.
    The protection doesn’t matter – it is said, but true.
    Try this: http://swfid.net/
    Select higher sensitivity, if not see all the SWFs.
    Cheers!
    Mark

Leave a Reply

Your email address will not be published.

Blue Captcha Image Refresh

*