Как я могу найти определенную часть программы в шестнадцатеричном дампе? - PullRequest
2 голосов
/ 09 октября 2019

Если я смотрю на раздел кода сборки, разобранного в PE Explorer, как мне найти этот раздел программы в шестнадцатеричном дампе в HxD? Мне нужно изменить поток программы.

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

Я разобрал .exe с PE Explorer. Я использовал HxD для просмотра шестнадцатеричного дампа. Я полагаю, что с помощью PE Explorer определили раздел программы, который выполняет проверку внешнего монитора среди прочего и либо выдает ошибку, либо выполняет программу. Мне нужно обойти проверку внешнего монитора.

Я пытаюсь откатить прошивку на док-станции Dell K10A. Проблема в том, что прошивка ожидает подключения внешнего монитора к док-станции. Однако порты внешнего монитора не работают в этой док-станции. Это обычная проблема с этими доками, напрямую связанная с обновлением прошивки Dell, которое блокирует док-станцию.

// 00403B6E  CCCC                           Align   4
// 00403B70                           SUB_L00403B70:
// 00403B70  55                             push    ebp
// 00403B71  8BEC                           mov ebp,esp
// 00403B73  6AFF                           push    FFFFFFFFh
// 00403B75  68F81B5500                     push    L00551BF8
// 00403B7A  64A100000000                   mov eax,fs:[00000000h]
// 00403B80  50                             push    eax
// 00403B81  83EC14                         sub esp,00000014h
// 00403B84  A1509F5A00                     mov eax,[L005A9F50]
// 00403B89  33C5                           xor eax,ebp
// 00403B8B  8945F0                         mov [ebp-10h],eax
// 00403B8E  56                             push    esi
// 00403B8F  57                             push    edi
// 00403B90  50                             push    eax
// 00403B91  8D45F4                         lea eax,[ebp-0Ch]
// 00403B94  64A300000000                   mov fs:[00000000h],eax
// 00403B9A  8BF9                           mov edi,ecx
// 00403B9C  E84C3D0000                     call    SUB_L004078ED
// 00403BA1  33D2                           xor edx,edx
// 00403BA3  8BC8                           mov ecx,eax
// 00403BA5  85C9                           test    ecx,ecx
// 00403BA7  0F95C2                         setnz   dl
// 00403BAA  85D2                           test    edx,edx
// 00403BAC  750A                           jnz L00403BB8
// 00403BAE  6805400080                     push    80004005h
// 00403BB3  E818DCFFFF                     call    SUB_L004017D0
// 00403BB8                           L00403BB8:
// 00403BB8  8B01                           mov eax,[ecx]
// 00403BBA  FF500C                         call    [eax+0Ch]
// 00403BBD  83C010                         add eax,00000010h
// 00403BC0  8945E0                         mov [ebp-20h],eax
// 00403BC3  8D45E4                         lea eax,[ebp-1Ch]
// 00403BC6  50                             push    eax
// 00403BC7  C745FC00000000                 mov dword ptr [ebp-04h],00000000h
// 00403BCE  FF1544325500                   call    [KERNEL32.dll!GetSystemPowerStatus]
// 00403BD4  85C0                           test    eax,eax
// 00403BD6  7511                           jnz L00403BE9
// 00403BD8  6A3C                           push    0000003Ch
// 00403BDA  6878605800                     push    SWC00586078_Error__Unable_to_read_system_pow
// 00403BDF  8D4DE0                         lea ecx,[ebp-20h]
// 00403BE2  E819070000                     call    SUB_L00404300
// 00403BE7  EB3C                           jmp L00403C25
// 00403BE9                           L00403BE9:
// 00403BE9  F645E401                       test    byte ptr [ebp-1Ch],01h
// 00403BED  7514                           jnz L00403C03
// 00403BEF  68DF000000                     push    000000DFh
// 00403BF4  68F8605800                     push    SWC005860F8_Error___Power_not_detected_on_th
// 00403BF9  8D4DE0                         lea ecx,[ebp-20h]
// 00403BFC  E8FF060000                     call    SUB_L00404300
// 00403C01  EB22                           jmp L00403C25
// 00403C03                           L00403C03:
// 00403C03  E8F8FAFFFF                     call    SUB_L00403700
// 00403C08  85C0                           test    eax,eax
// 00403C0A  7433                           jz  L00403C3F
// 00403C0C  8D4DE0                         lea ecx,[ebp-20h]
// 00403C0F  83F812                         cmp eax,00000012h
// 00403C12  7507                           jnz L00403C1B
// 00403C14  68B8625800                     push    SWC005862B8_Error__Tablet_display_is_not_set
// 00403C19  EB05                           jmp L00403C20
// 00403C1B                           L00403C1B:
// 00403C1B  68E8635800                     push    SWC005863E8_Error__Tablet_cannot_detect_exte
// 00403C20                           L00403C20:
// 00403C20  E8AB030000                     call    SUB_L00403FD0
// 00403C25                           L00403C25:
// 00403C25  8B75E0                         mov esi,[ebp-20h]
// 00403C28  56                             push    esi
// 00403C29  8D8FD4060000                   lea ecx,[edi+000006D4h]
// 00403C2F  E820F00100                     call    SUB_L00422C54
// 00403C34  8BCE                           mov ecx,esi
// 00403C36  E8B5DAFFFF                     call    SUB_L004016F0
// 00403C3B  33FF                           xor edi,edi
// 00403C3D  EB35                           jmp L00403C74
// 00403C3F                           L00403C3F:
// 00403C3F  688C5A5800                     push    L00585A8C
// 00403C44  8D8FD4060000                   lea ecx,[edi+000006D4h]
// 00403C4A  E805F00100                     call    SUB_L00422C54
// 00403C4F  6A5A                           push    0000005Ah
// 00403C51  68F8655800                     push    SWC005865F8_AC__Present__Built_in_Display__P
// 00403C56  8D4DE0                         lea ecx,[ebp-20h]
// 00403C59  E8A2060000                     call    SUB_L00404300
// 00403C5E  8B75E0                         mov esi,[ebp-20h]
// 00403C61  8BCE                           mov ecx,esi
// 00403C63  E888DAFFFF                     call    SUB_L004016F0
// 00403C68  C6870005000001                 mov byte ptr [edi+00000500h],01h
// 00403C6F  BF01000000                     mov edi,00000001h
// 00403C74                           L00403C74:
// 00403C74  83C6F0                         add esi,FFFFFFF0h
// 00403C77  C745FCFFFFFFFF                 mov dword ptr [ebp-04h],FFFFFFFFh
// 00403C7E  8D460C                         lea eax,[esi+0Ch]
// 00403C81  83C9FF                         or  ecx,FFFFFFFFh
// 00403C84  F0                             lock
// 00403C85  0FC108                         xadd    [eax],ecx
// 00403C88  49                             dec ecx
// 00403C89  85C9                           test    ecx,ecx
// 00403C8B  7F08                           jg  L00403C95
// 00403C8D  8B0E                           mov ecx,[esi]
// 00403C8F  56                             push    esi
// 00403C90  8B11                           mov edx,[ecx]
// 00403C92  FF5204                         call    [edx+04h]
// 00403C95                           L00403C95:
// 00403C95  8BC7                           mov eax,edi
// 00403C97  8B4DF4                         mov ecx,[ebp-0Ch]
// 00403C9A  64890D00000000                 mov fs:[00000000h],ecx
// 00403CA1  59                             pop ecx
// 00403CA2  5F                             pop edi
// 00403CA3  5E                             pop esi
// 00403CA4  8B4DF0                         mov ecx,[ebp-10h]
// 00403CA7  33CD                           xor ecx,ebp
// 00403CA9  E80A5F1200                     call    SUB_L00529BB8
// 00403CAE  8BE5                           mov esp,ebp
// 00403CB0  5D                             pop ebp
// 00403CB1  C3                             retn

Я нашел соответствующую часть сборки в шестнадцатеричном дампе. Я изменил 75 07 на 75 33, чтобы попытаться заставить программу пропустить ошибку и продолжить работу ниже этой точки. Это была моя мысль в любом случае. .Exe не запустится сейчас. Я собираюсь считать это ответом, потому что Шут сказал мне, как найти соответствующий раздел кода сборки в шестнадцатеричном дампе.

// 00403C0A  7433                           jz  L00403C3F
// 00403C0C  8D4DE0                         lea ecx,[ebp-20h]
// 00403C0F  83F812                         cmp eax,00000012h
// 00403C12  7507                           jnz L00403C1B
//00 EB 22 E8 F8 FA FF FF 85 C0 74 33 8D 4D E0 83 
//F8 12 75 07 68 B8 62 58 00 EB 05 68 E8 63 58 00

Хорошо. Новая разработка. Я вернул все обратно в нормальное состояние, затем обновил с 74 33 до 75 33. Похоже, что программа пропускает проверку монитора, но зависает при другой проверке. Я думаю, что это прогресс, хотя.

Я изменил один или два более 74-х до 75-х или наоборот. Обновление запустилось и заявило, что оно успешно завершено, но док-станция по-прежнему заблокирована.

...