От зеленого к красному.

Тема в разделе "WASM.BEGINNERS", создана пользователем psh3nka, 5 фев 2017.

  1. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
    Да, похоже что способ "поиска назад", приведенный в начале, равно как и начинать плясать от значения в стеке, фейлит на вин7 - натыкаюсь на access violation. Но зато можно использовать предопределенные адреса ;)

    Про список - это Пшенке.
    По вставке асм кода - иконка между иконками кинопленки ("медиа") и перечеркнутого глаза, "вставить..", там вставить код, и выбрать asm как язык.
     
    Indy_ нравится это.
  2. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    887
    Не должно. Что происходит когда доходит до MZ заголовка? Обычно порченный заголовок означает применение простейшего антидампа. Тогда более глубокий анализ нужен.
     
  3. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    887
    Нет, потому что нужно смотреть MZ заголовок, а не PE\0\0. PE заголовок можно найти только относительно DOS-заголовка.
     
  4. psh3nka

    psh3nka Active Member

    Публикаций:
    0
    Регистрация:
    21 янв 2017
    Сообщения:
    104
    Я это и имел ввиду, просто не указал явно. Сначала находим "MZ" (в памяти "ZM"), от него уже add esi, [esi+03Ch]. Только вопрос почему add, а не mov, ведь в esi уже адрес MZ...
     
  5. psh3nka

    psh3nka Active Member

    Публикаций:
    0
    Регистрация:
    21 янв 2017
    Сообщения:
    104
    Indy_ ,не буду темнить, Ваш код для меня сложен и местами непонятен. Я вижу, что там используются списки, но что это - не понимаю. Отправьте в нужное место, где можно подробнее почитать о том, что вы показали. Я еще знаю про способ черех SEH обработчик.
     
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    psh3nka

    Говорю же это анстаб метод. Каждая техника должна быть стабильной, а не работать в зависимости от фазы луны. И такой подход не должен использоваться(анстаб).

    #25 проход по списку. Это обычный двусвязанный список.
     
    psh3nka нравится это.
  7. psh3nka

    psh3nka Active Member

    Публикаций:
    0
    Регистрация:
    21 янв 2017
    Сообщения:
    104
    А как узнать какой метод тру, если ты даже анстаб с трудом реализовываешь? :grin:
     
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    psh3nka

    Нужно подробно изучить.

    ps: в гугл вбейте linked list. Выдаёт всё что нужно.
     
  9. psh3nka

    psh3nka Active Member

    Публикаций:
    0
    Регистрация:
    21 янв 2017
    Сообщения:
    104
    Я все выходные провел над изучением PE формата и анстаб методами его инфицирования. Вся инфа, которая мне доступна - полупротухшие маны из 200х. Что-то запускал из под олли, чтобы понять. Сдвиги появились, как и хоть какая-то практика. Где можно найти актуальную инфу?
     
  10. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    psh3nka

    Вся актуальная инфа вам по мойму не годится. Так как это для вас всё слишком сложно, сейчас всё свелось к автоматике - графы, солверы, гипервизоры етц. То что вы начали изучать - это фундаментальная инфа и она не делится на годная/негодная/недостаточная. По формату есть офф доки.
     
    psh3nka нравится это.
  11. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    887
    Потому что по 0x3c хранится e_lfanew - оффсет до NT-хидеров относительно базы. Если сделать mov то там будет просто оффсет, а тебе нужен адрес.
    Хм... Здесь нужен не PE формат, а структуры PEB, LDR_DATA_TABLE_ENTRY, LIST_ENTRY (если ты хочешь относительно PEB'а получать инфу).
    Вот код, правда на C++, но работает от XP До 10 на x86 и на x64. Функцию хеша лучше сделать case-insensitive:
    Код (C++):
    1. //
    2. // Get module handle by hash
    3. //
    4. HMODULE __fastcall ApiCaller::Caller::GetModuleHandleFromHash(UINT64 uHash) {
    5.     PPEB                    pPEB        = NULL;
    6.     LDR_DATA_TABLE_ENTRY    *pLDRMod    = NULL;
    7.     PUNICODE_STRING            pszLibrary    = NULL;
    8.     UINT64                    uLibHash    = 0;
    9.  
    10. #ifdef _WIN64
    11.     pPEB = (PPEB)__readgsqword(0x60);
    12. #else
    13.     pPEB = (PPEB)__readfsdword(0x30);
    14. #endif
    15.  
    16.     pLDRMod = (LDR_DATA_TABLE_ENTRY*)(((LIST_ENTRY*)(pPEB->Ldr->Reserved2[1]))->Flink);
    17.  
    18.     do {
    19.  
    20.         pszLibrary = (PUNICODE_STRING)pLDRMod->Reserved4;
    21.  
    22.         uLibHash = CalcHash(pszLibrary->Buffer);
    23.  
    24.         if (uLibHash == uHash) {
    25.             return (HMODULE)pLDRMod->DllBase;
    26.         }
    27.  
    28.         pLDRMod = (LDR_DATA_TABLE_ENTRY*)pLDRMod->Reserved1[0];
    29.  
    30.     } while (pLDRMod);
    31.  
    32.     return NULL;
    33.  
    34. }
    Как вариант для хеша можно юзать такую функцию, но она только case-insensetive для латиницы:
    Код (C++):
    1. //
    2. // Calculate hash
    3. //
    4. template <typename char_type> UINT64 CalcHash(char_type *pName) {
    5.     UINT64        uHash    = 0;
    6.     char        ch;
    7.  
    8.     while (*pName) {
    9.  
    10.         ch = (char)*pName++;
    11.  
    12.         if (ch >= 'A' && ch <= 'Z')
    13.             ch |= 0x20;
    14.  
    15.         uHash = (uHash * 199 + ch) ^ (uHash << 32);
    16.  
    17.     }
    18.  
    19.     return uHash;
    20.  
    21. }
     
  12. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
    TheTrick, тупо не работает код, потому что происходит исключение при чтении, после 2-3 итерации, что на вин7-64, что на xp.

    Код (ASM):
    1. format PE
    2.  
    3. gran EQU 65536
    4.  
    5. pop eax ;
    6. push eax ;
    7.  
    8. and eax,0FFFF0000H
    9.  
    10. mov ecx,1024*1024/gran
    11.  
    12. @loop:
    13.  
    14. cmp word [eax],'ZM'
    15.  
    16. jz @found
    17.  
    18. sub eax,gran
    19.  
    20. loop @loop
    21.  
    22. jmp @fail
    23.  
    24. @found:
    25.  
    26. nop
    27.  
    28. @fail:
    29.  
    30.  
    31. retn
    (у меня на основной работе запара, поэтому получается косолапо)
    (духовным наставником служил код с душком отсюда https://xakep.ru/2004/07/22/23159/)


    Инди,

    автоматика конечно хорошо, но для ее понимания нужно сначала вручную все понять.

    Вчера когда по JS-кам гуглил, нашел одну фразу, не могу не согласиться,

    "Есть мнение , что неважно как и какой последовательности читать, можно просто читать все подряд. Главное , что твоя нейронная сеть в голове, получает сходную информацию и соответствующие связи укрепляются. "

    Пшенка, в ссылкоподборку я кинул 2 ссылки, на kaimi.in есть более-менее современная инфа по работе с PE.
     
    Последнее редактирование: 8 фев 2017
    psh3nka нравится это.
  13. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    887
    В этом и ошибка. С чего вдруг ZM?
     
    _edge нравится это.
  14. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
    Благодарю. Ума не хватило понять, что оно почти сразу должно находить заголовок; в моем варианте лезет дальше на недоступную память. Конечно же 'MZ'
     
  15. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Потому что архитектура Little-Endian?
     
  16. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
    Потому что сам очепятался, да еще источник инфы, с которым сверялся для перепроверки, с таким же еггогом )
     
  17. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    887
    В фасме если мы пишем что-то типа mov eax, 'abcd' то строка ложится как есть, в отличии от студийного C++ например:
     
  18. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Особенности компилятора. Ещё один агрумент в пользу того, что следует использовать числовые константы вместо символьных.
     
  19. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    887
    Конечно, тем более такие уже есть IMAGE_DOS_SIGNATURE, IMAGE_NT_SIGNATURE
     
  20. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
    По существу, кое-что более современное чем 2004 год, дает поиск "get kernel32 base on win7"

    например, https://c0llateral.wordpress.com/2009/12/26/25/
    или talks здесь http://webcache.googleusercontent.com/search?q=cache:AcKgMSli60MJ:vxheaven.org/forum/viewtopic.php?id=2046+&cd=8&hl=ru&ct=clnk&gl=ru

    но вообще эти CMP с 4d5a есть жирная такая сигнатура, чуть ли не статическим анализатором ловить твою "тушку" будут.

    --

    мне нужна помощь с Immunity Debugger; кто с ним работал, отзовитесь пжл.

    все никак не могу уяснить, как поставить брейк на NtDeviceIoControlFile(), мне это нужно для отладки Kernel32.Beep, перевожу статью, заодно повторяю что там делают.

    да, в гугле забанили уже.
     
    Последнее редактирование: 8 фев 2017