Код на ARMе, что делается тут?

Тема в разделе "WASM.RESEARCH", создана пользователем Relic, 25 дек 2006.

  1. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    Первый раз столкнулся с дизасмом КПК-ной проги, более-менее команды понятны, но вот на этом (см.листинг из иды в прицепе) - споткнулся. Первые три строчки - это просто пример вызова функции, а далее собственно она сама. Причем до цикла, начинающегося с loc_B32A8 вроде все понятно (из юникодовой строки вида "11111-22222-3333-44444444" делается "1111122222333344444444"), а вот что происходит в цикле и далее - не ясно. Может кто поможет реверснуть, а?
     
  2. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia
    Relic
    файл в аттаче битый
     
  3. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    flankerx
    Только что попробовал - небитый! Try again...
     
  4. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    это особенность теперишнего форума - один байт то-ли лишний, то-ли нехватает
     
  5. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    Так что, мне перезалить аттач еще куда-нибудь??
     
  6. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Relic
    С помощью WinHex добавь "wasm.ru" а мы уж урезать сможем :)
     
  7. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    Ерунда какая-то: на работе аттач прекрасно скачивается, в то время как дома - битый приходит...
    Выложил сюда _http://slil.ru/23642758
    Зеркало1 _http://www.rapidshare.ru/124448
    Зеркало2 _http://rapidshare.com/files/8971160/listing.rar.html
    Хватит пока? :)
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Relic
    Разница в браузерах.
     
  9. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    n0name
    Имхо, нет. На работе win2k sp4 + Opera 8.53, дома - winXP sp2 + Opera 8.53
     
  10. atorn

    atorn New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2006
    Сообщения:
    64
    winXP sp2 + IE6 - O'K.
     
  11. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    Топик превратился в обсуждение проблемы аттачмента. :dntknw:((( А есть что по сабжу?
     
  12. uni

    uni New Member

    Публикаций:
    0
    Регистрация:
    23 май 2005
    Сообщения:
    67
    А Вы не пробовали найти какой оригинальный форум по Вашей модели КПК? Здесь всё-таки WASM, а не ARMASM. Чтобы дать ответ на Ваш вопрос нужно знать по-минимуму набор команд, а лучше всего архитектуру конкретного чипа. А ещё лучше взять какую-нить среду, типа Keil, вырезать из Вашего бинарика асм код и погонять его на левых данных. Так хоть будет понятно назначение блоков инструкций. Не вооружённым глазом совершенного бестолоча (это я о себе) в ARM можно заметить, что блоки кода повторяются, видимо они действуют одинаково для каки-то частей вводимой строки. "Одинаковых" блоков 10 штук, если считать с метки loc_B32A8, самое интересное, что в конце какой-то стандартный код с проверкой.
    Код (Text):
    1. .text:000B357C                 CMP     R11, #0         ; Set cond. codes on Op1 - Op2
    2. .text:000B3580                 BEQ     loc_B359C       ; Branch
    3. .text:000B3584                 LDR     R0, =unk_F5D50  ; Load from Memory
    4. .text:000B3588                 MOV     R3, #0          ; uType
    5. .text:000B358C                 LDR     R2, =unk_DEDC4  ; lpCaption
    6. .text:000B3590                 LDR     R1, =a07458b58  ; lpText
    7. .text:000B3594                 LDR     R0, [R0]        ; hWnd
    8. .text:000B3598                 BL      MessageBoxW     ; Branch with Link
    9. .text:000B359C
    10. .text:000B359C loc_B359C                               ; CODE XREF: CheckLicenseNumber+464 j
    11. .text:000B359C                 MOV     R0, R6          ; Rd = Op2
    12. .text:000B35A0                 ADD     SP, SP, #0x60   ; Rd = Op1 + Op2
    13. .text:000B35A4                 LDMFD   SP!, {R4-R11,PC} ; Load Block from Memory
    Если ноль, то прыгаем вне MessageBoxW(). Заметим, что это не call, а именно branch. Хотя, елси честно, call в наборе инструкций я не заметил и что такое переход со ссылкой не совсем понимаю. А, там ещё выше есть проверка, ну тогда я пас. Очень интересно деление на одинаковый части кода, заметьте, что они практически идентичные. Может строка бьётся на части и с каждой частью какие манипуляции делаются? Между прочим количество цифр в строке 10*2 (без нолей unicode и дефисов). Если по-вашему первая часть листинга убирает дефисы и на это понадобилось столько (!) операций, то вполне можно предположить, что после метки loc_B32A8 идёт просто попарное сравнение цифирок. Это всё на что меня хватило без знания асм'а ARM.
     
  13. masquer

    masquer wasm.ru

    Публикаций:
    0
    Регистрация:
    13 сен 2002
    Сообщения:
    890
    Адрес:
    Николаев
    bl это и есть call в арме
     
  14. binom

    binom New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2006
    Сообщения:
    12
    ну что сказать до вычисления математики, а она действительно начинается с loc_B32A8, происходит формирование строки с номером лицензии без дефисов, цифры друг за другом.

    Начиная с loc_B32A8 начинается цикл обработки получившейся строки, тело цикла до 000B34F4.

    Далее окончательные вычисления и решение о правильности номера лицензии принимается в строке по адресу 000B3538. А дальше все очень просто - если номер лицензии подходит, ТО наша функция возвращает 1, если нет, то 0.

    Если вам надо оторвать от лицензии только один экземпляр программы, то пропатчьте эту функцию так чтобы она вообще ничего не делала а сразу возвращала 1.

    Другой вопрос если вам надо написать кейген.
     
  15. Relic

    Relic Member

    Публикаций:
    0
    Регистрация:
    10 сен 2003
    Сообщения:
    79
    binom
    Спасибо за исследование кода. Задача стоит написать кейген, поэтому, если у вас есть возможность - нельзя ли перевести на язык выского уровня или на обычный асм то, что происходит в цикле B32A8-B34F4 ? Я что-то не могу въехать в логику происходящего там :dntknw:
     
  16. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    скачай arm architecture developer manual и покури его
     
  17. binom

    binom New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2006
    Сообщения:
    12
    К сожалению в данный момент у меня нет свободного времени. Возможно я смогу посмотреть код на Новогодних праздниках. Пока могу помоч только советом. Процессоры архитектуры ARM имеют два набора команд, которые зависят от режима работы процессора. Это режимы ARM и Thumb. В вашем коде используются команды режима ARM.
    У меня есть документация которая Вам сможет помочь. Пишите мыло, я сброшу.
     
  18. dekloper

    dekloper Member

    Публикаций:
    0
    Регистрация:
    12 июл 2005
    Сообщения:
    85
    Адрес:
    оттуда...
    Други, каллеги...

    Как ваще скормить той же иде эту ARMовскую бадягу:
    Офф. сайт проги _http://www.codebrowser.org/zap/download.php

    Как найти точку входа и пр. первые шаги...
    Мож еще чем поковырять кроме иды...
    Я со смартами первый раз...

    Заранее, спс.
     
  19. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    В иде надо нажать файл>ньюв, далее выбрать закладку ".....PDA....". а далее смотря что с тебя есть для исследования
     
  20. dekloper

    dekloper Member

    Публикаций:
    0
    Регистрация:
    12 июл 2005
    Сообщения:
    85
    Адрес:
    оттуда...
    twgt
    Точна, после установки vs .net опознал как

    // Format : Microsoft.Net assembly
    // Processor : cli

    После класич. асма куча ДИКИХ вопросов:
    1. как с такими "конструкциями" (...class public, ...System.Windows.Forms, ...filed private class) работать?
    2. что лежит в sub_....{....}? (некое подобие асм-инструкций?? нужен мануал!)
    3. в чем отличие ldarg.0 и ldarg.1?
    .........
    Где кого "ловить"? Что куда передается\принимается? и почему cli когда на девайсе стоит ARM?
    .........и т.д. и т.п.

    Код (Text):
    1. .class public auto ansi bm extends [System.Windows.Forms]System.Windows.Forms.Form
    2.                                         // DATA XREF: sub_54C0+11w
    3.                                         // sub_54C0+64r ...
    4. {
    5.   .field private class [System.Windows.Forms]System.Windows.Forms.MenuItem a
    6.  
    7.   .field private class [System.Windows.Forms]System.Windows.Forms.MenuItem b
    8.                                         // DATA XREF: sub_54C0+1Cw
    9.                                         // sub_54C0+7Br ...
    10.  
    11. .......................
    12. .......................
    13.   .field private static unsigned int8[] h // DATA XREF: sub_5950+44r
    14.                                         // sub_5AD0+11w
    15.  
    16. .............................
    17. .............................
    18.   .field private class [System.Windows.Forms]System.Windows.Forms.MainMenu k
    19.                                         // DATA XREF: sub_54C0+6w sub_54C0+59r ...
    20.  
    21.  
    22.   .method assembly hidebysig specialname void .ctor() // CODE XREF: sub_58A0+76p
    23.   {
    24.     ldarg.0
    25.     call void [System.Windows.Forms]System.Windows.Forms.Form::.ctor()
    26.     ldarg.0
    27.     call void bm::g()
    28.     ldarg.0
    29.     ldfld class [System.Windows.Forms]System.Windows.Forms.Label bm::c
    30.     ldstr "This program is not registered. \r\nInput correct rigistration code or press Trial menu for continue with limited mode."
    31.     callvirt void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(class System.String)
    32.     ret
    33.   }
    34.  
    35.   .method family virtual hidebysig void Dispose(bool disposing)
    36.   {
    37.     ldarg.0
    38.     ldarg.1
    39.     call void [System.Windows.Forms]System.Windows.Forms.Form::Dispose(bool)
    40.     ret
    41.   }
    Плз, пните на путь истиный...