单进程机器码hook_如何通过API HOOK修改机器码

本文详细介绍了如何通过API Hook技术来修改单进程的机器码,结合具体的汇编代码示例,展示了创建文件、设备I/O控制等关键步骤,并探讨了与读取注册表的不同之处。
摘要由CSDN通过智能技术生成

0049070E   .  83C4 0C       add esp,0xC

00490711   .  8D8C24 900000>lea ecx,dword ptr ss:[esp+0x90]

00490718   .  33F6          xor esi,esi

0049071A   .  53            push ebx                                 ; /hTemplateFile

0049071B   .  53            push ebx                                 ; |Attributes

0049071C   .  6A 03         push 0x3                                 ; |Mode = OPEN_EXISTING

0049071E   .  53            push ebx                                 ; |pSecurity

0049071F   .  6A 03         push 0x3                                 ; |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE

00490721   .  68 000000C0   push 0xC0000000                          ; |Access = GENERIC_READ|GENERIC_WRITE

00490726   .  51            push ecx                                 ; |FileName

00490727   .  FF15 14D24C00 call dword ptr ds:[; \CreateFileW

0049072D   .  83F8 FF       cmp eax,-0x1

00490730   .  894424 08     mov dword ptr ss:[esp+0x8],eax

00490734   .  75 0B         jnz XPureEngl.00490741

00490736   .  5E            pop esi

00490737   .  33C0          xor eax,eax

00490739   .  5B            pop ebx

0049073A   .  81C4 DC060000 add esp,0x6DC

00490740   .  C3            retn

00490741   >  55            push ebp

00490742   .  57            push edi

00490743   .  8D5424 14     lea edx,dword ptr ss:[esp+0x14]

00490747   .  8B2D 24D14C00 mov ebp,dword ptr ds:[;  KERNEL32.DeviceIoControl

0049074D   .  53            push ebx                                 ; /pOverlapped

0049074E   .  52            push edx                                 ; |pBytesReturned

0049074F   .  8D8C24 880000>lea ecx,dword ptr ss:[esp+0x88]          ; |

00490756   .  6A 18         push 0x18                                ; |OutBufferSize = 18 (24.)

00490758   .  51            push ecx                                 ; |OutBuffer

00490759   .  53            push ebx                                 ; |InBufferSize

0049075A   .  53            push ebx                                 ; |InBuffer

0049075B   .  68 80400700   push 0x74080                             ; |IoControlCode = SMART_GET_VERSION

00490760   .  50            push eax                                 ; |hDevice

00490761   .  FFD5          call ebp                                 ; \DeviceIoControl

00490763   .  85C0          test eax,eax

00490765   .  0F84 60020000 je PureEngl.004909CB

0049076B   .  8A9424 830000>mov dl,byte ptr ss:[esp+0x83]

00490772   .  3AD3          cmp dl,bl

00490774   .  0F86 51020000 jbe PureEngl.004909CB

0049077A   .  B9 09000000   mov ecx,0x9

0049077F   .  33C0          xor eax,eax

00490781   .  8D7C24 30     lea edi,dword ptr ss:[esp+0x30]

00490785   .  80E2 10       and dl,0x10

00490788   .  F3:AB         rep stos dword ptr es:[edi]

0049078A   .  B9 84000000   mov ecx,0x84

0049078F   .  8DBC24 D80000>lea edi,dword ptr ss:[esp+0xD8]

00490796   .  F3:AB         rep stos dword ptr es:[edi]

00490798   .  F6DA          neg dl

0049079A   .  1AD2          sbb dl,dl

0049079C   .  53            push ebx                                 ; /pOverlapped

0049079D   .  80E2 B5       and dl,0xB5                              ; |

004907A0   .  8D4C24 34     lea ecx,dword ptr ss:[esp+0x34]          ; |

004907A4   .  66:AB         stos word ptr es:[edi]                   ; |

004907A6   .  80C2 EC       add dl,0xEC                              ; |

004907A9   .  885C24 38     mov byte ptr ss:[esp+0x38],bl            ; |

004907AD   .  885424 3E     mov byte ptr ss:[esp+0x3E],dl            ; |

004907B1   .  8D5424 18     lea edx,dword ptr ss:[esp+0x18]          ; |

004907B5   .  AA            stos byte ptr es:[edi]                   ; |

004907B6   .  52            push edx                                 ; |pBytesReturned

004907B7   .  8B5424 18     mov edx,dword ptr ss:[esp+0x18]          ; |

004907BB   .  8D8424 E00000>lea eax,dword ptr ss:[esp+0xE0]          ; |

004907C2   .  68 13020000   push 0x213                               ; |OutBufferSize = 213 (531.)

004907C7   .  50            push eax                                 ; |OutBuffer

004907C8   .  6A 23         push 0x23                                ; |InBufferSize = 23 (35.)

004907CA   .  51            push ecx                                 ; |InBuffer

004907CB   .  68 88C00700   push 0x7C088                             ; |IoControlCode = SMART_RCV_DRIVE_DATA

004907D0   .  52            push edx                                 ; |hDevice

004907D1   .  C64424 55 01  mov byte ptr ss:[esp+0x55],0x1           ; |

004907D6   .  C64424 56 01  mov byte ptr ss:[esp+0x56],0x1           ; |

004907DB   .  885C24 57     mov byte ptr ss:[esp+0x57],bl            ; |

004907DF   .  885C24 58     mov byte ptr ss:[esp+0x58],bl            ; |

004907E3   .  C64424 59 A0  mov byte ptr ss:[esp+0x59],0xA0          ; |

004907E8   .  885C24 5C     mov byte ptr ss:[esp+0x5C],bl            ; |

004907EC   .  C74424 50 000>mov dword ptr ss:[esp+0x50],0x200        ; |

004907F4   .  FFD5          call ebp                                 ; \DeviceIoControl

004907F6   .  85C0          test eax,eax

004907F8   .  0F84 CD010000 je PureEngl.004909CB

004907FE   .  8D8C24 EC0200>lea ecx,dword ptr ss:[esp+0x2EC]

00490805   .  8D8424 E80000>lea eax,dword ptr ss:[esp+0xE8]

0049080C   .  BA 00010000   mov edx,0x100

00490811   >  33F6          xor esi,esi

00490813   .  83C1 04       add ecx,0x4

00490816   .  66:8B30       mov si,word ptr ds:[eax]

00490819   .  83C0 02       add eax,0x2

0049081C   .  8971 FC       mov dword ptr ds:[ecx-0x4],esi

0049081F   .  4A            dec edx

00490820   .^ 75 EF         jnz XPureEngl.00490811

00490822   .  33C0          xor eax,eax

00490824   .  8D8C24 140300>lea ecx,dword ptr ss:[esp+0x314]

0049082B   .  894424 18     mov dword ptr ss:[esp+0x18],eax

0049082F   .  BE 0A000000   mov esi,0xA

00490834   .  894424 1C     mov dword ptr ss:[esp+0x1C],eax

00490838   .  894424 20     mov dword ptr ss:[esp+0x20],eax

0049083C   .  894424 24     mov dword ptr ss:[esp+0x24],eax

00490840   .  894424 28     mov dword ptr ss:[esp+0x28],eax

00490844   .  884424 2C     mov byte ptr ss:[esp+0x2C],al

00490848   >  8B11          mov edx,dword ptr ds:[ecx]

0049084A   .  83C1 04       add ecx,0x4

0049084D   .  C1EA 08       shr edx,0x8

00490850   .  8890 40215000 mov byte ptr ds:[eax+0x502140],dl

00490856   .  8A51 FC       mov dl,byte ptr ds:[ecx-0x4]

00490859   .  40            inc eax

0049085A   .  8890 40215000 mov byte ptr ds:[eax+0x502140],dl

00490860   .  40            inc eax

00490861   .  4E            dec esi

00490862   .^ 75 E4         jnz XPureEngl.00490848

00490864   .  8D48 FF       lea ecx,dword ptr ds:[eax-0x1]

抱歉

代码好多的

我认为VC取机器码都是 差不多

这个程序没有读取注册表上的那几个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值