【c++ 打造属于自己的辅助】第二课 3SSS+三速写法 开教!
agopoe吧
全部回复
仅看楼主
level 7
Timsqin 楼主
首先感谢 @yk4441 @释摩陀 分享的源码 然后 开教!
2015年10月14日 15点10分 1
level 7
Timsqin 楼主
#include <iostream>
using namespace std;
int add(int a,int b);
int add(int a,int b)
{
int num=0;
num=a+b;
return num;
}
int main()
{
int c=0;
c=add(1,2);
cout<<c<<endl;
return 0;
}
可以看到结果输出3
2015年10月14日 15点10分 6
level 7
Timsqin 楼主
函数还有一种写法 不过函数一定要放在int main上面 这种是省去定义的
#include <iostream>
using namespace std;
int add(int a,int b)//只有函数体
{
int num=0;
num=a+b;
return num;
}
int main()
{
int c=0;
c=add(1,2);//调用函数add 把1和2放进去 并把返回的结果给c
cout<<c<<endl;//输出c 换行
return 0;
}
2015年10月14日 15点10分 7
菜菜想说下win32 函数可以向前声明[哈哈]
2015年11月15日 05点11分
level 7
Timsqin 楼主
再讲讲头文件 第一课讲过头文件 像Windows.h 这种就是头文件 头文件里有很多函数可以调用 这种就是头文件
现在我们就写一个头文件 并用函数来调用 创建方法跟c++source file差不多 只是选的是这个
2015年10月14日 15点10分 8
level 7
Timsqin 楼主
在头文件add.h里写上刚才的那个函数
int add(int a,int b);
int add(int a,int b)
{
int num=0;
num=a+b;
return num;
}
关掉 保存
2015年10月14日 15点10分 9
level 7
Timsqin 楼主
再建立个c++ source file 取名 add.cpp(名字其实没啥关系 只是为了美观点··)
在里面写上
#include <iostream>
#include "add.h"
using namespace std;
int main()
{
int c=0;
c=add(1,2);
cout<<c<<endl;
return 0;
}
编译 运行 你就会看到输出结果3 结果跟上面的一样不同的是把函数放头文件来调用了
2015年10月14日 15点10分 10
level 7
Timsqin 楼主
这里粗略讲下程序是怎样运行 #include<iostream> 就不讲了 理解为iostream.h这个头文件的函数都已经在程序里 主要讲下main的运行
首先 int c=0; 定义c为int型(整数)
c=add(1,2);这里分两部分 调用add()函数 这时就会跳到int add(int a,int b) 这个函数里 把1和2作为参数给int a和int b 这时a就是1 b就是2 然后执行函数体 int num=0;定义个num int型并赋值为0
然后num=a+b; 就是1+2然后赋值给num(右边开始读) 这是num就是3
return num;就是把这个3返回去主函数 这时主函数main里的c就是3
cout<<c<<endl;输出c到屏幕 换行
#include <iostream>
using namespace std;
int add(int a,int b)
{
int num=0;
num=a+b;
return num;
}
int main()
{
int c=0;
c=add(1,2);
cout<<c<<endl;
return 0;
}
2015年10月14日 16点10分 11
level 7
Timsqin 楼主
[滑稽]到了这里 我自己都忍不住要bb两句 说那么多干啥 快入正片
其实正片都要用到以上的知识 所以讲下···
2015年10月14日 16点10分 13
基础很重要,^_^
2015年10月14日 16点10分
很有用其实[吐舌]比如我就需要
2018年01月23日 02点01分
level 7
Timsqin 楼主
好了 开始正片
2015年10月14日 16点10分 14
我插
2015年10月20日 02点10分
弱机[阴险]都6天了 还不更
2015年10月20日 02点10分
level 7
Timsqin 楼主
因为要用到加密 为了方便调用 就写到头文件了 与第一节课不同 这里的读写内存函数 也做了个包装 放到头文件里 也是为了方便+美观 函数如下
dnf_code.h
//写内存
DWORD WriteMemory(DWORD Address,DWORD n,HANDLE hProcss)
{
WriteProcessMemory(hProcss, (LPVOID)Address, &n, sizeof(n), NULL);
return 0;
}
//读内存
DWORD ReadMemory(DWORD Address,HANDLE hProcss)
{
DWORD tmp=0;
ReadProcessMemory(hProcss, (LPCVOID)Address, &tmp, sizeof(tmp), NULL);
return tmp;
}
dnf_code.cpp //调用
WeadMemory(ENCODE_BASE_ADDRESS,hProcss);
ReadMemory(ENCODE_BASE_ADDRESS,hProcss);
2015年10月14日 16点10分 15
虽然是坟贴了,但是我还是想问问这个个ReadMemory的参数是什么情况
2016年03月10日 03点03分
@Ly源n 写错,是WriteMemory,这个和那个WeadMemory是什么情况
2016年03月10日 03点03分
level 7
Timsqin 楼主
加解密函数就不说了 主要讲下调用方法 首先3s写法
(用评分基址的值) 加上 (十六进制的110转十进制的值) 得出一个需要加密写入的地址 (110是3sss偏移)
99999999是待需要修改的值 就是把评分修改成这个
2015年10月14日 16点10分 17
level 7
Timsqin 楼主
//加密函数
int EnCode(DWORD Address, DWORD Data,HANDLE hProcss);
Address即 上面算出那个地址
Data 是99999999
hProcss是主函数那边那个句柄
在主函数调用
EnCode(tmp,ne,hProcss);//tmp即上面算出那个地址 ne是99999999 hProcss是dnf进程句柄
2015年10月14日 16点10分 18
地址是指的评分的基址吗? [汗]
2015年11月15日 05点11分
@请叫我暴力仙 基址偏移后的地址
2015年11月15日 06点11分
level 7
Timsqin 楼主
下面放完整代码
dnf_code.h
#include <Windows.h>
//写内存
DWORD WriteMemory(DWORD Address,DWORD n,HANDLE hProcss)
{
WriteProcessMemory(hProcss, (LPVOID)Address, &n, sizeof(n), NULL);
return 0;
}
//读内存
DWORD ReadMemory(DWORD Address,HANDLE hProcss)
{
DWORD tmp=0;
ReadProcessMemory(hProcss, (LPCVOID)Address, &tmp, sizeof(tmp), NULL);//读取人物基址
return tmp;
}
//加密函数
int EnCode(DWORD Address, DWORD Data,HANDLE hProcss)
{
DWORD ENCODE_BASE_ADDRESS = 0x31A6558; //加密基址
DWORD ENCODE_PARAMETER1 = 0x02CED558; //加密参数1
DWORD ENCODE_PARAMETER2 = 0x02CED758; //加密参数2
DWORD DECODE_BASE_ADDRESS = 0x031A64F8; //解密基址
DWORD nEdi, nEcx, nEax, nEsi, nEdx, nSs;
nEcx = Address;
nEax = ReadMemory(ENCODE_BASE_ADDRESS,hProcss);
nEax += 1;
WriteMemory(ENCODE_BASE_ADDRESS, nEax,hProcss);
nEdx = nEax;
nEdx >>= 8;
nEdx <<= 24;
nEdx >>= 24;
nEdx = ReadMemory(nEdx * 2 + ENCODE_PARAMETER1,hProcss);
nEdx &= 0xFFFF;
nEax <<= 24;
nEax >>= 24;
nSs = ReadMemory(nEax * 2 + ENCODE_PARAMETER2,hProcss);
nSs &= 0xFFFF;
nEax = nEdx ^ nSs;
nEax &= 0xFFFF;
nEsi = Data;
nEdx = nEsi >> 16;
nSs = nEsi & 0xFFFF;
nEdx += nSs;
nEdi = nEdx ^ nEax;
nEdx = nEax;
nEax <<= 16;
nEax += nEdx;
nEsi = Data;
nEax ^= nEsi;
nEsi = Address + 4;
WriteMemory(nEsi, nEax,hProcss);
nEax = ReadMemory(Address,hProcss);
nEsi = ReadMemory(DECODE_BASE_ADDRESS,hProcss);
nEcx = nEdi;
nEcx <<= 16;
nEcx += nEdx;
nEdx = nEax;
nEdx >>= 16;
nEdx = ReadMemory(nEsi + nEdx * 4 + 36,hProcss);
nEax &= 0xFFFF;
WriteMemory(nEdx + nEax * 4 + 8468, nEcx,hProcss);
return 1;
}
//解密函数
int DeCode(DWORD Address,HANDLE hProcss)
{
DWORD DECODE_BASE_ADDRESS=0x031A64F8; //解密基址
DWORD nEax, nEsi, nEdx;
nEax = ReadMemory(Address,hProcss);
nEsi = ReadMemory(DECODE_BASE_ADDRESS,hProcss);
nEdx = nEax;
nEdx >>= 16;
nEdx = ReadMemory(nEsi + nEdx * 4 + 36,hProcss);
nEax &= 0xFFFF;
nEax = ReadMemory(nEdx + nEax * 4 + 8468,hProcss);
nEax &= 0xFFFF;
nEdx = nEax;
nEsi = nEdx;
nEsi <<= 16;
nEsi += nEdx;
nEdx = ReadMemory(Address + 4,hProcss);
nEax = nEsi ^ nEdx;
return nEax;
}
2015年10月14日 16点10分 19
加密函数和解密函数是不是都是封装好了???算法不会变?还有加密参数、解密基址都不会变么?
2015年10月26日 01点10分
@三思而先行_ 不是 每次更新自己改 ce吧有人会放基址
2015年10月26日 04点10分
回复 Timsqin :我看了你10月22号更新的常量,是不是所有的常量都有可能在某次更新以后发生变化???还是有些是不会变的???比如技能栏和物品栏
2015年10月26日 07点10分
@三思而先行_ 基址一定变 偏移不一定
2015年10月26日 07点10分
level 7
Timsqin 楼主
#include "dnf_code.h"
#include <Windows.h>
int main()
{
DWORD pf_base = 0x309053C;//评分基址
DWORD pf_de = 0x110;//三SSS偏移
DWORD tmp = 0;
DWORD pid = 0;
HWND hWnd = FindWindow(TEXT("地下城与勇士"),TEXT("地下城与勇士")); //窗口句柄
GetWindowThreadProcessId(hWnd,&pid);
HANDLE hProcss = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
//3sss评分
tmp=ReadMemory(pf_base,hProcss);//读取人物基址的值
tmp += pf_de;//值和偏移相加得出地址
DWORD ne = 99999999;
EnCode(tmp,ne,hProcss);
CloseHandle(hProcss);
return 0;
}
2015年10月14日 16点10分 20
dnf_code.cpp
2015年10月14日 16点10分
level 7
Timsqin 楼主
2015年10月14日 16点10分 21
我来晚了!没了!
2016年05月23日 00点05分
level 7
Timsqin 楼主
2015年10月14日 16点10分 22
level 7
Timsqin 楼主
剩下明天再更 隔壁打架
2015年10月14日 16点10分 23
楼主不能开视频教吗[黑线]
2016年04月18日 01点04分
level 7
Timsqin 楼主
开更 三速写法 不止三速 其他所有属性都可以改
2015年10月15日 03点10分 35
level 7
Timsqin 楼主
写法跟评分差不多 我就直接放源码了
#include "dnf_code.h"
#include <Windows.h>
int main()
{
DWORD rw_base = 0x3160DD0;//人物基址
DWORD sy_de = 0x2AA0;//上衣偏移
DWORD ys_de = 0x914;//移速偏移
DWORD gs_de = 0x924;//攻速偏移
DWORD ss_de = 0x934;//施速偏移
DWORD tmp = 0,tmp1 = 0,tmp2 = 0,tmp3 = 0;
DWORD pid = 0;
HWND hWnd = FindWindow(TEXT("地下城与勇士"),TEXT("地下城与勇士")); //窗口句柄
GetWindowThreadProcessId(hWnd,&pid);
HANDLE hProcss = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
tmp=ReadMemory(rw_base,hProcss);
tmp += sy_de;
tmp=ReadMemory(tmp,hProcss);
tmp1 =tmp + ys_de;//移速
DWORD ne = 300;
EnCode(tmp1,ne,hProcss);
//tmp2 = tmp + gs_de;//攻速
//EnCode(tmp2,ne,hProcss);
tmp3 = tmp + ss_de;//施速
EnCode(tmp3,ne,hProcss);
CloseHandle(hProcss);
return 0;
}
今天更新后不晓得攻速偏移是不是变了 攻速没反应
2015年10月15日 03点10分 36
你把攻速给注释了,怎么管用?!
2016年03月23日 10点03分

2016年11月13日 05点11分
level 7
Timsqin 楼主
2015年10月15日 03点10分 37
2015年10月15日 03点10分
92C=攻速
2015年10月15日 14点10分
源码+成品已经不在了[不高兴]
2015年10月26日 08点10分
@听凉风夜寒 去 timsqin吧 看看
2015年10月26日 08点10分
1 2 尾页