Сейчас на форуме: tyns777, zds, JustLife, 2nd, morgot (+4 невидимых)

 eXeL@B —› Программирование —› C0000026 (INVALID DISPOSITION)
Посл.ответ Сообщение


Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 01 мая 2009 03:43
· Личное сообщение · #1

Ктонить сталкивался с таким исключением? ...Что это значит ? Есть ли антидебаг какой то на этом принцепе? Ковыряю прогу , и там импорт заполняется через постоянные C0000026 (INVALID DISPOSITION) , причем как то хитро что я даже не пойму что за методика Яндекс гугль не дали много.

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 01 мая 2009 03:49 · Поправил: mak
· Личное сообщение · #2

мля ..чето я ступил , ночь наверное

Вот что значит C0000026 EXCEPTION_INVALID_DISPOSITION An exception handler returned an invalid array to the exception dispatcher.

А вот надыбал доку .... Non-continuable exception trick

I haven't seen it before in public but it's possible I'm not the first one who researched this subject. I implemented similar code about year ago in my "ever unfinished" crackme, but since I doubt I'll finish the crackme, here it goes.

The idea revolves about non-continuable exceptions, that is exceptions with EXCEPTION_NONCONTINUABLE flag set in exception record. Normally, if your SEH procedure gets such an exception, you're basically screwed: you can't return 'continue execution' status, and your process is going to be mercilessly killed. If you try to continue, you will get STATUS_NONCONTINUABLE_EXCEPTION thrown by Windows exception dispatcher - there is no way out. Or is there? ;)

What if we patch or hook windows exception dispatcher (in our process only) and just clear the noncontinuable bit if it's present before dispatching the exception down to SEH? It turns out that it works as expected - we can now escape and continue even after originally non-continuable exception. Furthermore, debuggers seem to not really like it. Olly simply refuses to continue even if we clear the noncontinuable flag (but olly can't even properly handle haedware BPs set in the code so who cares ;). Windbg fares a bit better, but still falls in an infinite loop (maybe more experienced users could overcome that). IDA seems to not handle the "rethrow" of division by zero exception at the end properly (but I hardly use IDA's debugger, so others may have more luck). Also, it doesn't properly run on WINE I heard, but more tests would be nice.

Anyway, it's quite fun code, maybe it will be useful to someone. Below is the FASM source, and here is the source+exe: omeg.pl/code/noncontinuable_exc.zip

;------------------------------------------------
; Invalid Disposition exception trick
; or making noncontinuable exception continuable ;)
; Copyleft (c) Omega Red 2007, 2008
; fasm source
;------------------------------------------------
; 32-bit executable

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 01 мая 2009 03:55 · Поправил: mak
· Личное сообщение · #3

NoobyProt это фигню использует , буду терь разбирать код и импорт востановлю =) , интересно то что там еще какая то фигня с оепом , уже почти у оепа , но что то там опять нето. Тоже на исключениях построено. Может даже тот же принцып ...

