找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 343|回复: 2

昭姐每天一练- ByPASSHSCRC2

[复制链接]

30

主题

1

回帖

0

积分

版主

积分
0
发表于 2013-6-9 12:03:13 | 显示全部楼层 |阅读模式

// _CRC.cpp: implementation of the _CRC class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Jmp_hook.h"


/*#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif*/
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

DWORD dwHSDllAddress = 0;


void *g_pEXEMirror = NULL;

DWORD dwExeMirrorStart;
DWORD dwExeMirrorEnd;
DWORD dwExeMirrorSize;




DWORD HookAddr_Hs_Crc;
CHookApi_Jmp hook_Hs_Crc;
void __declspec(naked) _stdcall HookFunc_Hs_Crc()
{


    hook_Hs_Crc.StopHook();


    while (TRUE)
    {
        Sleep(3000);
        if (::FindWindow(TEXT("opKart Client"),NULL) == NULL) break;
    }

   
    //exit(0);
}

DWORD HookAddr_Game_Crc;
DWORD HookAddr_Game_Crc_END;
CHookApi_Jmp hook_Game_Crc;
void __declspec(naked) _stdcall HookFunc_Game_Crc()
{
   
    _asm
    {
        
        mov     ecx,0
        add     ecx,edx

        push    ecx
        cmp        ecx,[dwExeMirrorStart]   
        jl        J1
        cmp        ecx,[dwExeMirrorEnd]
        jg        J1
        sub        ecx,[dwExeMirrorStart]
        add        ecx,[g_pEXEMirror]
        add     al, [ecx]
        pop        ecx
        jmp        J2

J1:
        pop        ecx
        add     al, [ecx]
J2:
        push    [HookAddr_Game_Crc]
        add        dword ptr[esp], 0x9
        
        ret        
    }
   
}

LPBYTE pSrcCrcCode;
LPBYTE pDestCrcCode;
LPBYTE pSrcCrc2Code;
LPBYTE pDestCrc2Code;


DWORD HookAddr_Game_Crc2;
CHookApi_Jmp hook_Game_Crc2;
DWORD dwTest;
void __declspec(naked) _stdcall HookFunc_Game_Crc2()
{
   
    _asm
    {
        pushad
    }
    memcpy((LPBYTE)HookAddr_Game_Crc,pSrcCrcCode,6);
    memcpy((LPBYTE)HookAddr_Game_Crc2,pSrcCrc2Code,6);
    _asm
    {
        popad
    }

    _asm
    {
        push    dword ptr [edx]
        pushad
    }
    memcpy((LPBYTE)HookAddr_Game_Crc,pDestCrcCode,6);
    memcpy((LPBYTE)HookAddr_Game_Crc2,pDestCrc2Code,6);
    _asm
    {
        popad

        push    0x00cf9d40
        ret
    }
   
}

void _HookCRCInit()
{
   


    dwExeMirrorStart = 0x00401000;
    dwExeMirrorEnd    = 0x00A50000;

    dwExeMirrorSize = dwExeMirrorEnd - dwExeMirrorStart;


    //HS 检测内存区,改用内存映射
    HANDLE hMapFile = NULL;
   

    hMapFile = CreateFileMapping(
                                 (HANDLE)0xFFFFFFFF,
                                 NULL,
                                 PAGE_EXECUTE_READWRITE,      
                                 0,
                                 dwExeMirrorSize,
                                 TEXT("FILEKART"));

     if (NULL == hMapFile)
     {

         return;
     }

     g_pEXEMirror = MapViewOfFile(  //映射到本进程的地址空间
         hMapFile,
         FILE_MAP_READ|FILE_MAP_WRITE,
         0,
         0,
         0);


    memcpy((BYTE*)g_pEXEMirror, (BYTE*)dwExeMirrorStart, dwExeMirrorSize);


     DWORD hEhsvcModule = NULL;
     hEhsvcModule = (DWORD)GetModuleHandle(TEXT("ehsvc.dll"));



     HookAddr_Hs_Crc = hEhsvcModule + 0x00251e9;//0x0025242;//0x0022162;//0x0022072


     //hook_Hs_Crc = new CHookApi_Jmp;
     //hook_Hs_Crc.Initial(HookAddr_Hs_Crc, (DWORD)HookFunc_Hs_Crc);
     //hook_Hs_Crc.StartHook();
      
      pSrcCrcCode = new BYTE[6];
      pDestCrcCode = new BYTE[6];
      pSrcCrc2Code = new BYTE[6];
      pDestCrc2Code = new BYTE[6];

     HookAddr_Game_Crc = 0x00DD680F;
     //hook_Game_Crc = new CHookApi_Jmp();
     hook_Game_Crc.Initial(HookAddr_Game_Crc,(DWORD)HookFunc_Game_Crc);
     //.......源码多不能挣个发上来不过大体思路还是看得懂的 需要的可以加入我们论坛群号跟我要.... 有C语言版的哦 看起来不乱很清晰
   
    CloseHandle(hMapFile);
   
   

}

void _UnHookCRC()
{
   
   
    DWORD hEhsvcModule = NULL;
    hEhsvcModule = (DWORD)GetModuleHandle(TEXT("ehsvc.dll"));
   
    hook_Hs_Crc.StopHook();

   

    return;
}

3

主题

17

回帖

0

积分

新手上路

积分
0
发表于 2013-6-9 12:33:18 | 显示全部楼层
小昭强烈建议如果你是为了给大家学技术,讲点原理性的东西,最少给点说明嘛,不要惜字如金,毕竟论坛像我一样的新手多,其实我是冲着冲哥来的,我承认虽然没有看过几课,但是但的教程让人明白所以然,你这个丢一段代码(代码还不完整),并且很多是硬编码。。。还不如讲讲原理实在~!

1793

主题

457

回帖

0

积分

管理员

积分
0
发表于 2013-6-9 14:28:59 | 显示全部楼层
楼上说的有道理

只可惜小昭上论坛的时间不多,她现在还在上学期间,能转发这些好文章已经很不错了。

大概她放假或者毕业以后就有时间了吧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 03:24 , Processed in 0.139401 second(s), 20 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表