看流星社区

 找回密码
 注册账号
查看: 2537|回复: 1

分享DNF开源代码 VC++中文代码 喜欢的朋友可以参考下

[复制链接]

该用户从未签到

发表于 2019-10-10 22:50:39 | 显示全部楼层 |阅读模式

const int 释放CALL = 0x191FC40;
const int 模拟CALL = 0x191FB80;

//技能全屏
void 模拟Call(int 对象基址, int 代码, int 伤害, int X轴, int Y轴, int Z轴)
{
__asm
{
push Z轴
push Y轴
push X轴
push 伤害
push 代码
push 对象基址
mov edi, 模拟CALL
call edi
add esp, 0x18
}
}

void 释放Call(int 对象基址, int 代码, int 伤害, int X轴, int Y轴, int Z轴)
{
__asm
{
push Z轴
push Y轴
push X轴
push 伤害
push 代码
mov eax, dword ptr ds : [人物基址]//人物
push dword ptr ds : [eax]
call 释放CALL
add esp, 0x18
}

}
void 释放线程()
{
int 代码 = GetPrivateProfileIntA("全屏", "技能代码", 2, lpPath);//11422血爆 30055伤害秒杀
int 伤害 = GetPrivateProfileIntA("全屏", "技能伤害", 2, lpPath);
int 技能个数 = 0;
int 一级偏移 = 读整数(人偶地址());
int 二级偏移 = 读整数(一级偏移 + 0xB8);
int 首地址 = 读整数(二级偏移 + 0xC0);
int 尾地址 = 读整数(二级偏移 + 0xC4);
int 怪物数量 = (尾地址 - 首地址) / 4;
for (int i = 0; i < 怪物数量; i++)
{
int 怪物基址 = 首地址 + 4 * i;
int 怪物地址 = 读整数(怪物基址);
int 怪物类型 = 读整数(怪物地址 + 0x98);
int 怪物阵营 = 读整数(怪物地址 + 0x7AC);
//int 怪物代码 = *(PINT)(怪物地址 + 880);
int 自身阵营 = 读整数(一级偏移 + 0x7AC);
//int 怪物血量 = *(PINT)(怪物地址 + 0x33DC);
if (怪物类型 == 529 || 怪物类型 == 273 || 怪物类型 == 545)
{
if (怪物阵营 != 自身阵营 && 怪物地址 != 一级偏移)
{
int x = (int)(*(float *)(怪物地址 + 0x1b8));
int y = (int)(*(float *)(怪物地址 + 0x1bc));
int z = (int)(*(float *)(怪物地址 + 0x1c0));
释放Call(一级偏移, 代码, 伤害, x, y, z);
//释放CALL(人偶地址获取(), 代码, 伤害, x, y, z);
//模拟Call(一级偏移, 代码, 伤害, x, y, z);
Sleep(GetPrivateProfileIntA("全屏", "技能频率", 2, lpPath));
技能个数++;
if (技能个数 == 8) {
return;
}
}
}
}
}


DWORD 技能全屏线程(_In_ LPVOID lpParameter)
{
while (1){
全屏线程();
}
return 100;
}
bool 全屏开关 = false;
HANDLE 全屏线程Handle;
DWORD tid;
void 开关全屏()
{
全屏开关 = !全屏开关;
if (全屏开关 == true) {
公告(L"?Lee? 全屏开启");
全屏线程Handle = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)技能全屏线程, NULL, 0, &tid);
}
if (全屏开关 == false) {


TerminateThread(全屏线程Handle, 11);
公告(L"?Lee? 全屏关闭");
}
}

============================

阵营偏移 0x7B0   自己修改下


材料技能