Code:
  1. struct EXCEPTION_POINTERS
  2.     ExceptionRecord     dd  ?   ; ptr
  3.     ContextRecord       dd  ?   ; ptr
  4. ends
  5. struct EXCEPTION_RECORD
  6.     ExceptionCode           dd  ?
  7.     ExceptionFlags          dd  ?
  8.     NestedExceptionRecord   dd  ?
  9.     ExceptionAddress        dd  ?
  10.     NumberParameters        dd  ?
  11.     ExceptionInformation    dd  15    dup (?)
  12. ends
  13. SIZE_OF_80387_REGISTERS         =   80
  14. MAXIMUM_SUPPORTED_EXTENSION     =   512
  15. struct FLOATING_SAVE_AREA
  16.     ControlWord         dd  ?
  17.     StatusWord          dd  ?
  18.     TagWord             dd  ?
  19.     ErrorOffset         dd  ?
  20.     ErrorSelector       dd  ?
  21.     DataOffset          dd  ?
  22.     DataSelector        dd  ?
  23.     RegisterArea        db  SIZE_OF_80387_REGISTERS dup (?)
  24.     Cr0NpxState         dd  ?
  25. ends
  26. struct CONTEXT
  27.     ContextFlags    dd  ?
  28.     Dr0             dd  ?
  29.     Dr1             dd  ?
  30.     Dr2             dd  ?
  31.     Dr3             dd  ?
  32.     Dr6             dd  ?
  33.     Dr7             dd  ?
  34.     FloatSave       FLOATING_SAVE_AREA
  35.     SegGs           dd  ?
  36.     SegFs           dd  ?
  37.     SegEs           dd  ?
  38.     SegDs           dd  ?
  39.     Edi             dd  ?
  40.     Esi             dd  ?
  41.     Ebx             dd  ?
  42.     Edx             dd  ?
  43.     Ecx             dd  ?
  44.     Eax             dd  ?
  45.     Ebp             dd  ?
  46.     Eip             dd  ?
  47.     SegCs           dd  ?
  48.     EFlags          dd  ?
  49.     Esp             dd  ?
  50.     SegSs           dd  ?
  51.     ExtendedRegisters   db MAXIMUM_SUPPORTED_EXTENSION dup (?)
  52. ends
  53. ;------------------------------------------------
  54. section 'code' code readable executable
  55. start:
  56. ; int3
  57. ; install UEF
  58.     invoke      SetUnhandledExceptionFilter, UnhandledExceptionFilter
  59. ; install SEH
  60.     push        dword seh_handler
  61.     push        dword [fs:0]
  62.     mov         dword [fs:0], esp
  63.     invoke      GetModuleHandle, _ntdll
  64.     invoke      GetProcAddress, eax, _rre
  65. ; cause #UD exception which will set up hardware BPX on RtlRaiseException
  66.     ud2
  67.     nop
  68. ; cause divide error -> invalid disposition exception (normally noncontinuable )
  69.     xor eax,eax
  70.     div eax
  71. _end:
  72. ; delete SEH
  73.     pop         dword [fs:0]
  74.     add         esp, 4
  75.     
  76.     invoke      msgbox, 0, t9, t9, 0
  77.     invoke      exit, 0
  78. proc seh_handler    ExceptionRecord, EstablisherFrame, ContextRecord, DispatcherContext
  79.     push        ebx esi edi                         ; save win32 callback registers
  80.     mov         ebx, [ExceptionRecord]
  81.     mov         esi, [ContextRecord]
  82.     mov         eax, [ebx+EXCEPTION_RECORD.ExceptionCode]
  83.     cmp         eax, STATUS_ILLEGAL_INSTRUCTION     ; c000001d
  84.     jne         seh_ss
  85.     invoke      msgbox, 0, t2, t1, 0
  86.     ; #UD: let's install BPX on RtlRaiseException
  87.     push        [esi+CONTEXT.Eax]                   ; address here
  88.     pop         [esi+CONTEXT.Dr0]
  89.     mov         [esi+CONTEXT.Dr7], 0x00000101       ; enable local BPX on DR0
  90.     add         [esi+CONTEXT.Eip], 2                ; skip UD2
  91.     jmp         seh_end
  92. seh_ss:
  93.     cmp         eax, STATUS_SINGLE_STEP             ; 80000004 - BPM or single step
  94.     jne         seh_dz
  95.     invoke      msgbox, 0, t3, t1, 0
  96.     ; RtlRaiseException hook bpx ;]
  97.     ; check if exception is noncontinuable - if it is, make it continuable
  98.     mov         eax, [esi+CONTEXT.Esp]              ; get esp on RtlRaiseException entry
  99.     mov         eax, [eax+4]                        ; get parameter - ptr to EXCEPTION_RECORD
  100.     test        [eax+EXCEPTION_RECORD.ExceptionFlags], EXCEPTION_NONCONTINUABLE
  101.     jz          seh_ss2                             ; continuable exception, ignore
  102.     ; clear noncontinuable flag
  103.     and         [eax+EXCEPTION_RECORD.ExceptionFlags], not EXCEPTION_NONCONTINUABLE
  104. seh_ss2:
  105.     mov         [esi+CONTEXT.Dr7], 0                ; disable bpx so we don't loop forever
  106.     jmp         seh_end
  107.     
  108. seh_dz:
  109.     cmp         eax, STATUS_INTEGER_DIVIDE_BY_ZERO
  110.     jne         seh_id
  111.     invoke      msgbox, 0, t4, t1, 0
  112.     ; divide error, let's trigger noncontinuable condition
  113.     mov         eax, 0xdeadc0de                     ; invalid disposition
  114.     jmp         seh_end2
  115. seh_id:         ; invalid disposition handler (which should be made continuable by our hook ;)
  116.     cmp         eax, STATUS_INVALID_DISPOSITION     ; c0000026
  117.     jz          @f
  118.     ; unknown exception, commit suicide ;]
  119.     invoke      msgbox, 0, t8, t1, 0
  120.     mov         eax, 1                              ; continue search (= effectively kill process)
  121.     jmp         seh_end2
  122.     
  123. @@: ; fix the condition that leaded to noncontinuable exception - divide error in this case
  124.     invoke      msgbox, 0, t5, t1, 0
  125.     mov         eax, [ebx+EXCEPTION_RECORD.NestedExceptionRecord]
  126.     mov         eax, [eax-0x0c]    ; context pointer - ONLY IF EXCEPTION PARAMETERS ARE DIRECTLY BEFORE SEH FRAME!
  127.     mov         [eax+CONTEXT.Eax], 0xdeadbeef   ; correct div ;)
  128.     ; this exception is now continuable so we can go ahead
  129. seh_end:
  130.     xor         eax, eax                            ; status: continue execution
  131. seh_end2:
  132.     pop         edi esi ebx
  133.     ret                                             ; proc macro takes care of stack balance
  134. endp
  135. UnhandledExceptionFilter:
  136.     push        esi edi ebx
  137.     ExceptionPointers   equ esp+0x10    ; EXCEPTION_POINTERS
  138.     mov         eax, [ExceptionPointers]
  139.     mov         ebx, [eax+EXCEPTION_POINTERS.ExceptionRecord]   ; exception info
  140.     mov         esi, [eax+EXCEPTION_POINTERS.ContextRecord]     ; CPU state when exception occured
  141.     mov         eax, [ebx+EXCEPTION_RECORD.ExceptionCode]       ; code
  142.     cmp         eax, STATUS_INTEGER_DIVIDE_BY_ZERO
  143.     jne         @f
  144.     ; nothing for now - seh fixes context 2 frames back *o*
  145.     ; well, we NEED to handle it here - I still don't know exactly why ZwRaiseException ignores SEH after nested exception and throws us here
  146.     ; seems like some unwind is going on, since DRs are reverted to the state at previous (first) DIV error
  147.     ; (that's actually good, because we don't need to reenable bpx manually)
  148.     invoke      msgbox, 0, t7, t6, 0
  149.     jmp         uef_end
  150. ;------------
  151. @@:
  152.     ; unknown exception
  153.     invoke      msgbox, 0, t8, t6, 0
  154. uef_end:
  155.     mov         eax, -1 ; continue
  156.     pop         ebx edi esi
  157.     ret         4
  158. section 'data' data readable writable
  159. _ntdll      db  'ntdll.dll',0
  160. _rre        db  'RtlRaiseException',0
  161. t1          db  'SEH',0
  162. t2          db  'STATUS_ILLEGAL_INSTRUCTION',10,'Installing RtlRaiseException hook',0
  163. t3          db  'STATUS_SINGLE_STEP',10,'RtlRaiseException called',0
  164. t4          db  'STATUS_INTEGER_DIVIDE_BY_ZERO',10,'Returning invalid disposition',0
  165. t5          db  'STATUS_INVALID_DISPOSITION',10,'Fixing div and continuing',0
  166. t6          db  'UEF',0
  167. t7          db  'STATUS_INTEGER_DIVIDE_BY_ZERO',0
  168. t8          db  'Unknown exception',0
  169. t9          db  'Exiting properly, all is ok',0


