找回密码
 立即注册
GTA5修改器.风灵月影生化危机7修改器.风灵月影三国志13修改器.风灵月影讨鬼传2修改器.风灵月影猎天使魔女修改器.风灵月影
刺客信条修改器虐杀原形2修改器.风灵月影看门狗2修改器.风灵月影鬼泣5修改器.风灵月影上古卷轴5修改器
查看: 45|回复: 0

VS2010天龙八部工作室内部商业辅助(自动打怪做任务调用lua反汇编)

[复制链接]

2604

主题

2627

帖子

8001

积分

论坛元老

Rank: 8Rank: 8

积分
8001
发表于 2017-7-2 21:21:20 | 显示全部楼层 |阅读模式
01.jpg
本帖源码编程工具VS2010 , 代码具有一定的参考性,代码书写也非常专业,源码由控制台和DLL所构成,是一款典型的工作室内部商业源码。其中的明文封包CALL和lua脚本的实现是本源码的重中之重,核心中的核心 。严禁利用本站提供的技术开发游戏辅助,否则后果自负。
#define  LoginGameBase 0x95E470   // 登陆游戏基址
#define  CaptchaBase 0x95D4B0 // 验证码内存地址
#define  LoginSecretsecurityBase 0x130FF48 // 登陆密码安全基址
#define  RoleBase 0x9A2228 // 角色基址
#define  CurrentMapNameBase 0x130FF6C //当前地图名基址
#define  JudgeMonsterBase  0x130FF58 // 判断是否是怪物的基址
#define  AttackMonsterCALL 0x446900 //攻击CALL
#define  GameLuaCALL  0x83441C // lua脚本调用汇编CALL
#define  GameLuaCALLBase 0x1311C40 // lua脚本调用汇编CALL 参数基址
#define  PassMapStateBase 0x130FECC #define  WalkCALL 0x4461F0// 走路CALL
#define  WhetherDeathBase 0x130FF74 // 是否失望
#define  OpenNPCCALL 0x4450E0 //打开NPC对话框 函数CALL
#define  ClickNpcCALL 0x459550 //点击NPC对话框 函数CALL
#define  ClickNpcCALLBase 0x130396C// 函数CALL 参数基址
#define  CrossMapWalkBase 0x9A21D0
#define  SendCALL 0x630460 // 明文封包CALL
#define  SendCALLBase 0x130FC3C //明文封包ACLL 参数基址
#define  BackpackBase 0x1303994// 背包遍历基址
#define  BabySinglebrushCALL 0x4472D0
#define  MiningCALL 0x445030 //挖矿CALL
#define  MiningPickupBase 0x1303994// 挖矿捡起参数基址
#define  ShopBase 0x130E08C#define  PickupBase 0x1303950
#define  PickopCALL 0x446AC0//捡物CALL
#define  CompleteTaskCALL 0x458220 //完成任务CALL
#define  AcceptedTaskCALL 0x457e20//接受任务call
// 调用天龙八部游戏lua脚本汇编CALL   ,参数是lua字符串 。。。。
BOOL GameData::LuaCall(char* Luastring)
{        
        __try
        {
                _asm
                {
                        pushad
                        mov ecx,GameLuaCALLBase
                        mov ecx,[ecx]
                        mov edx,[ecx]
                        add edx,0x3c
                        mov edx,[edx]
                        call edx
                        mov eax,[eax]
                        mov esi,Luastring
                        push esi
                        push eax
                        mov ecx,GameLuaCALL
                        mov ecx,[ecx]
                        call ecx
                        add esp,0x8
                        popad
                }
        }__except(1)
        {
                return FALSE;
        }
        return TRUE;
}

//获取人物和怪物的距离
int GameData::GetDistance(int RoleX, int ObjectX, int RoleY, int ObjectY)
{
        float aX,aX1,aY,aY1,Distance;
        aX=(float)RoleX;
        aX1=(float)ObjectX;
        aY=(float)RoleY;
        aY1=(float)ObjectY;
        Distance=(aX-aX1)*(aX-aX1)+(aY-aY1)*(aY-aY1);
        Distance=sqrt(Distance);
        return (int)Distance;
}
// 走路CALL  参数是目的地 坐标
void GameData::WalkCall(int X , int Y)
{
        float ChangeX=NULL,ChangeY=NULL;
        ChangeX=(float)X;
        ChangeY=(float)Y;
        _asm
        {
                pushad
                push 0
                push 1
                push ChangeY
                push ChangeX
                mov ecx,gameroleinfo.GameParameter
                mov ebx,WalkCALL
                call ebx
                popad
        }
}

