外挂辅助技术研究-逆向分析任务等级需求并测试

学习目标:

任务等级相关数据

作业:

分析更新任务相关CALL 或者是代码

void printfMissionList()

{

DWORD ndStart;

DWORD ndEnd;

char *szpCurMissionName;//任务名

BYTE  nbLevel;//任务等级

//[[[0XF598C0]+2A4]+4C4] //起始地址

//[[[0XF598C0]+2A4]+4C8] //结束地址

//[[[0XF598C0]+2A4]+4C4]+8

// dc [0x2FA3D6C]+ [[[0XF598C0]+2A4]+4c4]*0xc0+4]*0c0+4

__try

{

ndStart=*(DWORD*)BaseF1_F10ArgEcx;

ndStart=*(DWORD*)(ndStart+0x2A4);

ndStart=*(DWORD*)(ndStart+0x4d4);

ndEnd=*(DWORD*)BaseF1_F10ArgEcx;

ndEnd=*(DWORD*)(ndEnd+0x2A4);

ndEnd=*(DWORD*)(ndEnd+0x4d8);

__asm

{

mov edi,ndStart

GotoStart:

MOV EAX,DWORD PTR DS:[EDI]

MOV ECX,DWORD PTR DS:[0x2FA3D6C]        ;//  150C4

LEA EAX,DWORD PTR DS:[EAX+EAX*2]        ; // [edx*3]

SHL EAX,0x6                             ;// eax=eax*0x40 [edi]*0xc0

CMP DWORD PTR DS:[EAX+ECX+0x18],0x10

MOVZX EBX,BYTE PTR DS:[ECX+EAX+0x20]

LEA EAX,DWORD PTR DS:[EAX+ECX+0x4]      ;//  [0x2FA3D6C]+[edi]*0xc0+4

JB EndMission

MOV EAX,DWORD PTR DS:[EAX]

EndMission:

mov szpCurMissionName,eax

mov nbLevel,bl

}

DbgPrintf_Mine("[%d]%s \r\n",nbLevel,szpCurMissionName);

_asm{

add edi,8

cmp edi,ndEnd

jnz GotoStart

}

}__except(1)

{

DbgPrintf_Mine("遍历任务列表出错\r\n");

}

return;

}

00760C47 - 8D 50 01  - lea edx,[eax+01]

00760C4A - 8D 9B 00000000  - lea ebx,[ebx+00000000]

00760C50 - 8A 08  - mov cl,[eax] <<

00760C52 - 40 - inc eax

00760C53 - 84 C9  - test cl,cl

0093A03D - 74 9F - je Client.exe+539FDE

0093A03F - BA FFFEFE7E - mov edx,7EFEFEFF

0093A044 - 8B 06  - mov eax,[esi] <<

0093A046 - 03 D0  - add edx,eax

0093A048 - 83 F0 FF - xor eax,FF

0093A048 - 83 F0 FF - xor eax,FF

0093A04B - 33 C2  - xor eax,edx

0093A04D - 8B 16  - mov edx,[esi] <<

0093A04F - 83 C6 04 - add esi,04

0093A052 - A9 00010181 - test eax,81010100

00610003  |. /0F85 A8000000 JNZ Client.006100B1                      ;  edi=[[edi+0x2A4]+0x4C4]

00610009  |. |8B87 A4020000 MOV EAX,DWORD PTR DS:[EDI+0x2A4]         ;  Case 11 of switch 0060FE5E

0061000F  |. |85C0          TEST EAX,EAX

#define  BaseF1_F10ArgEcx  0XF598C0 //BaseF1_F10ArgEcx

dd [[[BaseF1_F10ArgEcx]+2A4]+4c4]

dd [[[0XF598C0]+2A4]+4c4]  //BaseF1_F10ArgEcx

[[0x2FA3D6C]+[edi]*0xc0+4]]*0c0

dc [0x2FA3D6C]+ [[[0XF598C0]+2A4]+4c4]*0xc0+4]*0c0

+4 //任务名 char* 或者是char**类型

+18 //指针类型 标记 大于0x10 char**

+20 //1字节 任务等级

006E9D65  |.  66:8945 ED    |MOV WORD PTR SS:[EBP-0x13],AX

006E9D69  |.  8845 EF       |MOV BYTE PTR SS:[EBP-0x11],AL

006E9D6C  |.  8B07          |MOV EAX,DWORD PTR DS:[EDI]

006E9D6E  |.  8D0C40        |LEA ECX,DWORD PTR DS:[EAX+EAX*2]

006E9D71  |.  C1E1 06       |SHL ECX,0x6

006E9D74  |.  885D E8       |MOV BYTE PTR SS:[EBP-0x18],BL

006E9D77  |.  0FB64411 20   |MOVZX EAX,BYTE PTR DS:[ECX+EDX+0x20]    ;  任务等级

006E9D7C  |.  50            |PUSH EAX

006E9D7D  |.  68 D4BEA000   |PUSH Client.00A0BED4                    ;  ASCII "[%d]"