-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 10.1 (новичок)
Активность: 0.010
Статус: Участник

Создано: 01 мая 2009 12:05 · Поправил: Nooby
· Личное сообщение · #4

enum EXCEPTION_DISPOSITION
{
ExceptionContinueExecution,
ExceptionContinueSearch,
ExceptionNestedException,
ExceptionCollidedUnwind
}

EXCEPTION_DISPOSITION __cdecl _except_handler (struct _EXCEPTION_RECORD *_ExceptionRecord, void *_EstablisherFrame, struct _CONTEXT *_ContextRecord, void *_DispatcherContext);

Appearently some value other than the defined enumerations will cause an INVALID_DISPOSITION exception and then passed into the same handler again, and eventually cause a stack overflow.

mak:
Your example assumes that there is only one exception frame between it's own handler and the unhandled exception handler, which is usually not the case and I didn't use it.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 01 мая 2009 16:08
· Личное сообщение · #5

Антидебуг.. Вам мало описанных сервисов NtContinue, NtSetContextThread и NtRaiseException, который позволяют потоку сбросить флажёк TF ?
Ну тогда используйте ядерный эксплоит дабы изменить кольцо защиты, лучшего решения в юзермоде не существует.)




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 02 мая 2009 12:34 · Поправил: ARCHANGEL
· Личное сообщение · #6

Я так понимаю - эти финты ушами не работают против Айса? Да и ольку, походу, можно поправить.

mak
Ты не тестил фантик - он тоже покупается на это?

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 02 мая 2009 13:23
· Личное сообщение · #7

ARCHANGEL Ну я вообще тоже так пологал , но там задолбался трасировать =) спать пошел , пару раз бсодонуло. Фантик , не знаю почему у меня вообще что то не работает и бсодит часто , поэтому я его не пользую. А с Айсом я еще раз попробую , попозже ...

Мож еще кто хочет поковырять ... вот тут залил www.onlinedisk.ru/file/131853/ , может старая версия , новых не видел...но всеравно интересно будет время доделаю до конца.

А импорт приложил к вложению , вроде полный ...

Nooby Спасибо!



195b_02.05.2009_CRACKLAB.rU.tgz - importRE.txt

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 02 мая 2009 13:25
· Личное сообщение · #8

Clerk Имел дело с эксплоитами , постоянно какой то геморой , не всегда работает

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 06 мая 2009 15:25
· Личное сообщение · #9

mak
по иронии судьбы это должен распаковать dermatolog

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 07 мая 2009 00:06 · Поправил: mak
· Личное сообщение · #10

ARCHANGEL ответный удар типо)))))))

Ктонить ковырял дальше ? =)нубапрот ?

Вот дешифровщик кода ...шаблон , таких много там
00D59B6A 87B0 BB75EC50 XCHG DWORD PTR DS:[EAX+50EC75BB],ESI
00D59B70 E8 00000000 CALL npdemo.00D59B75
00D59B75 830424 2C ADD DWORD PTR SS:[ESP],2C
00D59B79 9C PUSHFD
00D59B7A 50 PUSH EAX
00D59B7B 810424 BB75EC50 ADD DWORD PTR SS:[ESP],50EC75BB
00D59B82 60 PUSHAD
00D59B83 6A 00 PUSH 0
00D59B85 54 PUSH ESP
00D59B86 68 40010000 PUSH 140
00D59B8B 6A 04 PUSH 4
00D59B8D FF7424 30 PUSH DWORD PTR SS:[ESP+30]
00D59B91 B8 16C6618A MOV EAX,8A61C616
00D59B96 FF90 416CEE75 CALL DWORD PTR DS:[EAX+75EE6C41] ; kernel32.VirtualProtect

