#include "Kincaid.h" namespace { bool _1() { // .text:0000000140230D80 mov rsi, rax // .text:0000000140230D83 mov edx, 1 // .text:0000000140230D88 mov rcx, rdi // .text:0000000140230D8B call sub_1402B35B0 // .text:0000000140230D90 lea ebx, [rax-1] // .text:0000000140230D93 mov edx, 2 // .text:0000000140230D98 mov rcx, rdi // .text:0000000140230D9B call sub_1402B35B0 BYTE b1[] = { 0x48, 0x8b, 0xf0, 0xba, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcf, 0xe8, XX4, 0x8d, 0x58, 0xff, 0xba, 0x02, 0x00, 0x00, 0x00, 0x48, 0x8b, 0xcf, 0xe8, XX4}; auto addr = MemDbg::findBytes(b1, sizeof(b1), processStartAddress, processStopAddress); if (addr == 0) return false; HookParam hp; hp.address = addr; hp.type = USING_STRING | CODEC_UTF8; hp.offset = get_reg(regs::rax); hp.text_fun = [](hook_stack *stack, HookParam *hp, uintptr_t *data, uintptr_t *split, size_t *len) { *data = stack->rax; if (stack->retaddr == (DWORD)-1) *len = strlen((char *)*data); }; return NewHook(hp, "Kincaid"); } } bool Kincaid::attach_function() { return _1(); }