006E9D82  |.  8D4D E8       |LEA ECX,DWORD PTR SS:[EBP-0x18]

006E9D85  |.  6A 08         |PUSH 0x8

006E9D87  |.  51            |PUSH ECX

006E9D88  |.  C745 FC FFFFF>|MOV DWORD PTR SS:[EBP-0x4],-0x1         ;  sprintf

006E9D8F  |.  E8 4C06E1FF   |CALL Client.004FA3E0

006E9D94  |.  83C4 10       |ADD ESP,0x10

006E9D97  |.  6A FF         |PUSH -0x1

006E9D99  |.  8D55 E8       |LEA EDX,DWORD PTR SS:[EBP-0x18]

006E9D9C  |.  52            |PUSH EDX

006E9D9D  |.  53            |PUSH EBX

006E9D9E  |.  8BCE          |MOV ECX,ESI

006E9DA0  |.  E8 3B6D0700   |CALL Client.00760AE0

006E9DA5  |.  8B07          |MOV EAX,DWORD PTR DS:[EDI]

006E9DA7  |.  8B0D 6C3DFA02 |MOV ECX,DWORD PTR DS:[0x2FA3D6C]

006E9DAD  |.  8D0440        |LEA EAX,DWORD PTR DS:[EAX+EAX*2]

006E9DB0  |.  C1E0 06       |SHL EAX,0x6

006E9DB3  |.  837C08 18 10  |CMP DWORD PTR DS:[EAX+ECX+0x18],0x10    ;  判断 任务名是否是指针

006E9DB8  |.  8D4408 04     |LEA EAX,DWORD PTR DS:[EAX+ECX+0x4]      ;  任务名,或者是任务名指针

006E9DBC  |.  72 02         |JB SHORT Client.006E9DC0                ;  <0x10

006E9DBE  |.  8B00          |MOV EAX,DWORD PTR DS:[EAX]

006E9DC0  |>  6A 01         |PUSH 0x1

006E9DC2  |.  6A 2A         |PUSH 0x2A

006E9DC4  |.  50            |PUSH EAX

006E9DC5  |.  6A 01         |PUSH 0x1

006E9DC7  |.  8BCE          |MOV ECX,ESI

006E9DC9  |.  E8 526E0700   |CALL Client.00760C20                    ;  所有任务列表

006E9DCE  |.  8B55 E4       |MOV EDX,DWORD PTR SS:[EBP-0x1C]

006E9DD1  |.  889E 39020000 |MOV BYTE PTR DS:[ESI+0x239],BL

006E9DD7  |.  8B8A 60020000 |MOV ECX,DWORD PTR DS:[EDX+0x260]

006E9DDD  |.  56            |PUSH ESI

006E9DDE  |.  E8 CD7C0700   |CALL Client.00761AB0

006E9DE3  |.  8B75 E4       |MOV ESI,DWORD PTR SS:[EBP-0x1C]

006E9DE6  |>  83C7 08       |ADD EDI,0x8

006E9B4B  |.  8945 F0       MOV DWORD PTR SS:[EBP-0x10],EAX

006E9B4E  |.  53            PUSH EBX

006E9B4F  |.  56            PUSH ESI

006E9B50  |.  57            PUSH EDI

006E9B51  |.  50            PUSH EAX

006E9B52  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-0xC]

006E9B55  |.  64:A3 0000000>MOV DWORD PTR FS:[0],EAX

006E9B5B  |.  8BF1          MOV ESI,ECX

006E9B5D  |.  68 4D010000   PUSH 0x14D

006E9B62  |.  8975 E4       MOV DWORD PTR SS:[EBP-0x1C],ESI

006E9B65  |.  E8 F6C3FFFF   CALL Client.006E5F60

006E9B6A  |.  8BBE C4040000 MOV EDI,DWORD PTR DS:[ESI+0x4C4]         ;  ESI==[[0XF598C0]+2A4] //初始值

006E9B70  |.  3BBE C8040000 CMP EDI,DWORD PTR DS:[ESI+0x4C8]         ;  循环结束标志地址

006E9B76  |.  0F84 28010000 JE Client.006E9CA4

006E9B7C  |.  33DB          XOR EBX,EBX

006E9B7E  |.  8BFF          MOV EDI,EDI

006E9CF5  |.  E8 66C2FFFF   CALL Client.006E5F60

006E9CFA  |.  8BBE D4040000 MOV EDI,DWORD PTR DS:[ESI+0x4D4] //所有任务列表

006E9D00  |.  3BBE D8040000 CMP EDI,DWORD PTR DS:[ESI+0x4D8]

006E9D06  |.  0F84 E9000000 JE Client.006E9DF5

006E9D0C  |.  33DB          XOR EBX,EBX

时间: 2024-10-08 23:48:49

外挂辅助技术研究-逆向分析任务等级需求并测试的相关文章

外挂辅助技术研究教程