00D59B9C 83C4 04 ADD ESP,4
00D59B9F 61 POPAD
00D59BA0 C3 RETN
00D59BA1 87EE XCHG ESI,EBP
00D59BA3 03F5 ADD ESI,EBP
00D59BA5 03F1 ADD ESI,ECX
00D59BA7 33F2 XOR ESI,EDX
00D59BA9 33F7 XOR ESI,EDI
00D59BAB 03FE ADD EDI,ESI
00D59BAD 87B0 BB75EC50 XCHG DWORD PTR DS:[EAX+50EC75BB],ESI
00D59BB3 D1C9 ROR ECX,1
00D59BB5 D1C2 ROL EDX,1
00D59BB7 03C3 ADD EAX,EBX
00D59BB9 83EB 04 SUB EBX,4
00D59BBC 2BC3 SUB EAX,EBX
00D59BBE 83FB 00 CMP EBX,0
00D59BC1 ^ 75 A7 JNZ SHORT npdemo.00D59B6A


сейчас его гоняю по разному , тут расшифровывается секция кода , через Guard Pages , сначала думал антиотладка ,
но фиг знает , смотрю пока , потому что расшифровка идет по кускам точно , и судя по всему рандомными кусками , не обязательно
те что сразу за внедренным кодом в секции кода вида

0048626C 9D POPFD
0048626D C3 RETN
0048626E 70 28 JO SHORT npdemo.00486298

по рету мы выхожим на дешифровщик по адресу 00D59B6A
также всегда присутсвует

0048626E 70 28 JO SHORT npdemo.00486298

а вот трасировка сразу следующая

00486270 9D POPFD
00486271 C3 RETN
00486272 70 28 JO SHORT npdemo.0048629C

и следующая =)

00486274 9D POPFD
00486275 C3 RETN
00486276 70 28 JO SHORT npdemo.004862A0

и еще одна для статистики

00486278 9D POPFD
00486279 C3 RETN
0048627A 70 28 JO SHORT npdemo.004862A4

не трудно отследить что шаг 4 идет

Ближайший сех в коде настроеный выглядит так

00D52DEE 60 PUSHAD
00D52DEF 70 53 JO SHORT npdemo.00D52E44
00D52DF1 71 51 JNO SHORT npdemo.00D52E44
00D52DF3 36:B4 2A MOV AH,2A ; Superfluous prefix
00D52DF6 4D DEC EBP
00D52DF7 BC 3BA82AB8 MOV ESP,B82AA83B
00D52DFC DF2A FILD QWORD PTR DS:[EDX]
00D52DFE AD LODS DWORD PTR DS:[ESI]
00D52DFF C8 4AD8BF ENTER 0D84A,0BF
00D52E03 4A DEC EDX
00D52E04 CD 7C INT 7C
00D52E06 FE ??? ; Unknown command
00D52E07 6C INS BYTE PTR ES:[EDI],DX ; I/O command
00D52E08 0B06 OR EAX,DWORD PTR DS:[ESI]
00D52E0A 815CDE 4C 2BE66>SBB DWORD PTR DS:[ESI+EBX*8+4C],CE61E62B
00D52E12 4C DEC ESP
00D52E13 C2 A554 RETN 54A5


Похоже он не расшифровывается =)
бряк на сехе не срабатывал ....
а вот в то что привращается код после вот таких примерных игр с пайдж гуард

0047CD5E 50 PUSH EAX
0047CD5F F7D9 NEG ECX
0047CD61 55 PUSH EBP
0047CD62 C74424 34 28000>MOV DWORD PTR SS:[ESP+34],28
0047CD6A 895C24 38 MOV DWORD PTR SS:[ESP+38],EBX
0047CD6E 894C24 3C MOV DWORD PTR SS:[ESP+3C],ECX
0047CD72 66:C74424 40 01>MOV WORD PTR SS:[ESP+40],1
0047CD79 66:C74424 42 20>MOV WORD PTR SS:[ESP+42],20
0047CD80 896C24 44 MOV DWORD PTR SS:[ESP+44],EBP
0047CD84 FF15 1C914900 CALL DWORD PTR DS:[<&GDI32.CreateDIBSection>] ; GDI32.CreateDIBSection
0047CD8A 8BC8 MOV ECX,EAX
0047CD8C 3BCD CMP ECX,EBP
0047CD8E 894C24 18 MOV DWORD PTR SS:[ESP+18],ECX

Код разбит на куски , между ними стоят инты ....много интов , далее посмотрим зачем эти области нужны =)

Теоретически ОЕП была найдена ранее =) ... но она срабатывала по нескольку раз и все время как то проскакивало мимо ...
сейчас когда находимся на теоретическом оепе =)код такой