int 置入物品内存()
{
__asm
{
mov ecx, 人物基址
mov ecx, [ecx]
mov ecx, [ecx + 0x6050]
mov ecx, [ecx + 0x58]
mov ecx, [ecx + 0xC]
mov eax, [ecx]
mov eax, [eax + 0x14C]
cmp eax, 0
je $ + 8
call eax
}
}
void 材料技能()
{
int 代码 = GetPrivateProfileIntA("材料", "材料代码", 2, lpPath);
材料地址 = 空白地址(32);
*(unsigned int*)(置入物品内存() + 材料开始) = (int)材料地址;
*(unsigned int*)(置入物品内存() + 材料结束) = (int)材料地址 + 20;
*(unsigned int*)材料地址 = 代码;
公告(L"Lee - 材料技能 - ON");
}

============================
吸物+自动入包



const int 入包范围 = 0x1DA9792;

void 吸物()
{
检测();
int 一级偏移 = 0, 二级偏移 = 0, 首地址 = 0, 尾地址 = 0, 数量 = 0, 对象地址 = 0, 类型 = 0;
int 人物X, 人物Y, 人物Z;
一级偏移 = *(int*)(人物基址);
二级偏移 = *(int*)(一级偏移 + 0xB8);
首地址 = *(int*)(二级偏移 + 0xC0);
尾地址 = *(int*)(二级偏移 + 0xC4);
人物X = *(int*)(一级偏移 + x偏移);//X坐标0x1B8
人物Y = *(int*)(一级偏移 + y偏移);//Y坐标0x1BC
人物Z = *(int*)(一级偏移 + z偏移);//Z坐标0x1C0
数量 = (尾地址 - 首地址) / 4;
for (int i = 0; i < 数量; i++) {
对象地址 = *(int*)(首地址 + 4 * i);
类型 = *(int*)(对象地址 + 0x94);
if (类型 == 289) {
int 怪物x地址 = *(int *)(对象地址 + 0xa8) + 0x10;
int 怪物y地址 = *(int *)(对象地址 + 0xa8) + 0x14;
*(int *)怪物x地址 = 人物X;
*(int *)怪物y地址 = 人物Y;
}
}
DWORD oldprotect;
VirtualProtect((LPVOID)入包范围, 2, PAGE_EXECUTE_READWRITE, &oldprotect);
BYTE a[2] = { 0x90, 0x90 };
BYTE b[2] = { 0x74, 0x12 };
memcpy((void *)入包范围, a, 2);
Sleep(800);
memcpy((void *)入包范围, b, 2);
VirtualProtect((LPVOID)入包范围, 2, oldprotect, &oldprotect);
}
============================

Hook倍攻

