Неправильно дизассемблируется код

Тема в разделе "WASM.RESEARCH", создана пользователем Egorgiy, 26 май 2009.

  1. Egorgiy

    Egorgiy New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2004
    Сообщения:
    31
    Адрес:
    Russia
    Прошу совета...
    С чем может быть связан тот факт, что ни один дизассемблер (IDA, OllyDdg, Wdasm и др.) не верно дизассемблирует код ехе-шника?
    Исследуемый ехе-шник был про_SecureRom_ин (однако распапован и крякнут). Даже дамп этого лицензионного ехе и тот не верно дизассемблируется.
     
  2. Egorgiy

    Egorgiy New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2004
    Сообщения:
    31
    Адрес:
    Russia
    Кстати только часть кода не верно распознается...
    Например внутри какой-то процедуры начало и конец нормально распознаются, а в середине могут быть куски не верного кода... (не распознанного)
     
  3. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Может просто ошибка в дебаггерах? У меня недавно был случай с OllyDbg - инструкция FISTTP неверно дисассемблируется.
     
  4. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    покажи файл или часть кода.
     
  5. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    кхм... обычно говорят "телепатов тут нет".

    1) Код не распознается, потому что это не код. Ссылок на него нет, перед ним стоит jmp или ret, и шут его знает, это код или какой-то набор данных? И даже очень может такое быть, что в самом деле набор данных.

    2) Секция кода оказалась не совсем стандартная, и осталась "нераспознанной". Однако, где-то обнаружились переходы на какие-то процедуры, в этой нераспознанной секции, и ИДА, выполняя стандартный анализ при загрузке, эти процедуры дизассемблировала. А остальное оставила как есть, а местами могла и в данные превратить. На этот случай там такие кнопочки есть... вверху... на них еще разными цветами разные буковки написаны... чтобы вручную втолковать программе, что это код, или данные. Первоначальный анализ очень редко бывает чистым и предельно понятным.

    3) может, он все-таки запакован? Двумя крипторами-пакерами?

    4) может быть, это p-код? один-единственный апи-вызов в начале, и далее уже никакого кода, разве что где-нибудь дальше, местами, проскакивает, для обработки ошибок.

    можно еще столько же вариантов предложить.
     
  6. Egorgiy

    Egorgiy New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2004
    Сообщения:
    31
    Адрес:
    Russia
    004D4462 .C74490 04 55000>MOV DWORD PTR DS:[EAX+EDX*4+4],55
    004D446A .8B10 MOV EDX,DWORD PTR DS:[EAX]
    004D446C .894C90 7C MOV DWORD PTR DS:[EAX+EDX*4+7C],ECX
    004D4470 .8B10 MOV EDX,DWORD PTR DS:[EAX]
    004D4472 .42 INC EDX ; ntdll.KiFastSystemCallRet
    004D4473 .50 PUSH EAX
    004D4474 .87DB XCHG EBX,EBX
    004D4476 .B8 D43686A5 MOV EAX,A58636D4
    004D447B .C1EF 00 SHR EDI,0 ; Shift constant out of range 1..31
    004D447E .54 PUSH ESP
    004D447F .35 A4B42BA5 XOR EAX,A52BB4A4
    004D4484 .C1EA 00 SHR EDX,0 ; Shift constant out of range 1..31
    004D4487 .68 FC494B01 PUSH NHL09_NO.014B49FC
    004D448C .87ED XCHG EBP,EBP
    004D448E .FFD0 CALL EAX
    004D4490 .3BD0 CMP EDX,EAX
    004D4492 .58 POP EAX ; kernel32.7C817077
    004D4493 .8910 MOV DWORD PTR DS:[EAX],EDX ; ntdll.KiFastSystemCallRet
    004D4495 .7D 10 JGE SHORT NHL09_NO.004D44A7
    004D4497 .C74490 04 A0000>MOV DWORD PTR DS:[EAX+EDX*4+4],0A0
    004D449F .8B10 MOV EDX,DWORD PTR DS:[EAX]
    004D44A1 .894C90 7C MOV DWORD PTR DS:[EAX+EDX*4+7C],ECX
    004D44A5 .FF00 INC DWORD PTR DS:[EAX]
    004D44A7 >56 PUSH ESI
    004D44A8 .8B7424 48 MOV ESI,DWORD PTR SS:[ESP+48]
    004D44AC .85F6 TEST ESI,ESI
    004D44AE .0F84 C2000000 JE NHL09_NO.004D4576
    004D44B4 .33C0 XOR EAX,EAX
    004D44B6 .8BFF MOV EDI,EDI ; ntdll.7C910228
    004D44B8 >894484 04 MOV DWORD PTR SS:[ESP+EAX*4+4],EAX
    004D44BC .40 INC EAX
    004D44BD .83F8 0F CMP EAX,0F
    004D44C0 .7C F6 JL SHORT NHL09_NO.004D44B8
    004D44C2 .52 PUSH EDX ; ntdll.KiFastSystemCallRet
    004D44C3 .9C PUSHFD
    004D44C4 .8B15 A1114C00 MOV EDX,DWORD PTR DS:[4C11A1]
    004D44CA .3315 B0834B01 XOR EDX,DWORD PTR DS:[14B83B0]
    004D44D0 .9D POPFD
    004D44D1 .871424 XCHG DWORD PTR SS:[ESP],EDX ; ntdll.KiFastSystemCallRet
    004D44D4 .8BCE MOV ECX,ESI
    004D44D6 .68 ED444D00 PUSH NHL09_NO.004D44ED
    004D44DB .68 B06C4C00 PUSH NHL09_NO.004C6CB0 ; Entry address
    004D44E0 .C3 RETN
    004D44E1 C9 DB C9
    004D44E2 08 DB 08
    004D44E3 30 DB 30 ; CHAR '0'
    004D44E4 D4 DB D4
    004D44E5 1F DB 1F
    004D44E6 31 DB 31 ; CHAR '1'
    004D44E7 .C3 RETN
    004D44E8 11 DB 11
    004D44E9 46 DB 46 ; CHAR 'F'
    004D44EA 72 DB 72 ; CHAR 'r'
    004D44EB 41 DB 41 ; CHAR 'A'
    004D44EC E6 DB E6
    004D44ED .8B46 08 MOV EAX,DWORD PTR DS:[ESI+8]
    004D44F0 .85C0 TEST EAX,EAX
    004D44F2 .74 25 JE SHORT NHL09_NO.004D4519
    004D44F4 .50 PUSH EAX
    004D44F5 .68 0F454D00 PUSH NHL09_NO.004D450F
    004D44FA .E9 E12F2700 JMP NHL09_NO.007474E0
    004D44FF 34 DB 34 ; CHAR '4'
    004D4500 BF DB BF
    004D4501 19 DB 19
    004D4502 28 DB 28 ; CHAR '('
    004D4503 03 DB 03
    004D4504 63 DB 63 ; CHAR 'c'
    004D4505 33 DB 33 ; CHAR '3'
    004D4506 F4 DB F4
    004D4507 84 DB 84
    004D4508 F6 DB F6
    004D4509 68 DB 68 ; CHAR 'h'
    004D450A AF DB AF
    004D450B 6A DB 6A ; CHAR 'j'
    004D450C 38 DB 38 ; CHAR '8'
    004D450D F5 DB F5
    004D450E BC DB BC
    004D450F .83C4 04 ADD ESP,4
    004D4512 .C746 08 0000000>MOV DWORD PTR DS:[ESI+8],0
    004D4519 >68 00010000 PUSH 100
    004D451E .6A 3C PUSH 3C
    004D4520 .87F6 XCHG ESI,ESI
    004D4522 .50 PUSH EAX
    004D4523 .9C PUSHFD
    004D4524 .56 PUSH ESI
    004D4525 .C1E9 00 SHR ECX,0 ; Shift constant out of range 1..31
    004D4528 .B8 B03FE676 MOV EAX,76E63FB0
    004D452D .C1F9 00 SAR ECX,0 ; Shift constant out of range 1..31
    004D4530 .68 244A4B01 PUSH NHL09_NO.014B4A24
    004D4535 .35 A0B74B76 XOR EAX,764BB7A0
    004D453A .FFD0 CALL EAX
    004D453C .9D POPFD
    004D453D .58 POP EAX ; kernel32.7C817077
    004D453E .68 54454D00 PUSH NHL09_NO.004D4554
    004D4543 .E9 582F2700 JMP NHL09_NO.007474A0
    004D4548 C4 DB C4
    004D4549 .0D 08AD82CE OR EAX,CE82AD08
    004D454E .B6 DA MOV DH,0DA
    004D4550 .6BDA BF IMUL EBX,EDX,-41 ; ntdll.KiFastSystemCallRet
    004D4553 .A7 CMPS DWORD PTR DS:[ESI],DWORD PTR ES:[ED>
    004D4554 .8B4E 04 MOV ECX,DWORD PTR DS:[ESI+4]
    004D4557 .8946 08 MOV DWORD PTR DS:[ESI+8],EAX
    004D455A .83C4 08 ADD ESP,8
    004D455D .33C0 XOR EAX,EAX
    004D455F .85C9 TEST ECX,ECX
    004D4561 .7E 13 JLE SHORT NHL09_NO.004D4576
    004D4563 .90 NOP
    004D4564 >8B4E 08 MOV ECX,DWORD PTR DS:[ESI+8]
    004D4567 .8B5484 04 MOV EDX,DWORD PTR SS:[ESP+EAX*4+4] ; ntdll.7C910228
    004D456B .891481 MOV DWORD PTR DS:[ECX+EAX*4],EDX ; ntdll.KiFastSystemCallRet
    004D456E .8B4E 04 MOV ECX,DWORD PTR DS:[ESI+4]
    004D4571 .40 INC EAX
    004D4572 .3BC1 CMP EAX,ECX
    004D4574 .7C EE JL SHORT NHL09_NO.004D4564
    004D4576 >5E POP ESI ; kernel32.7C817077
    004D4577 .83C4 3C ADD ESP,3C
    004D457A .C3 RETN

    Со строки 004D4476 по 004D4564 какая-то лажа идет
     
  7. Egorgiy

    Egorgiy New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2004
    Сообщения:
    31
    Адрес:
    Russia
    Должно выглядеть примерно так:

    005AF637 |.C74490 04 55000>MOV DWORD PTR DS:[EAX+EDX*4+4],55
    005AF63F |.8B10 MOV EDX,DWORD PTR DS:[EAX]
    005AF641 |.894C90 7C MOV DWORD PTR DS:[EAX+EDX*4+7C],ECX
    005AF645 |.FF00 INC DWORD PTR DS:[EAX]
    005AF647 |>56 PUSH ESI
    005AF648 |.8B7424 44 MOV ESI,DWORD PTR SS:[ESP+44]
    005AF64C |.85F6 TEST ESI,ESI
    005AF64E |.74 63 JE SHORT nhl2008d.005AF6B3
    005AF650 |.33C0 XOR EAX,EAX
    005AF652 |>894484 04 /MOV DWORD PTR SS:[ESP+EAX*4+4],EAX
    005AF656 |.40 |INC EAX
    005AF657 |.83F8 0E |CMP EAX,0E
    005AF65A |.7C F6 \JL SHORT nhl2008d.005AF652
    005AF65C |.68 5CA38F00 PUSH nhl2008d.008FA35C ; ASCII "DEL"
    005AF661 |.8BCE MOV ECX,ESI
    005AF663 |.E8 D87AFFFF CALL nhl2008d.005A7140
    005AF668 |.8B46 08 MOV EAX,DWORD PTR DS:[ESI+8]
    005AF66B |.85C0 TEST EAX,EAX
    005AF66D |.74 10 JE SHORT nhl2008d.005AF67F
    005AF66F |.50 PUSH EAX ; /Arg1 = 00000000
    005AF670 |.E8 EB9E2100 CALL nhl2008d.007C9560 ; \nhl2008d.007C9560
    005AF675 |.83C4 04 ADD ESP,4
    005AF678 |.C746 08 0000000>MOV DWORD PTR DS:[ESI+8],0
    005AF67F |>68 00010000 PUSH 100 ; /Arg2 = 00000100
    005AF684 |.6A 38 PUSH 38 ; |Arg1 = 00000038
    005AF686 |.C746 04 0E00000>MOV DWORD PTR DS:[ESI+4],0E ; |
    005AF68D |.E8 4E9E2100 CALL nhl2008d.007C94E0 ; \nhl2008d.007C94E0
    005AF692 |.8B4E 04 MOV ECX,DWORD PTR DS:[ESI+4]
    005AF695 |.8946 08 MOV DWORD PTR DS:[ESI+8],EAX
    005AF698 |.83C4 08 ADD ESP,8
    005AF69B |.33C0 XOR EAX,EAX
    005AF69D |.85C9 TEST ECX,ECX
    005AF69F |.7E 12 JLE SHORT nhl2008d.005AF6B3
    005AF6A1 |>8B4E 08 /MOV ECX,DWORD PTR DS:[ESI+8]
    005AF6A4 |.8B5484 04 |MOV EDX,DWORD PTR SS:[ESP+EAX*4+4] ; ntdll.7C910228
    005AF6A8 |.891481 |MOV DWORD PTR DS:[ECX+EAX*4],EDX ; ntdll.KiFastSystemCallRet
    005AF6AB |.8B4E 04 |MOV ECX,DWORD PTR DS:[ESI+4]
    005AF6AE |.40 |INC EAX
    005AF6AF |.3BC1 |CMP EAX,ECX
    005AF6B1 |.7C EE \JL SHORT nhl2008d.005AF6A1
    005AF6B3 |>5E POP ESI ; kernel32.7C817077
    005AF6B4 |.83C4 38 ADD ESP,38
    005AF6B7 \.C3 RETN
     
  8. Egorgiy

    Egorgiy New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2004
    Сообщения:
    31
    Адрес:
    Russia
    Или вот:

    004D42E0 8B DB 8B
    004D42E1 44 DB 44 ; CHAR 'D'
    004D42E2 24 DB 24 ; CHAR '$'
    004D42E3 0C DB 0C
    004D42E4 83 DB 83
    004D42E5 EC DB EC
    004D42E6 3C DB 3C ; CHAR '<'
    004D42E7 85 DB 85
    004D42E8 C0 DB C0
    004D42E9 0F84B801 DD NHL09_NO.01B8840F
    004D42ED 00 DB 00
    004D42EE 00 DB 00
    004D42EF 8B DB 8B
    004D42F0 08 DB 08
    004D42F1 3B DB 3B ; CHAR ';'
    004D42F2 0D DB 0D
    004D42F3 6CCE4B01 DD NHL09_NO.014BCE6C
    004D42F7 0F8DAA01 DD NHL09_NO.01AA8D0F
    004D42FB 00 DB 00
    004D42FC 00C7 ADD BH,AL
    004D42FE 44 DB 44 ; CHAR 'D'
    004D42FF 88045D00 DD NHL09_NO.005D0488
    004D4303 0000 ADD BYTE PTR DS:[EAX],AL
    004D4305 ?8B10 MOV EDX,DWORD PTR DS:[EAX]
    004D4307 ?B9 01000000 MOV ECX,1
    004D430C .894C90 7C MOV DWORD PTR DS:[EAX+EDX*4+7C],ECX
    004D4310 .8B10 MOV EDX,DWORD PTR DS:[EAX]
    004D4312 .42 INC EDX ; ntdll.KiFastSystemCallRet
    004D4313 .83FA 1E CMP EDX,1E
    004D4316 .8910 MOV DWORD PTR DS:[EAX],EDX ; ntdll.KiFastSystemCallRet
    004D4318 .0F8D 89010000 JGE NHL09_NO.004D44A7
    004D431E .C74490 04 51000>MOV DWORD PTR DS:[EAX+EDX*4+4],51



    А должно быть примерно так:

    005AF4C0 /$8B4424 0C MOV EAX,DWORD PTR SS:[ESP+C]
    005AF4C4 |.83EC 38 SUB ESP,38
    005AF4C7 |.85C0 TEST EAX,EAX
    005AF4C9 |.0F84 78010000 JE nhl2008d.005AF647
    005AF4CF |.8B08 MOV ECX,DWORD PTR DS:[EAX]
    005AF4D1 |.83F9 1E CMP ECX,1E
    005AF4D4 |.0F8D 6D010000 JGE nhl2008d.005AF647
    005AF4DA |.C74488 04 5D000>MOV DWORD PTR DS:[EAX+ECX*4+4],5D
    005AF4E2 |.8B10 MOV EDX,DWORD PTR DS:[EAX]
    005AF4E4 |.B9 01000000 MOV ECX,1
    005AF4E9 |.894C90 7C MOV DWORD PTR DS:[EAX+EDX*4+7C],ECX
    005AF4ED |.8B10 MOV EDX,DWORD PTR DS:[EAX]
    005AF4EF |.42 INC EDX ; ntdll.KiFastSystemCallRet
    005AF4F0 |.83FA 1E CMP EDX,1E
    005AF4F3 |.8910 MOV DWORD PTR DS:[EAX],EDX ; ntdll.KiFastSystemCallRet
    005AF4F5 |.0F8D 4C010000 JGE nhl2008d.005AF647
    005AF4FB |.C74490 04 51000>MOV DWORD PTR DS:[EAX+EDX*4+4],51
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Это называется трассировкой, чтобы знать следующую инструкцию, необходимо исполнить текущую.
    А в оле так делается:
    [​IMG]
    [​IMG]
     
  10. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Судя по всему, код самомодифицируется или самораспаковывается. По крайней мере, байт по адресу 004D42E6 (3C) отличается от соответствующего байта в Olly (38). Судя по названию, это dll от хоккейной игрушки, игры любят подобные штучки -- распаковка и прочее. Чтобы получить настоящий листинг надо либо написать распаковщик, либо следить за исполняемым кодом в Olly, как сказал Clerk.
     
  11. reversecode

    reversecode Guest

    Публикаций:
    0
    зы
    наблюдал подобные вещи в висте в ядре
    так что думаю мелкософт скоро таким загадит все свои поделия
     
  12. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Egorgiy
    Вы бы привели что-ли значения регистров EAX, EDX, ECX в этом месте:
    Код (Text):
    1. 004D4462   .C74490 04 55000>MOV DWORD PTR DS:[EAX+EDX*4+4],55
    2. 004D446A   .8B10            MOV EDX,DWORD PTR DS:[EAX]
    3. 004D446C   .894C90 7C       MOV DWORD PTR DS:[EAX+EDX*4+7C],ECX
     
  13. Egorgiy

    Egorgiy New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2004
    Сообщения:
    31
    Адрес:
    Russia
    Да, точно SecuRom пакостит...
    Реально ли вообще от него избавиться?