Прошу совета... С чем может быть связан тот факт, что ни один дизассемблер (IDA, OllyDdg, Wdasm и др.) не верно дизассемблирует код ехе-шника? Исследуемый ехе-шник был про_SecureRom_ин (однако распапован и крякнут). Даже дамп этого лицензионного ехе и тот не верно дизассемблируется.
Кстати только часть кода не верно распознается... Например внутри какой-то процедуры начало и конец нормально распознаются, а в середине могут быть куски не верного кода... (не распознанного)
Может просто ошибка в дебаггерах? У меня недавно был случай с OllyDbg - инструкция FISTTP неверно дисассемблируется.
кхм... обычно говорят "телепатов тут нет". 1) Код не распознается, потому что это не код. Ссылок на него нет, перед ним стоит jmp или ret, и шут его знает, это код или какой-то набор данных? И даже очень может такое быть, что в самом деле набор данных. 2) Секция кода оказалась не совсем стандартная, и осталась "нераспознанной". Однако, где-то обнаружились переходы на какие-то процедуры, в этой нераспознанной секции, и ИДА, выполняя стандартный анализ при загрузке, эти процедуры дизассемблировала. А остальное оставила как есть, а местами могла и в данные превратить. На этот случай там такие кнопочки есть... вверху... на них еще разными цветами разные буковки написаны... чтобы вручную втолковать программе, что это код, или данные. Первоначальный анализ очень редко бывает чистым и предельно понятным. 3) может, он все-таки запакован? Двумя крипторами-пакерами? 4) может быть, это p-код? один-единственный апи-вызов в начале, и далее уже никакого кода, разве что где-нибудь дальше, местами, проскакивает, для обработки ошибок. можно еще столько же вариантов предложить.
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 какая-то лажа идет
Должно выглядеть примерно так: 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
Или вот: 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
Это называется трассировкой, чтобы знать следующую инструкцию, необходимо исполнить текущую. А в оле так делается:
Судя по всему, код самомодифицируется или самораспаковывается. По крайней мере, байт по адресу 004D42E6 (3C) отличается от соответствующего байта в Olly (38). Судя по названию, это dll от хоккейной игрушки, игры любят подобные штучки -- распаковка и прочее. Чтобы получить настоящий листинг надо либо написать распаковщик, либо следить за исполняемым кодом в Olly, как сказал Clerk.
зы наблюдал подобные вещи в висте в ядре так что думаю мелкософт скоро таким загадит все свои поделия
Egorgiy Вы бы привели что-ли значения регистров EAX, EDX, ECX в этом месте: Код (Text): 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