void hook倍攻()
{
HANDLE h = GetCurrentProcess();
int 跳回地址, 倍功伤害;
BYTE 检测还原A[5] = { 0x55 };
BYTE 检测还原B[5] = { 0x64, 0xA3, 0x00, 0x00, 0x00 };
BYTE 检测还原C[5] = { 0x55 };
DWORD oldprotect;
VirtualProtect((LPVOID)HOOK倍功, 10, PAGE_EXECUTE_READWRITE, &oldprotect);
VirtualProtect((LPVOID)倍攻检测1, 10, PAGE_EXECUTE_READWRITE, &oldprotect);
VirtualProtect((LPVOID)倍攻检测2, 10, PAGE_EXECUTE_READWRITE, &oldprotect);
VirtualProtect((LPVOID)倍攻检测3, 10, PAGE_EXECUTE_READWRITE, &oldprotect);
LPVOID 倍功开始 = NULL;
跳回地址 = HOOK倍功 + 6;
倍功伤害 = GetPrivateProfileIntA("倍功", "倍功倍数", 2, lpPath) * 100;
倍功开始 = VirtualAllocEx(h, 0, 30, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
BYTE Code[30] = { 0x83, 0xB9, 0x50, 0x07, 00, 00, 00, 0x75, 0x07, 0xC7, 0x45, 0x10, 00, 00, 00, 00, 0x89, 0x85, 0x8C, 0xFE, 0xFF, 0xFF, 0x68, 00, 00, 00, 00, 0xc3 };
*(int *)(Code + 12) = 倍功伤害;
*(int *)(Code + 23) = 跳回地址;
BYTE hook1[6] = { 0x89, 0xBD, 0x94, 0xFE, 0xFF, 0xFF };
BYTE hook2[6] = { 0xe9, 0, 0, 0, 0, 0x90 };
*(int *)(hook2 + 1) = (int)倍功开始 - HOOK倍功 - 5;
if (hook倍功开关 == FALSE) {
memcpy((void *)HOOK倍功, hook2, 6);
memcpy(检测还原A, (void *)倍攻检测1, 1);
memcpy(检测还原B, (void *)倍攻检测2, 5);
memcpy(检测还原C, (void *)倍攻检测3, 1);
memcpy(倍功开始, Code, 30);
hook倍功开关 = TRUE;
公告(L"Lee - hook倍攻 - ON");
}
else {
memcpy((void *)HOOK倍功, hook1, 6);
memcpy(检测还原A, (void *)倍攻检测1, 1);
memcpy(检测还原B, (void *)倍攻检测2, 5);
memcpy(检测还原C, (void *)倍攻检测3, 1);
VirtualFreeEx(hWindows, 倍功开始, 30, MEM_DECOMMIT);
hook倍功开关 = FALSE;
公告(L"Lee - hook倍攻 - OFF");
}
VirtualProtect((LPVOID)HOOK倍功, 10, oldprotect, &oldprotect);
}
============================
void 使用物品(int 位置)//物品1就是1
{
int 物品栏指针 = *(int *)(商店基址);
物品栏指针 = *(int *)(物品栏指针 + 0x48);//物品栏指针
*(int*)(物品栏指针 + 0x3D3 + 位置) = 1;
}
void 后台按键(int 按键代码, unsigned char 按键时长 = 50)
{
byte a[1] = { 1 };
byte b[1] = { 0 };
写内存字节(读整数(按键基址) + 按键代码, a, 1);
Sleep(按键时长);
写内存字节(读整数(按键基址) + 按键代码, b, 1);;
}
============================


先丢人偶地址和怪物地址,然后再丢冰冻
int 人偶地址()
{
int 一级偏移 = 读整数(人物基址);
int 二级偏移 = 读整数(一级偏移 + 0xB8);
int 首地址 = 读整数(二级偏移 + 0xC0);
int 尾地址 = 读整数(二级偏移 + 0xC4);
int 怪物数量 = (尾地址 - 首地址) / 4;
for (int i = 0; i < 怪物数量; i++)
{
int 怪物基址 = 首地址 + 4 * i;
int 怪物地址 = 读整数(怪物基址);
int 怪物类型 = 读整数(怪物地址 + 0x94);
int 怪物阵营 = 读整数(怪物地址 + 阵营偏移);
if (怪物类型 == 273 && 怪物阵营 == 0 && 怪物地址 != 一级偏移)
{
return 首地址 + 4 * i;
}
continue;
}
return 0;
}
int 怪物地址()
{
int 一级偏移 = 读整数(人物基址);
int 二级偏移 = 读整数(一级偏移 + 0xB8);
int 首地址 = 读整数(二级偏移 + 0xC0);
int 尾地址 = 读整数(二级偏移 + 0xC4);
int 怪物数量 = (尾地址 - 首地址) / 4;
for (int i = 0; i < 怪物数量; i++)
{
int 怪物基址 = 首地址 + 4 * i;
int 怪物地址 = 读整数(怪物基址);
int 怪物类型 = 读整数(怪物地址 + 0x94);
int 怪物阵营 = 读整数(怪物地址 + 阵营偏移);
if (怪物类型 == 529 || 怪物类型 == 545)
{
if (怪物阵营 == 0 && 怪物地址 != 一级偏移)
{
int 怪物代码 = 读整数(怪物地址 + 0x3c4);
if (怪物代码 == 1090 || 怪物代码 == 69200)
return 首地址 + 4 * i;
}
}
}
}
============================

void *冰冻地址;
void 刷新CALL(int 装备指针)//只相当于脱下装备,所以对于满技能无效
{
__asm
{
MOV EDI, [装备指针]
MOV EDX, [EDI]
MOV EDX, [EDX + 0x1F8]//刷新参数1
LEA EAX, [EDI + 0x73C]//刷新参数2
PUSH EAX
MOV ECX, EDI
MOV EAX, EDX
CALL EAX
}
}
void *空白地址(int size)//返回首地址指针
{
void *v;
v = malloc(size);//申请内存
memset(v, 0, size);//清空申请的内存区
return v;
}
void 冰冻全屏(int 基址)
{
检测();
int 范围 = GetPrivateProfileIntA("冰冻", "冰冻范围", 2, lpPath);
int 频率 = GetPrivateProfileIntA("冰冻", "冰冻频率", 2, lpPath);
int 伤害 = GetPrivateProfileIntA("冰冻", "冰冻伤害", 2, lpPath);
unsigned int addr_ = *(unsigned int*)基址;
addr_ = *(unsigned int*)(addr_ + 武器偏移);
冰冻地址 = 空白地址(32);
*(unsigned int*)(addr_ + 冰冻开始) = (int)冰冻地址;
*(unsigned int*)(addr_ + 冰冻结束) = (int)冰冻地址 + 0x20;
*(unsigned int*)冰冻地址 = 0;//0冰冻1诅咒
*(unsigned int*)((int)冰冻地址 + 0x4) = 范围;//x范围1
*(unsigned int*)((int)冰冻地址 + 0x8) = 范围;//y范围2
*(unsigned int*)((int)冰冻地址 + 0xC) = 频率;
*(unsigned int*)((int)冰冻地址 + 0x10) = 0;//持续时间
*(unsigned int*)((int)冰冻地址 + 0x14) = 100;//等级
*(unsigned int*)((int)冰冻地址 + 0x18) = 80;//几率
*(unsigned int*)((int)冰冻地址 + 0x1C) = 伤害;
刷新CALL(addr_);
}
void 冰冻还原(int 基址)
{
unsigned int addr_ = *(unsigned int*)基址;
addr_ = *(unsigned int*)(addr_ + 武器偏移);
*(unsigned int*)(addr_ + 冰冻开始) = 0x0;//写本内存地址400800写入10086
*(unsigned int*)(addr_ + 冰冻结束) = 0x0;//写本内存地址400800写入10086
free(冰冻地址);
刷新CALL(addr_);
}
void 人偶冰冻()

冰冻全屏(人偶地址());//这里写上对象即可。
Sleep(600);
公告(L"?Lee? Bd~start");
//刷新CALL(*(unsigned int*)((int)人偶地址() + 武器偏移));
Sleep(500);
冰冻还原(人偶地址());
}
============================