00491247 55 PUSH EBP
00491248 8BEC MOV EBP,ESP ; Original Entry Point
0049124A 83C4 E0 ADD ESP,-20
0049124D 8945 E0 MOV DWORD PTR SS:[EBP-20],EAX
00491250 DD5D F8 FSTP QWORD PTR SS:[EBP-8]
00491253 894D E4 MOV DWORD PTR SS:[EBP-1C],ECX
00491256 8B45 10 MOV EAX,DWORD PTR SS:[EBP+10]
00491259 8B4D 14 MOV ECX,DWORD PTR SS:[EBP+14]
0049125C 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
0049125F 894D EC MOV DWORD PTR SS:[EBP-14],ECX
00491262 8D45 08 LEA EAX,DWORD PTR SS:[EBP+8]
00491265 8D4D E0 LEA ECX,DWORD PTR SS:[EBP-20]
00491268 50 PUSH EAX
00491269 51 PUSH ECX
0049126A 52 PUSH EDX
0049126B E8 17150000 CALL npdemo.00492787
00491270 83C4 0C ADD ESP,0C
00491273 DD45 F8 FLD QWORD PTR SS:[EBP-8]
00491276 66:817D 08 7F02 CMP WORD PTR SS:[EBP+8],27F
0049127C 74 03 JE SHORT npdemo.00491281
0049127E D96D 08 FLDCW WORD PTR SS:[EBP+8]
00491281 C9 LEAVE
00491282 C3 RETN
00491283 CC INT3
00491284 CC INT3
00491285 CC INT3


но код расшифрован не полностью судя например по коду вот тут

004112B5 8B86 0146C45A MOV EAX,DWORD PTR DS:[ESI+5AC44601]
004112BB 3D CC4B2AA8 CMP EAX,A82A4BCC
004112C0 3E:59 POP ECX ; Superfluous prefix
004112C2 A8 2F TEST AL,2F
004112C4 7A F8 JPE SHORT npdemo.004112BE
004112C6 6E OUTS DX,BYTE PTR ES:[EDI] ; I/O command
004112C7 09F8 OR EAX,EDI
004112C9 ^ 7F 82 JG SHORT npdemo.0041124D
004112CB 0096 F1008744 ADD BYTE PTR DS:[ESI+448700F1],DL
004112D1 C6 ??? ; Unknown command
004112D2 54 PUSH ESP
004112D3 33CE XOR ECX,ESI
004112D5 49 DEC ECX
004112D6 A6 CMPS BYTE PTR DS:[ESI],BYTE PTR ES:[EDI]
004112D7 24 BA AND AL,0BA
004112D9 DD ??? ; Unknown command
004112DA 2C AB SUB AL,0AB
004112DC F674EA 8D DIV BYTE PTR DS:[EDX+EBP*8-73]
004112E0 ^ 7C FB JL SHORT npdemo.004112DD
004112E2 6A E8 PUSH -18
004112E4 7E 19 JLE SHORT npdemo.004112FF
004112E6 E8 6F72F066 CALL 6731855A
004112EB 01F0 ADD EAX,ESI
004112ED 77 60 JA SHORT npdemo.0041134F
004112EF E2 70 LOOPD SHORT npdemo.00411361
004112F1 17 POP SS ; Modification of segment register
004112F2 E2 65 LOOPD SHORT npdemo.00411359
004112F4 8200 96 ADD BYTE PTR DS:[EAX],-6A
004112F7 F1 INT1
004112F8 0087 32B02641 ADD BYTE PTR DS:[EDI+4126B032],AL
004112FE B0 37 MOV AL,37
00411300 1290 06619017 ADC DL,BYTE PTR DS:[EAX+17906106]
00411306 C446 D4 LES EAX,FWORD PTR DS:[ESI-2C] ; Modification of segment register
00411309 B3 4E MOV BL,4E
0041130B C9 LEAVE
0041130C 04 86 ADD AL,86
0041130E 14 73 ADC AL,73
00411310 8E09 MOV CS,WORD PTR DS:[ECX] ; Segment CS is not allowed
00411312 36:B4 2A MOV AH,2A ; Superfluous prefix
00411315 4D DEC EBP
00411316 BC 3B840694 MOV ESP,9406843B
0041131B F3: PREFIX REP: ; Superfluous prefix
0041131C 0E PUSH CS
0041131D 8932 MOV DWORD PTR DS:[EDX],ESI
0041131F B0 26 MOV AL,26
00411321 41 INC ECX

а вот еще один дешифровщик найденный по ходу дела =)

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 07 мая 2009 00:12
· Личное сообщение · #11

