антиотладка Nowel Netware Revisor 3.4.1

Тема в разделе "WASM.BEGINNERS", создана пользователем Piti84, 22 мар 2007.

  1. Piti84

    Piti84 New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2007
    Сообщения:
    18
    Решил посмотреть прогу Nowel Netware Revisor 3.4.1
    PEid показал AsProtect который был удачно распакован STRIPPERом. прога нормально запускается, но PEid не может найти что за язык. Предыдущие версии были написаны на Delphi, исходя из этого напустил декомпилятор. Он нормально разложил мне все ресурсы и точки входа по полочкам. Но при попытке загрузки в отладчик вываливается сообщение Debuger detected ....... окно появляется при вызове прерывания с вектором 2BH после загрузки модуля uxtheme.dll. Я никак не могу найти место проверки на отладчик. Что можете посоветовать.
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Есть плагин к олли - HideDebugger или как-то так. Попробуй его. Один из легальных способов определить отладчик - посмотреть определенный флаг в PEB (по памяти не скажу), который и снимается этим плагином
     
  3. Piti84

    Piti84 New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2007
    Сообщения:
    18
    не помогает, защита видит отладку независимо от отлдчика
     
  4. HoBleen

    HoBleen New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    77
    Покажи код, который вызывает это прерывание, это может быть CheckForRemoteDebuggerPresent или что-то похожее. Без кода сложно ответить.
     
  5. Piti84

    Piti84 New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2007
    Сообщения:
    18
    77D5DC86 /. 55 PUSH EBP
    77D5DC87 |. 8BEC MOV EBP,ESP
    77D5DC89 |. 83EC 0C SUB ESP,0C
    77D5DC8C |. 53 PUSH EBX
    77D5DC8D |. 56 PUSH ESI
    77D5DC8E |. 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8]
    77D5DC91 |. 33DB XOR EBX,EBX
    77D5DC93 |. 395E 08 CMP DWORD PTR DS:[ESI+8],EBX
    77D5DC96 |. 57 PUSH EDI
    77D5DC97 |. 895D F8 MOV DWORD PTR SS:[EBP-8],EBX
    77D5DC9A |. 895D FC MOV DWORD PTR SS:[EBP-4],EBX
    77D5DC9D |. 74 0B JE SHORT user32.77D5DCAA
    77D5DC9F |. 395E 14 CMP DWORD PTR DS:[ESI+14],EBX
    77D5DCA2 |. 75 06 JNZ SHORT user32.77D5DCAA
    77D5DCA4 |. 56 PUSH ESI ; /Arg1
    77D5DCA5 |. E8 E00AFEFF CALL user32.77D3E78A ; \user32.77D3E78A
    77D5DCAA |> 6A 08 PUSH 8 ; /Flags = LOAD_WITH_ALTERED_SEARCH_PATH
    77D5DCAC |. 53 PUSH EBX ; |hFile
    77D5DCAD |. FF76 1C PUSH DWORD PTR DS:[ESI+1C] ; |FileName
    77D5DCB0 |. FF15 5811D377 CALL DWORD PTR DS:[<&KERNEL32.LoadLibrar>; \LoadLibraryExW
    77D5DCB6 |. 8BF8 MOV EDI,EAX
    77D5DCB8 |. 3BFB CMP EDI,EBX
    77D5DCBA |. 74 1B JE SHORT user32.77D5DCD7
    77D5DCBC |. 8B76 20 MOV ESI,DWORD PTR DS:[ESI+20]
    77D5DCBF |. 3BF3 CMP ESI,EBX
    77D5DCC1 |. 74 14 JE SHORT user32.77D5DCD7
    77D5DCC3 |. 56 PUSH ESI
    77D5DCC4 |. 57 PUSH EDI
    77D5DCC5 |. E8 DF010000 CALL user32.77D5DEA9
    77D5DCCA |. 85C0 TEST EAX,EAX
    77D5DCCC |. 75 09 JNZ SHORT user32.77D5DCD7
    77D5DCCE |. 57 PUSH EDI ; /hLibModule
    77D5DCCF |. FF15 9412D377 CALL DWORD PTR DS:[<&KERNEL32.FreeLibrar>; \FreeLibrary
    77D5DCD5 |. 33FF XOR EDI,EDI
    77D5DCD7 |> 53 PUSH EBX
    77D5DCD8 |. 6A 0C PUSH 0C
    77D5DCDA |. 5A POP EDX
    77D5DCDB |. 8D4D F4 LEA ECX,DWORD PTR SS:[EBP-C]
    77D5DCDE |. 897D F4 MOV DWORD PTR SS:[EBP-C],EDI
    77D5DCE1 |. E8 E3B7FDFF CALL user32.77D394C9 <-------- переход сдесь
    77D5DCE6 |. 5F POP EDI
    77D5DCE7 |. 5E POP ESI
    77D5DCE8 |. 5B POP EBX
    77D5DCE9 |. C9 LEAVE
    77D5DCEA \. C2 0400 RETN 4

    переход вот сюда

    77D394C9 /$ 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4] <--------------
    77D394CD CD 2B INT 2B
    77D394CF \. C2 0400 RETN 4
    77D394D2 90 NOP
    77D394D3 90 NOP
    77D394D4 90 NOP
    77D394D5 90 NOP
    77D394D6 90 NOP
    77D394D7 /$ B8 CC110000 MOV EAX,11CC
    77D394DC |. BA 0003FE7F MOV EDX,7FFE0300
    77D394E1 |. FF12 CALL DWORD PTR DS:[EDX]
    77D394E3 \. C2 1C00 RETN 1C

    После срабатывания прерывания вываливается окно об отладчике
    Возможно надо поставить брейк на прерывание, но в ольке я незнаю как.
     
  6. HoBleen

    HoBleen New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    77
    77D5DC86 - Я так понимаю это LoadLibraryA? Если да, то поставь в опциях флажок "Break On New Module" и анализируй этот модуль.

    Можешь поставить брекпоинт на MessageBoxA или на то, что у тебя вызывает это сообщение об отладчике. Когда прервешься, в стеке поищи адрес возврата в новый модуль и поищи проверку и условный переход чуть выше этого места, откуда вызывается MessageBox.
     
  7. Piti84

    Piti84 New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2007
    Сообщения:
    18
    Я в принципе так и делал, поэтому и попал сюда, только не ставил брейк на MessageBoxA в ольке это сделать невозможно, а айс не стоит. Как поставить бряк на прерывание 2Bh, (знаю что в айсе это возможно, тока не знаю как, в ольке этого сделать помоему не возможно). Короче седня вечером поставлю Айс.
     
  8. HoBleen

    HoBleen New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    77
    Это как?!? Хочешь сказать в популярнейшем дебаггере под винду нельзя поставить бреакпоинт? =)

    Ctrl+g
    MessageBoxA<enter>
    F2
     
  9. Piti84

    Piti84 New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2007
    Сообщения:
    18
    можно то можно, но это если вызов идет из этого модуля, а если нет, тогда как?
     
  10. Piti84

    Piti84 New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2007
    Сообщения:
    18
    Ой сори. я прерывания подругому ставил. Поставил бряк по совету получил это

    77D7050D /. 55 PUSH EBP <--------
    77D7050E |. 8BEC MOV EBP,ESP
    77D70510 |. 833D 1C04D977 > CMP DWORD PTR DS:[77D9041C],0
    77D70517 |. 74 24 JE SHORT user32.77D7053D
    77D70519 |. 64:A1 18000000 MOV EAX,DWORD PTR FS:[18]
    77D7051F |. 6A 00 PUSH 0
    77D70521 |. FF70 24 PUSH DWORD PTR DS:[EAX+24]
    77D70524 |. 68 F40AD977 PUSH user32.77D90AF4
    77D70529 |. FF15 1812D377 CALL DWORD PTR DS:[<&KERNEL32.Interlocke>; kernel32.InterlockedCompareExchange
    77D7052F |. 85C0 TEST EAX,EAX
    77D70531 |. 75 0A JNZ SHORT user32.77D7053D <-------
    77D70533 |. C705 F00AD977 > MOV DWORD PTR DS:[77D90AF0],1
    77D7053D |> 6A 00 PUSH 0 ; /LanguageID = 0 (LANG_NEUTRAL)
    77D7053F |. FF75 14 PUSH DWORD PTR SS:[EBP+14] ; |Style
    77D70542 |. FF75 10 PUSH DWORD PTR SS:[EBP+10] ; |Title <---- Protection error
    77D70545 |. FF75 0C PUSH DWORD PTR SS:[EBP+C] ; |Text
    77D70548 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hOwner
    77D7054B |. E8 2D000000 CALL user32.MessageBoxExA ; \MessageBoxExA
    77D70550 |. 5D POP EBP
    77D70551 \. C2 1000 RETN 10

    Похоже это и есть мое окошко.
    Теперь как бы это найти уткуда передается управление на 77D7050D.
     
  11. Piti84

    Piti84 New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2007
    Сообщения:
    18
    вроде вот кусок.
    013089F0 A1 A8673101 MOV EAX,DWORD PTR DS:[13167A8]
    013089F5 C600 CC MOV BYTE PTR DS:[EAX],0CC
    013089F8 84DB TEST BL,BL
    013089FA 74 0A JE SHORT 01308A06
    013089FC A1 90643101 MOV EAX,DWORD PTR DS:[1316490]
    01308A01 E8 AEE9FFFF CALL 013073B4 <------
    01308A06 33C0 XOR EAX,EAX
    ..................

    013073B4 55 PUSH EBP
    013073B5 8BEC MOV EBP,ESP
    013073B7 53 PUSH EBX
    013073B8 56 PUSH ESI
    013073B9 57 PUSH EDI
    013073BA 8BF0 MOV ESI,EAX <------str debuger detected
    013073BC 33DB XOR EBX,EBX
    013073BE 33C0 XOR EAX,EAX
    013073C0 55 PUSH EBP
    013073C1 68 17743001 PUSH 1307417
    013073C6 64:FF30 PUSH DWORD PTR FS:[EAX]
    013073C9 64:8920 MOV DWORD PTR FS:[EAX],ESP
    013073CC E8 9BFEFFFF CALL 0130726C
    013073D1 84C0 TEST AL,AL
    013073D3 74 07 JE SHORT 013073DC
    013073D5 E8 96FFFFFF CALL 01307370
    013073DA 8BD8 MOV EBX,EAX
    013073DC 84DB TEST BL,BL
    013073DE 75 22 JNZ SHORT 01307402
    013073E0 E8 9FFEFFFF CALL 01307284
    013073E5 84C0 TEST AL,AL
    013073E7 75 19 JNZ SHORT 01307402
    013073E9 A1 DC673101 MOV EAX,DWORD PTR DS:[13167DC]
    013073EE 8378 24 00 CMP DWORD PTR DS:[EAX+24],0
    013073F2 74 19 JE SHORT 0130740D
    013073F4 A1 DC673101 MOV EAX,DWORD PTR DS:[13167DC]
    013073F9 8B40 24 MOV EAX,DWORD PTR DS:[EAX+24]
    013073FC FFD0 CALL EAX
    013073FE 84C0 TEST AL,AL
    01307400 74 0B JE SHORT 0130740D
    01307402 56 PUSH ESI
    01307403 68 28743001 PUSH 1307428 ; ASCII "Protection Error"
    01307408 E8 63DEFFFF CALL 01305270
    0130740D 33C0 XOR EAX,EAX
    0130740F 5A POP EDX
    01307410 59 POP ECX
    01307411 59 POP ECX
    01307412 64:8910 MOV DWORD PTR FS:[EAX],EDX
    01307415 EB 0A JMP SHORT 01307421
    01307417 ^E9 28BAFEFF JMP 012F2E44
    0130741C E8 7FBDFEFF CALL 012F31A0
    01307421 5F POP EDI
    01307422 5E POP ESI
    01307423 5B POP EBX
    01307424 5D POP EBP
    01307425 C3 RETN

    При попытке изменения перехода по адресу 013089FA уходит в ошибку.
     
  12. HoBleen

    HoBleen New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    77
    Смотри откуда берется BL, смотришь на референсы к этому участку памяти и находишь запись туда и изменяешь саму запись.
     
  13. Piti84

    Piti84 New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2007
    Сообщения:
    18
    013078A8 53 PUSH EBX
    013078A9 56 PUSH ESI
    013078AA 57 PUSH EDI
    013078AB 33DB XOR EBX,EBX
    013078AD 33C0 XOR EAX,EAX
    013078AF A3 90643101 MOV DWORD PTR DS:[1316490],EAX
    013078B4 B2 01 MOV DL,1
    013078B6 A1 74623001 MOV EAX,DWORD PTR DS:[1306274]
    013078BB E8 10EAFFFF CALL 013062D0
    013078C0 8BF0 MOV ESI,EAX
    013078C2 A1 E8673101 MOV EAX,DWORD PTR DS:[13167E8]
    013078C7 8B00 MOV EAX,DWORD PTR DS:[EAX]
    013078C9 8946 04 MOV DWORD PTR DS:[ESI+4],EAX
    013078CC A1 D8673101 MOV EAX,DWORD PTR DS:[13167D8]
    013078D1 8B40 0C MOV EAX,DWORD PTR DS:[EAX+C]
    013078D4 50 PUSH EAX
    013078D5 56 PUSH ESI
    013078D6 E8 7DEAFFFF CALL 01306358 <---- проц. пров на дебуг
    013078DB 8BF8 MOV EDI,EAX
    013078DD 85FF TEST EDI,EDI
    013078DF 74 2E JE SHORT 0130790F
    013078E1 8B47 04 MOV EAX,DWORD PTR DS:[EDI+4]
    013078E4 40 INC EAX
    013078E5 E8 5AACFEFF CALL 012F2544
    013078EA A3 90643101 MOV DWORD PTR DS:[1316490],EAX
    013078EF 8B57 04 MOV EDX,DWORD PTR DS:[EDI+4]
    013078F2 42 INC EDX
    013078F3 A1 90643101 MOV EAX,DWORD PTR DS:[1316490]

    после изменения перехода по адресу 013078DF прорвался на EP, правда потом привыгрузке dll. опять вылетает.

    если можно пояснить "смотришь на референсы к этому участку памяти и находишь запись туда и изменяешь саму запись." плиз, а то ниче не понял.
     
  14. Piti84

    Piti84 New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2007
    Сообщения:
    18
    И так проблему с запуском решил. Там была проверка на как написано на виртуальную машину.
    Осталась одна проблема. код проверки на дебуг создается прям в память. Как его пропачить, а то каждый раз править в памяти каждый раз не удобно.
     
  15. HoBleen

    HoBleen New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    77
    Если этот код копируется из памяти/файла, то просто измени его. Если нет (если он хранится в зашифрованном виде), то придется делать либо лоадер, либо инлайн-патч.

    1)Инлайн-патч - в определенном месте программы записывается код, который в памяти изменяет то, что нужно. Выполнятся он, естейственно должен тогда, когда код проверки уже находится в памяти.

    2)Лоадер - то же, только снаружи. Программа-лоадер создает процесс, ждет пока код в нем не распакуется/расшифруется и записывает куда надо необходимые данные.
     
  16. Piti84

    Piti84 New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2007
    Сообщения:
    18
    Вся прблема в том, что этот код грузится на этапе подгрузки библиотек. Есть 2 вопроса.
    1. что запускает ентот код.
    2. Где он может быть
     
  17. HoBleen

    HoBleen New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    77
    У тебя в секции кода есть код, который создает эту проверку. Поэтому сразу после нее создаешь jmp на код, патчущий то, что тебе надо, выполняющих перезаписанные команды и возвращающийся обратно.

    Код (Text):
    1. было:
    2.  
    3. call CreateAntiDebugCode
    4. xor eax, eax             ;<- вот сюда записываешь jmp на свой код
    5. add bl, 5
    6. _ret:
    7. call s_sub
    8.  
    9. стало:
    10.  
    11. call CreateAntiDebugCode
    12. jmp my_thunk    ;jmp на наш код
    13. _ret:
    14. call s_sub
    15.  
    16. ...
    17.  
    18. my_thunk:   ;делаем все, что хотим
    19. mov dword ptr [013078D6], 90909090h
    20. mov byte ptr [013078D6], 90h
    21.  
    22. xor eax,eax ;теперь исполняем то, что скомуниздили
    23. add bl, 5
    24. jmp _ret    ;и возвращаемся
     
  18. Piti84

    Piti84 New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2007
    Сообщения:
    18
    нашел dll в котором похоже и находится эта процедура, называется LNetware.dll. запакована ASPack 2.12 -> Alexey Solodovnikov. Может стоит распаковать? Но я dll никада не распаковывал. Можно получить пару советиков??
     
  19. HoBleen

    HoBleen New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    77
    Если не умеешь руками, то юзай автораспаковщик от PE_Kill'a: http://hellspawn.nm.ru/tools/aspackunpacker.zip
     
  20. Piti84

    Piti84 New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2007
    Сообщения:
    18
    за ссылку большое спасибо, но не помогло. при загрузке dll написал:
    [ ---- ] Heuristic analysis: [ packed ]
    [ ---- ] ASPack dirt is present [ 2 ]

    а потом облом
    [ 2,03] Load file LNetware.dll... [ ok ]
    [ ---- ] Header info: ImageBase: 00400000, EP: 00050001
    [ 49,71] Start debug session... [ ok ]
    [ ---- ] PID: 00000A10
    [ 32,80] Wait EP... [ ok ]
    [ ---- ] Real ImageBase: 00320000
    [ ---- ] Trace...
    [ 19,23] ASPack technology detected!
    [ ---- ] Find ASPack loader section... [ error ]
    [ ---- ] ASPack section not found!

    Я покавырял руками, какой то странный ASPack, я распаковывал *.exe, там все было просто, а тута както хитро все.