//攻击怪物CALL
void GameData::AttackMonsterCall(int SkillID, int MonsterID)
{
        __try
        {
                _asm
                {
                        pushad
                                push 0xbf800000
                                push 0xbf800000
                                push 0xbf800000
                                push MonsterID
                                push -1
                                push SkillID
                                mov ecx,gameroleinfo.GameParameter
                                mov eax,AttackMonsterCALL
                                call eax
                                popad
                }

        }__except(1)
        {

        }

}

// 打开NPC对话框
void GameData::OpenNpc(DWORD NpcID)
{
        _asm
        {
                pushad
                push NpcID
                mov ecx,gameroleinfo.GameParameter
                mov eax,OpenNPCCALL
                call eax
                popad
        }
}


//完成任务
void GameData::CompleteTask(void)
{
        _asm
        {
                pushad
                mov ecx,ClickNpcCALLBase
                mov ecx,[ecx]
                push 0
                mov eax,CompleteTaskCALL
                call eax
                popad
        }
}

//接受人物
void GameData::AcceptedTask(void)
{
        _asm
        {
                pushad
                mov ecx,ClickNpcCALLBase
                mov ecx,[ecx]
                mov eax,AcceptedTaskCALL
                call eax
                popad
        }
}
//捡起金币
void GameData::PickupGoods(DWORD GoodsID)
{
        _asm
        {
                pushad
                mov ecx,PickupBase
                mov ecx,[ecx]
                mov [ecx+0x138],0x1
                push GoodsID
                mov ecx,gameroleinfo.GameParameter
                mov eax,PickopCALL
                call eax
                popad
        }
}
//通过模块 和 特征码来搜索 代码地址
DWORD GameData::FindMemory(char* markCode, DWORD m_Dword,LPCTSTR ModuleName)
{
        if (strlen(markCode) % 2 != 0) return 0;  
        //特征码长度  
        int len = strlen(markCode) / 2;  //获取代码的字节数

        //将特征码转换成byte型 保存在m_code 中
        BYTE *m_code = new BYTE[len];  
        for (int i = 0; i < len; i++)
        {
                //定义可容纳单个字符的一种基本数据类型。
                char c[] = {markCode[i*2], markCode[i*2+1], '\0'};
                //将参数nptr字符串根据参数base来转换成长整型数
                m_code= (BYTE)::strtol(c, NULL, 16);  

        }
      
  //起始地址  
        const DWORD beginAddr =(DWORD) GetModuleHandle(ModuleName);
        //结束地址  
        const DWORD endAddr = 0x7FFFFFF;
        //每次读取游戏内存数目的大小
        const DWORD pageSize = 4096;


        /////////////////////////查找特征码/////////////////////
        //每页读取4096个字节
        BYTE *page = new BYTE[pageSize];
        DWORD tmpAddr = beginAddr;        
        //定义和特征码一样长度的标识
        int compare_one=0;
        while (tmpAddr <= endAddr )
        {
                ::ReadProcessMemory(GetCurrentProcess(), (LPCVOID)tmpAddr, page, pageSize, 0); //读取0x400000的内存数据,保存在page,长度为pageSize        
                for (int i = 0; i < pageSize; i++)
                {
                        if(m_code[0]==page)//有一个字节与特征码的第一个字节相同,则搜索
                        {
                                for(int j=0;j<len-1;j++)
                                {
                                        if(m_code[j+1]==page[i+j+1])
                                        {
                                                compare_one++;
                                        }
                                        else
                                        {

                                                compare_one=0;
                                                break;

                                        }
                                }
                                if((compare_one+1)==len)
                                {
                                        m_Dword=tmpAddr+i;
                                        return m_Dword;
                                }
                        }
                }
                tmpAddr=tmpAddr+pageSize-len;
        }
        return 0;
}

天龙八部控制台 dll源码.rar (851.96 KB, 下载次数: 0, 售价: 500 金钱)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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