00D5959C 87B0 F851C8B9 XCHG DWORD PTR DS:[EAX+B9C851F8],ESI
00D595A2 E8 00000000 CALL npdemo.00D595A7
00D595A7 830424 0E ADD DWORD PTR SS:[ESP],0E
00D595AB 9C PUSHFD
00D595AC 50 PUSH EAX
00D595AD 810424 F851C8B9 ADD DWORD PTR SS:[ESP],B9C851F8
00D595B4 C3 RETN
00D595B5 87EE XCHG ESI,EBP
00D595B7 03F5 ADD ESI,EBP
00D595B9 03F1 ADD ESI,ECX
00D595BB 33F2 XOR ESI,EDX
00D595BD 33F7 XOR ESI,EDI
00D595BF 03FE ADD EDI,ESI
00D595C1 87B0 F851C8B9 XCHG DWORD PTR DS:[EAX+B9C851F8],ESI
00D595C7 D1C1 ROL ECX,1
00D595C9 D1CA ROR EDX,1
00D595CB 03C3 ADD EAX,EBX
00D595CD 83EB 04 SUB EBX,4
00D595D0 2BC3 SUB EAX,EBX
00D595D2 83FB 00 CMP EBX,0
00D595D5 ^ 75 C5 JNZ SHORT npdemo.00D5959C

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

00D59AF9 83EC FC SUB ESP,-4
00D59AFC E8 B4FCFFFF CALL npdemo.00D597B5
00D59B01 5A POP EDX
00D59B02 17 POP SS ; Modification of segment register
00D59B03 D836 FDIV DWORD PTR DS:[ESI]
00D59B05 816C24 04 317D4>SUB DWORD PTR SS:[ESP+4],3A487D31
00D59B0D 83C4 04 ADD ESP,4
00D59B10 9D POPFD
00D59B11 9D POPFD
00D59B12 9D POPFD
00D59B13 9D POPFD
00D59B14 9D POPFD
00D59B15 9D POPFD
00D59B16 9D POPFD
00D59B17 9D POPFD
00D59B18 9D POPFD
00D59B19 9D POPFD
00D59B1A 9D POPFD
00D59B1B 9D POPFD
00D59B1C 9D POPFD
00D59B1D 9D POPFD
00D59B1E 9D POPFD
00D59B1F 9D POPFD
00D59B20 9D POPFD
00D59B21 9D POPFD
00D59B22 9D POPFD
00D59B23 9D POPFD
00D59B24 9D POPFD
00D59B25 9D POPFD
00D59B26 9D POPFD
00D59B27 9D POPFD
00D59B28 9D POPFD
00D59B29 9D POPFD
00D59B2A 9D POPFD
00D59B2B 9D POPFD
00D59B2C 9D POPFD
00D59B2D 9D POPFD

=) В проте активно используются потоки , что не есть гуд для нас ....оля как наркоман балдеет от них ) ...а я от оли)))))))) Также используется синхронизация
через критикалсекшн =)


Модифицированные код , который я просто наскоком просматривал , внезапно оказался по другому офсету =) , и причем эти куски я уже видел , именно они дешифровались
а теперь они уже в секции по адресу - хочу сказать что это лишшь заметки поведения прота =)


Трасируя дальше становится ясно , что оеп собственно говоря неверный, потому что остались куски пошифрованные , и еще нет активной работы проги , есть только
обфусцированный код , с антиотладкой =) , который при косяках , выдает всякие странные фичи =)

Бряки ставить вообще нереально , на любой адрес .... по крайней мере отладчик сразу убивает прогу с кодом неверный импорт , или же просто инвалид деспозишн.
Собственно того что я хотел я добился. Безпроблемное беганье по коду в ольге .... и постоянный запуск прота в оле без косяков

Сейчас проблема со скриптами , почему то они не выполняют то что мне нужно , раз через раз , причем даже при ручной прогонке олискрипт оч оч глючит. Поэтому как только его починю =) Выложу полный анпаченый файл. Импорт вроде тот же ...второй раз его не проверял , но там легко , на крайняк востановить Вот ....

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 09 мая 2009 16:15 · Поправил: Clerk
· Личное сообщение · #12