001-分析角色HP,MP值基址.txt 002-分析角色金钱基址.txt 003-分析角色气功加点基址.txt 004-编写代码读取游戏数据-注入DLL.txt 005-编写Win32控制台程序 注入带窗口的DLL,.txt 006-完善注入DLL的代码+给项目瘦身.txt 007-读取游戏中的人物信息+输出调试信息.txt 008-人物信息数据的封装.基址与偏移管理单元库.txt 009-静态链接库的使用与配置 显示人物信息.txt 010-药品对象+药品使用功能分析.txt 011-背包列

外挂辅助技术研究更新机制动态定位技术

学习目标: 动态定位基址 编写相关函数 编写特征码定位函数ScanFeatureCode //1把特征码转换成全大写 //2读取游戏字节数组数据 //3转换成十六进制字串 //4十六进制 字串比较  找到则返回地址 未找到返回0 DWORD ScanFeatureCode(HANDLE hProcess,//进程句柄 IN OUT  char* szpFeatureCode, DWORD ndStartAddress, DWORD ndEndAddress ); 作业:优化算法 提升函数速度;

外挂辅助技术研究-打开指定NPC对话

1.打开指定NPC对话功能 DWORD GetNpcObjForName(char* szpNpcName); DWORD OpenNpcTalkForName(char* szpNpcName); //获取指定NPC对象 push 0 push 0 push 0x401 mov ecx,2DF25598 //NPC对象地址 mov eax,[ecx] mov eax,[eax+4]  //打开NPC,测试通过 call eax push 3 mov ecx,0XF598C0 mov ecx,[

外挂辅助技术-分析游戏寻路相关数据准备

学习目标: 分析寻路CALL相关数据 分析寻路CALL思路 1.通过目的地坐标回溯<通过关键的数据逆向分析> 2.通过发包函数回溯  <通过发包函数回溯> 分析: 寻路一般是一个循环走路的过程,大致有如下架构 作业: 根据本课收集的数据尝试寻路分析 //走路状态 0和1  //11,33 //寻路状态 dd [[0F598C0]+298] +228 //1BYTE 寻路状态 +234 //X 目的地X坐标 +238 //Y 目的地Y坐标 dd [[0x31E663C]+1D64]

虚拟化技术研究及架构分析

什么是虚拟化 虚拟化是指计算机元件在虚拟的基础上而不是真实的基础上运行.虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程.CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率. 几种虚拟化软件介绍 RedHat KVM 虚拟化方式:完全虚拟化 架构:寄居架构(linux内核);祼金属架构RHEV-H 特点:祼金属架构RHEV-H或在关键的硬盘和网卡上支持半虚拟化VirtIO,达到最佳

Android逆向分析之Xposed的hook技术

Android逆向工程里常用到的工具除了的dex2jar,jd-gui,  Apktool之外还有一个Xposed. 这个工具是一个在不修改APK的情况下,影响其运行过程的服务框架.可以根据自己的需求编写模块,让模块控制目标应用的运行. 因为本人也是新手,对于Xposed用法还有很多的不熟悉,所以只对其hook技术进行简单的介绍,并让hook技术应用到以后的逆向分析工程中. 至于什么是hook,不了解的话就先去百度一下,这里基于菜鸟有限的经验,我只能说是一种函数拦截技术~ 首先,下载Xposed

Android中的软件安全和逆向分析[二]—apk反破解技术与安全保护机制

在Android应用开发中,当我们开发完软件之后,我们不希望别人能够反编译破解我们的应用程序,不能修改我们的代码逻辑.实际上,在应用程序的安全机制考虑中,我们希望自己的应用程序安全性高,通过各种加密操作等来增大竞争对手的反编译破解成本.设想,竞争对手开发一个同样的应用程序需要10天,而破解我们的软件程序需要100天,那么势必会打消黑客程序员破解我们应用程序的念头.如何增加对手的破解成本,就需要考验我们应用程序的安全性有多高,加密技术有多强.一个优秀的应用程序,不仅能为用户带来利益,同时也能保护自

应用层反外挂技术研究

标 题: 应用层反外挂技术研究作 者: choday时 间: 2013-06-19,17:02:32链 接: http://bbs.pediy.com/showthread.php?t=173897 此技术不算原创,但算是整理,详解 话说神秘人物v校,73%可能性为女性.此技术是从他那里学来的.此人说话言简意赅,需要耐心体会. 外挂,与反外挂,是矛与盾的关系,要想做好反外挂,必须了解矛的构成,以及盾的技术,才能制造出一个较好的盾. 纵观当前反外挂形势,就像是世界大战,各种驱动满天横飞.战火连天,

《C++反汇编与逆向分析技术揭秘》--认识启动函数,找到用户入口

<C++反汇编与逆向分析>和<程序员的自我修养>都是以VC6的代码作为例子讲解的.这里是在vs2017下,CRT代码有些区别,但整体流程上都是初始化环境,设置参数,最后转到用户main函数. class COne { public: COne() { printf("COne \r\n"); } ~COne() { printf("~COne \r\n"); } }; COne g_One; int main() { printf("