Beispiel #1
0
void fps_increase_init(void)
{
    ///////////////////////////////////////////////////////////////////////////////////////////////
    // sdl_timer_cb: 6A 00 6A 02 8D 44 24 18
    ///////////////////////////////////////////////////////////////////////////////////////////////
    unsigned char mem_sdl_timer_cb[] = {
        0x6A, 0x00,             // PUSH 0
        0x6A, 0x02,             // PUSH 2
        0x8D, 0x44, 0x24, 0x18  // LEA EAX, [ESP + 18]
    };
    int off_sdl_timer_cb = -0xAC;
    
    HOOK_NEEDLE_FAIL_MSG(NULL, sdl_timer_cb);
}
Beispiel #2
0
void stack_split_init(void)
{
    ///////////////////////////////////////////////////////////////////////////////////////////////
    // hero_select_stack: 8B 01 75 44
    ///////////////////////////////////////////////////////////////////////////////////////////////
    unsigned char mem_hero_select_stack[] = {
        0x8B, 0x01,   // MOV EAX, DWORD PTR DS : [ECX]
        0x75, 0x44 }; // JNE SHORT <+0x44>
    int off_hero_select_stack = -0x21;
    ///////////////////////////////////////////////////////////////////////////////////////////////
    // town_select_stack: 83 F8 09 0F 87 EE 03 00 00
    ///////////////////////////////////////////////////////////////////////////////////////////////
    unsigned char mem_town_select_stack[] = { 
        0x83, 0xF8, 0x09,                     // CMP EAX, 9
        0x0F, 0x87, 0xEE, 0x03, 0x00, 0x00 }; // JA <+0x3F4>
    int off_town_select_stack = -0x0F;
    ///////////////////////////////////////////////////////////////////////////////////////////////
    // swap_select_stack: 8A 84 07 88 C8 00 00 3A 84 1F 88 C8 00 00 0F 94 C0
    ///////////////////////////////////////////////////////////////////////////////////////////////
    unsigned char mem_swap_select_stack[] = {
        0x8A, 0x84, 0x07, 0x88, 0xC8, 0x00, 0x00, // MOV AL, [EDI + EAX + 0x0C888]
        0x3A, 0x84, 0x1F, 0x88, 0xC8, 0x00, 0x00, // CMP AL, [EDI + EBX + 0x0C888]
        0x0F, 0x94, 0xC0 };                       // SETZ AL
    int off_swap_select_stack = -0x33;
    ///////////////////////////////////////////////////////////////////////////////////////////////
    // move_stack: 89 04 99 8B 44 B7 1C
    ///////////////////////////////////////////////////////////////////////////////////////////////
    unsigned char mem_move_stack[] = {
        0x89, 0x04, 0x99,      // MOV DWORD PTR DS : [EBX * 4 + ECX], EAX
        0x8B, 0x44, 0xB7, 0x1C // MOV EAX, [EDI + ESI * 4 + 0x1C]
    };
    int off_move_stack = -0x19;
    ///////////////////////////////////////////////////////////////////////////////////////////////
    // swap_move_stack: 8B 41 50 81 C6 8D 00, 00, 00
    ///////////////////////////////////////////////////////////////////////////////////////////////
    unsigned char mem_swap_move_stack[] = {
        0x8B, 0x41, 0x50,                  // MOV EAX, [ECX+0x50]
        0x81, 0xC6, 0x8D, 0x00, 0x00, 0x00 // ADD ESI, 0x8D
    };
    int off_swap_move_stack = -0x26;
    ///////////////////////////////////////////////////////////////////////////////////////////////
    // retn_hero_select_stack: 81 C1 8D 00 00 00 51 52
    // NOTE! This is a retn address, not a function, and should be at this mov (addresses dynamic ofc):
    //    mov     dword ptr ds:12CBDF0h, 0FFFFFFFFh
    //    call    sub_4D8DC0
    //    jmp     loc_4DCEAF
    ///////////////////////////////////////////////////////////////////////////////////////////////
    unsigned char mem_retn_hero_select_stack[] = {
        0x81, 0xC1, 0x8D, 0x00, 0x00, 0x00, // ADD ECX, 0x8D
        0x51,                               // PUSH ECX
        0x52                                // PUSH EDX
    };
    int off_retn_hero_select_stack = 0x0D;
    ///////////////////////////////////////////////////////////////////////////////////////////////

    HOOK_NEEDLE_FAIL_MSG(NULL, hero_select_stack);
    HOOK_NEEDLE_FAIL_MSG(NULL, town_select_stack);
    HOOK_NEEDLE_FAIL_MSG(NULL, swap_select_stack);
    HOOK_NEEDLE_FAIL_MSG(NULL, move_stack);
    HOOK_NEEDLE_FAIL_MSG(NULL, swap_move_stack);

    retn_hero_select_stack = hook_find_by_needle(NULL, mem_retn_hero_select_stack, sizeof(mem_retn_hero_select_stack)) + off_retn_hero_select_stack;
}