mak
Вот скомпилел антидебаг, тока на другом принципе:
Code:
  1. PiEntry:
  2. db 0E9h, 0D2h, 001h, 000h, 000h, 051h, 08Bh, 00Dh, 06Ch, 002h
  3. db 0FEh, 07Fh, 08Bh, 015h, 070h, 002h, 0FEh, 07Fh, 083h, 0F9h
  4. db 005h, 074h, 014h, 083h, 0F9h, 006h, 075h, 01Dh, 085h, 0D2h
  5. db 0B8h, 003h, 000h, 000h, 000h, 074h, 019h, 04Ah, 040h, 074h
  6. db 015h, 0EBh, 00Eh, 033h, 0C0h, 085h, 0D2h, 074h, 00Dh, 040h
  7. db 04Ah, 074h, 009h, 040h, 04Ah, 074h, 005h, 0B8h, 002h, 000h
  8. db 000h, 0C0h, 059h, 074h, 001h, 0C3h, 0E8h, 000h, 000h, 000h
  9. db 000h, 05Ah, 08Dh, 094h, 082h, 032h, 000h, 000h, 000h, 003h
  10. db 0D0h, 083h, 0F9h, 003h, 00Fh, 0B6h, 004h, 011h, 072h, 00Dh
  11. db 005h, 0B0h, 000h, 000h, 000h, 075h, 006h, 0B8h, 002h, 000h
  12. db 000h, 0C0h, 0C3h, 08Dh, 054h, 024h, 004h, 06Ah, 023h, 03Eh
  13. db 026h, 036h, 03Eh, 017h, 03Eh, 026h, 036h, 03Eh, 0CDh, 02Eh
  14. db 0C3h, 018h, 01Ch, 086h, 000h, 00Ah, 019h, 020h, 09Ah, 00Fh
  15. db 025h, 01Bh, 022h, 0A1h, 017h, 02Dh, 030h, 037h, 0E4h, 05Ah
  16. db 075h, 033h, 03Dh, 0EBh, 073h, 08Eh, 055h, 08Bh, 0ECh, 081h
  17. db 0C4h, 034h, 0FDh, 0FFh, 0FFh, 0C7h, 085h, 034h, 0FDh, 0FFh
  18. db 0FFh, 011h, 000h, 001h, 000h, 08Bh, 04Dh, 000h, 08Dh, 055h
  19. db 00Ch, 08Bh, 045h, 008h, 089h, 08Dh, 0E8h, 0FDh, 0FFh, 0FFh
  20. db 089h, 095h, 0F8h, 0FDh, 0FFh, 0FFh, 0C7h, 085h, 0F0h, 0FDh
  21. db 0FFh, 0FFh, 01Bh, 000h, 000h, 000h, 0C7h, 085h, 0FCh, 0FDh
  22. db 0FFh, 0FFh, 023h, 000h, 000h, 000h, 0C7h, 085h, 04Ch, 0FDh
  23. db 0FFh, 0FFh, 000h, 000h, 000h, 000h, 033h, 005h, 030h, 003h
  24. db 0FEh, 07Fh, 08Dh, 08Dh, 034h, 0FDh, 0FFh, 0FFh, 0C7h, 085h
  25. db 0F4h, 0FDh, 0FFh, 0FFh, 000h, 002h, 000h, 000h, 089h, 085h
  26. db 0ECh, 0FDh, 0FFh, 0FFh, 051h, 06Ah, 0FEh, 0B9h, 004h, 000h
  27. db 000h, 000h, 0E8h, 004h, 0FFh, 0FFh, 0FFh, 08Dh, 064h, 024h
  28. db 008h, 0C9h, 0C2h, 004h, 000h, 055h, 08Bh, 0ECh, 081h, 0C4h
  29. db 034h, 0FDh, 0FFh, 0FFh, 0C7h, 085h, 034h, 0FDh, 0FFh, 0FFh
  30. db 011h, 000h, 001h, 000h, 08Bh, 04Dh, 000h, 08Dh, 055h, 00Ch
  31. db 08Bh, 045h, 008h, 089h, 08Dh, 0E8h, 0FDh, 0FFh, 0FFh, 089h
  32. db 095h, 0F8h, 0FDh, 0FFh, 0FFh, 0C7h, 085h, 0F0h, 0FDh, 0FFh
  33. db 0FFh, 01Bh, 000h, 000h, 000h, 0C7h, 085h, 0FCh, 0FDh, 0FFh
  34. db 0FFh, 023h, 000h, 000h, 000h, 0C7h, 085h, 04Ch, 0FDh, 0FFh
  35. db 0FFh, 000h, 000h, 000h, 000h, 033h, 005h, 030h, 003h, 0FEh
  36. db 07Fh, 08Dh, 08Dh, 034h, 0FDh, 0FFh, 0FFh, 06Ah, 000h, 0C7h
  37. db 085h, 0F4h, 0FDh, 0FFh, 0FFh, 000h, 002h, 000h, 000h, 089h
  38. db 085h, 0ECh, 0FDh, 0FFh, 0FFh, 051h, 0B9h, 001h, 000h, 000h
  39. db 000h, 0E8h, 08Dh, 0FEh, 0FFh, 0FFh, 08Dh, 064h, 024h, 008h
  40. db 0C9h, 0C2h, 004h, 000h, 055h, 08Bh, 0ECh, 083h, 0C4h, 0FCh
  41. db 08Dh, 055h, 0FCh, 06Ah, 000h, 06Ah, 004h, 052h, 06Ah, 01Eh
  42. db 06Ah, 0FFh, 0B9h, 002h, 000h, 000h, 000h, 0E8h, 069h, 0FEh
  43. db 0FFh, 0FFh, 08Dh, 064h, 024h, 014h, 085h, 0C0h, 074h, 00Bh
  44. db 03Dh, 053h, 003h, 000h, 0C0h, 075h, 02Ah, 033h, 0C0h, 0EBh
  45. db 026h, 0FFh, 075h, 0FCh, 06Ah, 0FFh, 0B9h, 003h, 000h, 000h
  46. db 000h, 0E8h, 047h, 0FEh, 0FFh, 0FFh, 08Dh, 064h, 024h, 008h
  47. db 050h, 0FFh, 075h, 0FCh, 0B9h, 000h, 000h, 000h, 000h, 0E8h
  48. db 035h, 0FEh, 0FFh, 0FFh, 08Dh, 064h, 024h, 004h, 058h, 0C9h
  49. db 0C3h, 055h, 08Bh, 0ECh, 0BBh, 011h, 000h, 000h, 000h, 033h
  50. db 0FFh, 04Bh, 074h, 01Ah, 0E8h, 000h, 000h, 000h, 000h, 0A1h
  51. db 030h, 003h, 0FEh, 07Fh, 081h, 004h, 024h, 0F8h, 0FFh, 0FFh
  52. db 0FFh, 031h, 004h, 024h, 0E8h, 095h, 0FEh, 0FFh, 0FFh, 047h
  53. db 003h, 0FBh, 0BBh, 009h, 000h, 000h, 000h, 0E8h, 076h, 0FFh
  54. db 0FFh, 0FFh, 04Bh, 074h, 01Ah, 0E8h, 000h, 000h, 000h, 000h
  55. db 0A1h, 030h, 003h, 0FEh, 07Fh, 081h, 004h, 024h, 0F8h, 0FFh
  56. db 0FFh, 0FFh, 031h, 004h, 024h, 0E8h, 0E3h, 0FEh, 0FFh, 0FFh
  57. db 047h, 003h, 0FBh, 0E8h, 052h, 0FFh, 0FFh, 0FFh, 08Bh, 0F0h
  58. db 0E8h, 000h, 000h, 000h, 000h, 0A1h, 030h, 003h, 0FEh, 07Fh
  59. db 081h, 004h, 024h, 01Ah, 000h, 000h, 000h, 031h, 004h, 024h
  60. db 0E8h, 049h, 0FEh, 0FFh, 0FFh, 033h, 0C0h, 0C9h, 0C2h, 004h
  61. db 000h, 042h, 00Fh, 094h, 0C2h, 00Bh, 0DEh, 00Fh, 0B6h, 0D2h
  62. db 00Bh, 0DFh, 00Bh, 0DAh, 05Dh, 05Eh, 0E8h, 02Fh, 0FEh, 0FFh
  63. db 0FFh, 0FFh, 0E6h

