Если я смотрю на раздел кода сборки, разобранного в 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-х или наоборот. Обновление запустилось и заявило, что оно успешно завершено, но док-станция по-прежнему заблокирована.