然后再发一个东西叫做物品CALL
void 物品call(int 触发基址 = *(int *)人物基址, int 物品代码 = 2600261)
{
__asm
{
mov ecx, 触发基址
mov edx, dword ptr[ecx]
mov eax, 物品代码
mov edx, dword ptr[edx + 0x7D4]
push eax
call edx
}
}
自己更新一下基址可用。
============================


void 符咒()
{
检测();
if (符咒开关 == FALSE)
{
写整数(读整数(读整数(读整数(读整数(人物基址) + 物品栏) + 物品栏偏移) + 物品栏1) + 0x20, 400360004);
符咒开关 = TRUE;
公告(L"?Lee? Fz - ON");
}
else{
符咒开关 = FALSE;
int 代码 = GetPrivateProfileIntA("符咒", "符咒代码", 2, lpPath);
int 伤害 = GetPrivateProfileIntA("符咒", "符咒伤害", 2, lpPath);
写整数(读整数(读整数(读整数(读整数(读整数(读整数(读整数(人物基址) + 物品栏) + 物品栏偏移) + 物品栏1) + 装备结构) + 0x4) + 0x2c) + 0x0, 20);//触发方式
写小数(读整数(读整数(读整数(读整数(读整数(读整数(读整数(读整数(人物基址) + 物品栏) + 物品栏偏移) + 物品栏1) + 装备结构) + 0x18) + 0x4) + 0x4) + 0x4, 4);//群体
写小数(读整数(读整数(读整数(读整数(读整数(读整数(读整数(读整数(人物基址) + 物品栏) + 物品栏偏移) + 物品栏1) + 装备结构) + 0x18) + 0x4) + 0x18) + 0x4, 99);//几率
写小数(读整数(读整数(读整数(读整数(读整数(读整数(读整数(读整数(人物基址) + 物品栏) + 物品栏偏移) + 物品栏1) + 装备结构) + 0x18) + 0x4) + 0x54) + 0x8, float(代码));
写小数(读整数(读整数(读整数(读整数(读整数(读整数(读整数(读整数(人物基址) + 物品栏) + 物品栏偏移) + 物品栏1) + 装备结构) + 0x18) + 0x4) + 0x54) + 0x18, float(伤害));
写整数(读整数(读整数(读整数(读整数(读整数(读整数(读整数(人物基址) + 物品栏) + 物品栏偏移) + 物品栏1) + 装备结构) + 0x4) + 0x18) + 0x4, 2000);//频率
写整数(读整数(读整数(读整数(读整数(人物基址) + 物品栏) + 物品栏偏移) + 物品栏1) + 0x20, 2236278049);
公告(L"?Lee? Fz - GO");
}
}
好像这个破东西挺稳定,没清楚了,也丢出去。
============================

void 坐标Call(int 触发指针, int 坐标X軸, int 坐标Y軸, int 坐标Z軸) {
_asm
{
mov esi, 触发指针
mov eax, [esi]
mov edi, eax
add eax, 坐标结构一
mov eax, [eax]
mov ecx, esi
mov eax, eax
mov eax, eax
mov eax, eax
call eax
mov eax, 坐标Z軸
mov ecx, 坐标Y軸
mov edx, 坐标X軸
push eax
push ecx
push edx
mov eax, edi
add eax, 坐标结构二
mov eax, [eax]
mov ecx, esi
mov eax, eax
mov eax, eax
mov eax, eax
call eax
}
}
void 坐标过图(int 方向)
{
int 一级偏移 = 0, 二级偏移 = 0, 临时数据 = 0, 坐标结构 = 0, x = 0, y = 0, xF = 0, yF = 0, cx = 0, cy = 0;
一级偏移 = *(int *)人物基址;
二级偏移 = *(int *)(一级偏移 + 地图偏移);
临时数据 = *(int *)(商店基址 - 0x8);
临时数据 = *(int *)(临时数据 + 时间基址);
临时数据 = *(int *)(临时数据 + 坐标偏移);
坐标结构 = 临时数据 + (方向 + 方向 * 8) * 4 + 坐标结构偏移;
x = *(int *)(坐标结构 + 0);
y = *(int *)(坐标结构 + 4);
xF = *(int *)(坐标结构 + 8);
yF = *(int *)(坐标结构 + 12);
if (二级偏移 == 0) {
return;
}
if (方向 == 0) {
cx = x + xF + 20;
cy = y + yF / 2;
}
else if (方向 == 1) {
cx = x - 20;
cy = y + yF / 2;
}
else if (方向 == 2) {
cx = x + xF / 2;
cy = y + yF + 20;
}
else if (方向 == 3) {
cx = x + xF / 2;
cy = y - 20;
}
坐标Call(一级偏移, cx, cy, 0);
Sleep(200);
坐标Call(一级偏移, x + xF / 2, y, 0);
}

该用户从未签到

发表于 2019-10-21 19:06:54 | 显示全部楼层
看到这么好的资源真是高兴,楼主辛苦了!
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-26 07:58

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

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