如何在十六进制转储中找到程序的特定部分?

问题描述 投票:1回答:1

如果我正在查看在PE Explorer中反汇编的一部分汇编代码,如何在HxD内的十六进制转储中找到程序的那一部分?我需要修改程序流程。

我可能未使用适当的软件。我可以发布任何其他必要的信息来帮助我继续。

我已经用PE Explorer分解了.exe。我已使用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现在不会启动。我将认为这是答案,因为Jester确实告诉我如何在十六进制转储中找到相应的汇编代码部分。

// 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更新为7533。该程序似乎跳过了监视器检查,但是正挂在另一个检查上。我认为这是进步。

我将一个或两个以上的74修改为75,反之亦然。更新已运行并声称已成功完成,但扩展坞仍处于阻塞状态。

assembly exe hexdump i386 hex-editors
1个回答
0
投票

关于您的问题:

我需要修改程序流程

我的经验是通过像您要更改的条件一样更改路径来修补二进制文件

指令的示例是jzjne

© www.soinside.com 2019 - 2024. All rights reserved.