В стек загружаем указатель куда будет выполнен переход, поксоренный с UsEncodeMask и юзаем начало пикода, например:
Code:
  1. .code
  2. include dump.inc
  3. UsSharedData equ 7FFE0000h
  4. UsEncodeMask equ UsSharedData + 330h
  5. PUSH_ENCODED_REF macro PtrOutside
  6. Local dt_
  7.          Call dt_
  8. dt_:
  9.          mov eax,dword ptr ds:[UsEncodeMask]
  10.          add dword ptr [esp],(offset PtrOutside - offset dt_)
  11.          xor dword ptr [esp],eax
  12. endm
  13. Entry proc
  14. Local Response:ULONG
  15.          PUSH_ENCODED_REF cnt_
  16.          call PiEntry
  17.          int 3   
  18. cnt_:
  19.          invoke ZwRaiseHardError, STATUS_SUCCESS, 1, 0, 0, OptionOkCancel, addr Response
  20.          ret
  21. Entry endp

Попробуйте протрассировать.




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 09 мая 2009 17:38
· Личное сообщение · #13

Нуби был прав ,там другой принцып инвалиддиспозишн , тем не менее наткнулся на такой трюк ... интересно тоже с вариантами поиграться.

Clerk ты как всегда ченить интересное выложишь Пора тебе уже свой прот писать) выкладывание кода в ДБ возвращается в моду) ..удобно ... У меня к тебе пару вопросов по низкоур.прогр. появилось...напишу.

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 09 мая 2009 17:44 · Поправил: Clerk
· Личное сообщение · #14

mak
Нету там ничего интересного, баян уже сто раз писал и говорил. Вот сурцы http://files.virustech.org/indy/Code/OutDbg/
Выход потока из под трассировки, тоесть сброс TF это альтернатива любому антиотладочному механизму в юзермоде. Лучшего легального способа обойти трассировку не существует.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 17 мая 2009 22:34
· Личное сообщение · #15

up




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 18 мая 2009 15:58
· Личное сообщение · #16

Как-то странно навешан прот на нуби протект. Ни защиты импорта, ничего кроме выноса некоторых функций в отдельную секцию и их замусоривания

--> Dump <--

-----
Research For Food





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 18 мая 2009 22:26
· Личное сообщение · #17

В кернеле падает у тебя гдето постоянно , проверь этот файл пойдет ли у тебя ?

rapidshare.com/files/234499025/umped.rar.html

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 20 мая 2009 08:51
· Личное сообщение · #18

mak
Что оно делает, опасно запускать незнакомые файлы с намёком на крах ядра, можно потом и не поднять его . На варе запустить - можно попробовать .




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 20 мая 2009 14:24
· Личное сообщение · #19

да не , речь шла вроде просто об ошибке в кернеле при работе проге и все. В моем дампе вроде бы такого нет , где проверил там везде шло. Нужно сравнить , почему у daFix падает 2 файла. Пока времени не было. Но у daFix вроде мой идет. Это распакованный Нубипротект ...

Вообщемто , учитывая что никто не пишет о падениях , то пусть топ будет временно закрыт , потом когда будет время скриптисы сделаю нормальные. Но я так понял протектор не будет пользоваться популярностью. Поэтому вот так ...

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube



 eXeL@B —› Программирование —› C0000026 (INVALID DISPOSITION)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати