追逐自己的梦想----------辅助制作第三十八课:物品出售的分析和实现

2024-06-13 07:18

本文主要是介绍追逐自己的梦想----------辅助制作第三十八课:物品出售的分析和实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先是找到出售物品的call007A97E7    898D 0AD8FFFF   MOV DWORD PTR SS:[EBP-27F6],ECX
007A97ED    8B0D 8048F300   MOV ECX,DWORD PTR DS:[F34880]
007A97F3    52              PUSH EDX
007A97F4    C785 EED7FFFF 0>MOV DWORD PTR SS:[EBP-2812],2
007A97FE    8985 1ED8FFFF   MOV DWORD PTR SS:[EBP-27E2],EAX
007A9804    8985 FED7FFFF   MOV DWORD PTR SS:[EBP-2802],EAX
007A980A    E8 D102D0FF     CALL Client.004A9AE0                     ; 出售物品的call
007A980F    8BCB            MOV ECX,EBX
007A9811    E8 FA9AFEFF     CALL Client.00793310
007A9816    E9 92060000     JMP Client.007A9EAD
007A981B    A1 9C5BF300     MOV EAX,DWORD PTR DS:[F35B9C]
007A9820    05 3C010000     ADD EAX,13C
007A9825    50              PUSH EAX
007A9826    E8 C5BD1900     CALL Client.009455F0
007A982B    83C4 04         ADD ESP,4
007A982E    8983 1C170000   MOV DWORD PTR DS:[EBX+171C],EAXdd edx查看缓冲区  会找到以下的数据:出售  金创药(小)  1
$ ==>    >00 00 92 00 80 00 02 00 00 00 26 0F 1B 28 65 CA  ..?€....&(e?
$+10     >9A 3B 00 00 00 00 01 00 00 00 00 00 00 00 9B 16  ?...........?
$+20     >00 00 00 00 00 00 CD DD B3 A1 29 67 F0 0B 65 CA  ......洼场)g?e?
$+30     >9A 3B 00 00 00 00 01 00 00 00 00 00 00 00 01 00  ?............
$+40     >00 00 01 00 14 23 00 00 00 00 00 00 00 00 00 00  ...#..........
$+50     >00 00 00 00 00 00 00 00 00 00 00 00 00 9A 00 00  .............?.
$+60     >00 00 00 00 00 00 00 00 5E 9A 00 00 00 00 00 00  ........^?.....
$+70     >00 00 00 00 00 00 00 52 87 C2 00 00 00 00 97 CF  .......R嚶....椣
$+80     >5E 94 CE 53 73 9E 00 00 00 00 00 00 00 00 00 00  ^斘Ss?.........3个
$ ==>    >00 00 92 00 80 00 02 00 00 00 26 0F 1B 28 65 CA  ..?€....&(e?
$+10     >9A 3B 00 00 00 00 03 00 00 00 00 00 00 00 9A 17  ?...........?
$+20     >00 00 00 00 00 00 CD DD B3 A1 29 67 F0 0B 65 CA  ......洼场)g?e?
$+30     >9A 3B 00 00 00 00 03 00 00 00 00 00 00 00 01 00  ?............
$+40     >00 00 01 00 14 23 00 00 00 00 00 00 00 00 00 00  ...#..........
$+50     >00 00 00 00 00 00 00 00 00 00 00 00 00 9A 00 00  .............?.
$+60     >00 00 00 00 00 00 00 00 5E 9A 00 00 00 00 00 00  ........^?.....
$+70     >00 00 00 00 00 00 00 52 87 C2 00 00 00 00 97 CF  .......R嚶....椣
$+80     >5E 94 CE 53 73 9E 00 00 00 00 00 00 00 00 00 00  ^斘Ss?.........出售雪原参 1
$ ==>    >00 00 92 00 80 00 02 00 00 00 26 0F 1B 28 6A CA  ..?€....&(j?
$+10     >9A 3B 00 00 00 00 01 00 00 00 00 00 00 00 B3 16  ?...........?
$+20     >00 00 00 00 00 00 D9 5C 1E CD 2C 67 B0 0B 6A CA  ......賊?g?j?
$+30     >9A 3B 00 00 00 00 01 00 00 00 00 00 00 00 01 01  ?...........
$+40     >00 00 01 00 14 23 00 00 00 00 00 00 00 00 00 00  ...#..........
$+50     >00 00 00 00 00 00 00 00 00 00 00 00 00 9A 00 00  .............?.
$+60     >00 00 00 00 00 00 00 00 5E 9A 00 00 00 00 00 00  ........^?.....
$+70     >00 00 00 00 00 00 00 52 87 C2 00 00 00 00 97 CF  .......R嚶....椣
$+80     >5E 94 CE 53 73 9E 00 00 00 00 00 00 00 00 00 00  ^斘Ss?.........出售 人参 1
$ ==>    >00 00 92 00 80 00 02 00 00 00 26 0F 1B 28 68 CA  ..?€....&(h?
$+10     >9A 3B 00 00 00 00 01 00 00 00 00 00 00 00 43 17  ?...........C
$+20     >00 00 00 00 00 00 1F C0 12 41 92 67 70 0B 68 CA  ......?A抔ph?
$+30     >9A 3B 00 00 00 00 01 00 00 00 00 00 00 00 01 02  ?...........
$+40     >00 00 01 00 14 23 00 00 00 00 00 00 00 00 00 00  ...#..........
$+50     >00 00 00 00 00 00 00 00 00 00 00 00 00 9A 00 00  .............?.
$+60     >00 00 00 00 00 00 00 00 5E 9A 00 00 00 00 00 00  ........^?.....
$+70     >00 00 00 00 00 00 00 52 87 C2 00 00 00 00 97 CF  .......R嚶....椣
$+80     >5E 94 CE 53 73 9E 00 00 00 00 00 00 00 00 00 00  ^斘Ss?.........出售  金创药(大)  1
$ ==>    >00 00 92 00 80 00 02 00 00 00 26 0F 1B 28 66 CA  ..?€....&(f?
$+10     >9A 3B 00 00 00 00 01 00 00 00 00 00 00 00 5E 17  ?...........^
$+20     >00 00 00 00 00 00 8B 15 E2 BD 97 68 30 0B 66 CA  ......?饨梙0f?
$+30     >9A 3B 00 00 00 00 01 00 00 00 00 00 00 00 01 03  ?...........
$+40     >00 00 01 00 14 23 00 00 00 00 00 00 00 00 00 00  ...#..........
$+50     >00 00 00 00 00 00 00 00 00 00 00 00 00 9A 00 00  .............?.
$+60     >00 00 00 00 00 00 00 00 5E 9A 00 00 00 00 00 00  ........^?.....
$+70     >00 00 00 00 00 00 00 52 87 C2 00 00 00 00 97 CF  .......R嚶....椣+2 (DWORD) 指令 +A   出售物品特征码
+E  物品类型  来源于 背包+4C
+16 (BYTE) 物品数量
+1E  ....
+26 8字节  物品信息  来源于物品+54
+2E    物品类型
+36  物品数量
+3F  物品下表   1字节



以上就是对出售物品封包的分析,下面要做的就是对数据进行结构化和函数的封装

#define nSizePackBack 36
typedef struct TBACKPACK_LIST
{TBACK_PACK_OBJ mtGoodList[nSizePackBack];TBACKPACK_LIST* GetData();  int UseGoodsForIndex(DWORD Index);int GetGoodsIndexForName(char* szpGoodsName);BOOL UseGoodsForName(char* szpGoodsName);void DbgPrint();DWORD SelGoods(DWORD ndIndex); //选中背包中的某一格中的物品BOOL MoveGoodsToDepot(DWORD ndIndex = 1);//移动选中物品到仓库中的某一格BOOL MoveGoodsToDepot(char* szpName);//移动选中物品到仓库中的某一格BOOL TBACKPACK_LIST::MoveGoodsToEquipm(char* szpName, int EquipmPos); //移动装备到身上的装备栏BOOL TBACKPACK_LIST::SaveGoodsTpDepot(CHAR* szpName, DWORD ndNum); //封装存物品callBOOL TBACKPACK_LIST::SellGoodsForName(char* szpName, DWORD ndNum);
}_TBACKPACK_LIST;

#pragma pack(1)
#define ndBuyType 1
#define ndSelType 2
typedef struct _tBuyGoodsData{BYTE nd111[2];DWORD ndSendCmdType;DWORD ndBuySelType;DWORD nd1111;DWORD ndGoodsType;DWORD nd2222;DWORD ndNum;BYTE nd16[0x0C];//+26 8字节QWORD nqGoodsId;//DWORD ndGoodsType2;BYTE nbTemp333[13];BYTE nbIndexForBackpack;BYTE nb[0x50];}_tBuyGoodsData;
#pragma pack()



BOOL TBACKPACK_LIST::SellGoodsForName(char* szpName, DWORD ndNum){DWORD ndIndex = GetGoodsIndexForName(szpName);if (ndIndex == -1){return FALSE;}BYTE nbData[0x90] = {0x00, 0x00, 0x92, 0x00, 0x80, 0x00, 0x02, 0x00, 0x00, 0x00, 0x26, 0x0F, 0x1B, 0x28, 0x65, 0xCA,0x9A, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x16,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xDD, 0xB3, 0xA1, 0x29, 0x67, 0xF0, 0x0B, 0x65, 0xCA,0x9A, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,0x00, 0x00, 0x01, 0x00, 0x14, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x87, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x97, 0xCF,0x5E, 0x94, 0xCE, 0x53, 0x73, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };_tBuyGoodsData *ptBuyGoodsData = (_tBuyGoodsData*)nbData;ptBuyGoodsData->ndSendCmdType = 0x00800092;ptBuyGoodsData->ndBuySelType = ndSelType;ptBuyGoodsData->ndGoodsType = mtGoodList[ndIndex].ndID1;ptBuyGoodsData->ndGoodsType2 = mtGoodList[ndIndex].ndID1;ptBuyGoodsData->ndNum = ndNum;ptBuyGoodsData->nqGoodsId = mtGoodList[ndIndex].ndID2;ptBuyGoodsData->nbIndexForBackpack = mtGoodList[ndIndex].ndIndexForPack;__try{__asm{mov eax, ptBuyGoodsData//mov DWORD ptr[ecx + 0x2], 0x3B9ACA65//mov WORD ptr[ecx+0x6] ,2//mov DWORD ptr[ecx + 0x16], 0x0B65E0FD//mov DWORD ptr[ecx + 0x26], 0x0BF007A8//mov DWORD ptr[ecx + 0x26+ 4], 0x3B9ACA65//mov DWORD ptr[ecx + 0x0e], 0x000000B2//mov BYTE ptr[ecx + 0x2e],0x00//mov BYTE ptr[ecx + 0x3f], 0x00push 0x86push eaxMOV ECX, DWORD PTR DS : [Base_CallSendDataEcx]mov eax ,Base_CallSendDataCALLcall eax}}__except (1){DbgPrintf_Mine("BOOL TBACKPACK_LIST::SellGoodsForName(char* szpName, DWORD ndNum) 出现异常");}return TRUE;
}

以上代码就完成了对物品出售的封装,跟以前分析的存入仓库和购买物品都有类似之处,所以还是很简单的



这篇关于追逐自己的梦想----------辅助制作第三十八课:物品出售的分析和实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056629

相关文章

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57