雨律在线 - 第16页


**************************************************************************************
*
* 版权归 雨律在线 - YuLv.Net - JiaJia 所有
*
* 转载请务必注明来源于 Http://Www.YuLv.Net
*
* 加加唯一指定官方 YuLv.Net 建议用户到官方安全下载
*
**************************************************************************************


关键字W3MapHack,WarMH++,魔兽1.24b全图

支持系统XP/2003/Vista/Win7

重要说明使用作弊工具会造成游戏平台账号被封,建议在局域网或HF玩RPG地图时使用。

使用说明:
1、将软件解压至任意您自定的目录再运行;
2、根据自己的喜好设置全图选项; 并点击全自动开启全图选项;
3. 启动魔兽后, 再用 W3MapHack 开启全图功能;

更新日志:
1、修正了 魔兽1.20e 显示小地图不能全亮的问题
2、修正了 魔兽1.24b 交易出错的问题

官方下载地址:W3MapHack 3.5 魔兽全图娱乐(支持魔兽1.24b的全图作弊)



如题...



**************************************************************************************
*
* 版权归 雨律在线 - YuLv.Net - JiaJia 所有
*
* 转载请务必注明来源于 Http://Www.YuLv.Net
*
* 加加唯一指定官方 YuLv.Net 建议用户到官方安全下载
*
**************************************************************************************

界面还是跟2.0一样,所以就不换图了.


更新日志:
1、新增了对VS2.74的支持
(注: WarHelper 自动更新已将挤房插件同步,用户可以在右键主菜单中点击自动更新即可。)

注意事项:
请务必确认您尚未在房间中再开始挤房,以免出现错误。并且要确认您选择的房间适合账号的等级,不建议(不建议并不代表不可以)在超过人数的房间挤。

官方下载地址:VSxRoom - VS专用挤房器 2.1 (绿色单文件)




  Angela Aki一年以来的最新单曲,「爱的季节」是她的王道情歌,也是多部未华子主演的NHK晨间连续剧《Tsubasa》的主题曲。另收入「Emily」和「It′s So Hard To Say Goodbye To Yesterday」。

  Angela Aki 的唱功和创作能力真是好没得说!一直超喜欢她歌曲里的那份淡定与自然,总是很容易就感动你,而且她的现场表现更是震撼人心,一架钢琴,身着简单的很欧美的运动上衣,牛仔裤,就这么简单的,用她全部的音乐力量感染你!看了好多她的现场,每次都被完全的征服。

  我喜欢她的声音,干净得剔透,毫无杂质,喜欢她的曲子,让我感动,让我幸福,喜欢她带着黑框眼镜,喜欢她弹钢琴忘情的样子.....

  还有,去年的大热单曲“手纸 ~拝启 十五の君へ~ ”(写给15岁的自己),歌词道出了自己15岁的烦恼与迷茫,以多年后成熟了的自己的身份看待以前青涩稚嫩的自己而发出的感慨,由此鼓励青少年不畏艰难执着追求自己的梦想,是一首不可多得的励志作品!



Code StuCE 10/08

关于aobscan的实现原理

我发现这里好多人用的语言都不一样,所以我尽量就不针对某种语言来讲了。(我写的C代码)

首先,获得进程PID。
可以根据标题获得,也可以根据进程名获得。各有各的好处吧。还有窗口类名哈。

例如:
HWND hwnd = FindWindow("MainWindow", NULL);
if (hwnd)
{
DWORD dwPid;
GetWindowThreadProcessId(hwnd, &dwPid);
//return dwPid;
}

第二步,获得进程相关信息,例如内存大小。

HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
PROCESS_MEMORY_COUNTERS pmc;
pmc.cb = sizeof(PROCESS_MEMORY_COUNTERS);
::GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc));
//printf("%d\n%d\n",dwPid,pmc.WorkingSetSize/1024/1024);

第三步,遍历程序内存。
因为上一步已经获得内存大小了,所以一个循环。
(获得内存数据之前,是否检查一下内存属性呢?我觉得应该需要,但是我这里只讲讲原理,就省掉了)
另外据说Windows一个内存页就是4kb,所以写成这样:

char key[] = {0x80, 0x7f, 0x49, 0x00};//查找的数据以及长度
int len = 4;
PBYTE pAddress = NULL;
int i = 0;
int n = 0;
for (; i < pmc.WorkingSetSize; i += 4096)
{
BYTE arBytes[4096];
if (!::ReadProcessMemory(hProcess, (LPVOID)i, arBytes, 4096, NULL)) continue;
{
if (memstr(key, len, (char*)arBytes, 4096) != 0)
{
printf("%d %d\n", memstr(key, len, (char*)arBytes, 4096), arBytes);
n = memstr(key, len, (char*)arBytes, 4096) - (unsigned char*)arBytes;
break;
}
}
}
i += n;
printf("%x %d", i, n);

现在i变量中的地址,就是我们查找的数据的地址了。


附带一个最简单的menstr函数,几乎没有优化哈。

unsigned char *memstr(char * dst , int dst_len, char *src , int src_len )
{
int i;
char *cp = src;
if (src_len < dst_len)
{
return NULL;
}
for (i = 0; i <= src_len - dst_len; i++)
{
if (memcmp(cp , dst , dst_len) == 0)
{
return (unsigned char *)cp;
}
cp++;
}
return NULL;
}



Code CE 10/08

C++实现的完整aobscan,速度很快,貌似有点Bug,需要修正。
完整的aobscan实现,我在搜索部分使用了一个高速搜索算法。


#include
#include #include
#include

/*这是一个很低效的算法*/
unsigned char *memstr(char * dst , int dst_len, char *src , int src_len )
{
int i;
char *cp = src;
if (src_len < dst_len)
{
return NULL;
}
for (i = 0; i <= src_len - dst_len; i++)
{
if (memcmp(cp , dst , dst_len) == 0)
{
return (unsigned char *)cp;
}
cp++;
}
return NULL;
}

/*sunday算法*/
#define MAX_CHAR_SIZE 257
long *setCharStep(const unsigned char *subStr, long subStrLen)
{
long i;
static long charStep[MAX_CHAR_SIZE];
for (i = 0; i < MAX_CHAR_SIZE; i++)
charStep[i] = subStrLen + 1;
for (i = 0; i < subStrLen; i++)
{
charStep[(unsigned char)subStr[i]] = subStrLen - i;
}
return charStep;
}
/*
算法核心思想,从左向右匹配,遇到不匹配的看大串中匹配范围之外的右侧第一个字符在小串中的最右位置
根据事先计算好的移动步长移动大串指针,直到匹配
*/
long sundaySearch(const unsigned char *mainStr, const unsigned char *subStr, long *charStep, long mainStrLen, int subStrLen)
{
long main_i = 0;
long sub_j = 0;
while (main_i < mainStrLen)
{
//保存大串每次开始匹配的起始位置,便于移动指针
long tem = main_i;
while (sub_j < subStrLen)
{
if (mainStr[main_i] == subStr[sub_j])
{
main_i++;
sub_j++;
continue;
}
else
{
//如果匹配范围外已经找不到右侧第一个字符,则匹配失败
if (tem + subStrLen > mainStrLen)
return -1;
//否则 移动步长 重新匹配
unsigned char firstRightChar = mainStr[tem + subStrLen];
main_i += charStep[(unsigned char)firstRightChar];
sub_j = 0;
break; //退出本次失败匹配 重新一轮匹配
}
}
if (sub_j == subStrLen)
return main_i - subStrLen;
}
return -1;
}

unsigned char getHex(unsigned char hex)
{
if (hex >= '0' && hex <= '9') return hex - '0';
if (hex >= 'A' && hex <= 'F') return hex - 'A' + 10;
if (hex >= 'a' && hex <= 'f') return hex - 'a' + 10;
return 0;
}
int GetHexValue(char *src)
{
int i, j, flag;
static char temp[1024];
for (i = 0, j = 0; src[i] != 0; i++)
{
if ((src[i] <= 'F' && src[i] >= 'A') || (src[i] <= 'f' && src[i] >= 'a') || (src[i] <= '9' && src[i] >= '0'))
{
if (src[i] != ' ')
{
temp[j++] = src[i];
}
}
}
temp[j] = 0;
src[0] = 0;
for (i = 0, j = 0, flag = 1; temp[i] != 0; i++)
{

char ch = getHex(temp[i]);
if (ch != -1)
{
if (flag == 1) src[j] = ch << 4;
else src[j++] += ch;
flag *= -1;
}
}
src[j] = 0;
return j;
}
DWORD ReadPage(HANDLE m_hProcess, DWORD dwBaseAddr, char* Value)
{
//读取1页内存
BYTE arBytes[4096];
if (!::ReadProcessMemory(m_hProcess, (LPVOID)dwBaseAddr, arBytes, 4096, NULL))
{
//此页不可读
return (DWORD) - 1;
}
else
{
//
//unsigned char key[] = {0x80, 0x7f, 0x49, 0x00};
unsigned char Value2[1024];
strcpy((char*)Value2, Value);
int len = GetHexValue((char*)Value2);
//getchar();
//注释这两行是低效的算法
//char key[] = {0x80, 0x7f, 0x49, 0x00};
//int len = 4;
//if (memstr(key, len, (char*)arBytes, 4096) != 0) return memstr(key, len, (char*)arBytes, 4096) - (unsigned char*)arBytes;
//else return -1;

//开始sunday算法
long *charStep = setCharStep(Value2, len);
return sundaySearch(arBytes, Value2, charStep, 4096, len);
}
return (DWORD) - 1; //不会执行到此处
}

DWORD aobscan(DWORD dwPid, char* Value)
{
if (dwPid == 0) return (DWORD) - 1;

HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
if (hProcess != NULL)
{
//获得内存大小
PROCESS_MEMORY_COUNTERS pmc;
pmc.cb = sizeof(PROCESS_MEMORY_COUNTERS);
::GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc));

//遍历内存
for (int i = 0; i < pmc.WorkingSetSize; i += 4096)
{
DWORD dwValue = ReadPage(hProcess, i, Value);
if (dwValue != -1)
{
printf("Found:0x%X\n", i + dwValue);
return i + dwValue;
}
}
::CloseHandle(hProcess);
}
printf("Nothing Found!\n");
return (DWORD) - 1;
}
DWORD GetGameID()
{
HWND hwnd = FindWindow("MainWindow", NULL);
if (hwnd)
{
DWORD dwPid;
GetWindowThreadProcessId(hwnd, &dwPid);
return dwPid;
}
return 0;
}
int main()
{
double begin = clock();

aobscan(GetGameID(), "807f49 00");

printf("time:%.0fms", clock() - begin);
getchar();
}



Code CE 10/08

VB实现CE的AobScan功能,仿CE字节组内存搜索.









**************************************************************************************
*
* 版权归 雨律在线 - YuLv.Net - JiaJia 所有
*
* 转载请务必注明来源于 Http://Www.YuLv.Net
*
* 加加唯一指定官方 YuLv.Net 建议用户到官方安全下载
*
**************************************************************************************


更新日志:
1、修正软件不关闭第一次会无法正常关机的问题
2、新增了重复运行软件会提示的功能
3、修正了软件的一些细节,更完善.

简单说明:显血、单文件、存绿色、占资源极小、无CPU占用、内存占用1M、不占用系统热键、方便的菜单选项

新版下载地址 WarHP++ 1.1 单文件绿色版 下载  [雨律在线 - YuLv.Net]

旧版下载地址 WarHP++ 1.0 单文件绿色版 下载  [雨律在线 - YuLv.Net]



  经过最近一个星期对M8se的研究,我常开wifi玩弄,不到一天就要一冲。据说当电话用的话可以两天,关键是我要玩啊,所以需要想办法省电。好了,大家直接看下面吧~

0、下一个"待机助手",它的"待机"功能会把一些后台功能给关了,很不错。
1、不关机,晚上睡觉打飞行模式。
2、屏幕亮度20%左右,关闭环境光感应,其实太亮对眼睛不好。
3、设置搜索网络,你是移动就选移动,联通就选联通。别用自动搜索,经常搜网络信号会费电。
4、不用的时候关掉WLAN、蓝牙和GPRS、EDGE。
5、设置声音,把不需要的关掉,设成渐强音。
6、把常用功能放在桌面第一页,以免经常滑动桌面变换图标。
7、检查任务管理器,把不用的给关了。



  在M8上运行较大的程序的时候总是会出现一个无系统UI风格的沙漏,虽然就是那么1秒钟的时间,但是还是感觉有点不爽。不说废话,想去掉它就按照下面的步骤去做。

  用优化精灵进入系统工具的注册表编辑中,找到 HKEY_LOCAL_MACHINE\SYSTEM\GWE 项,然后“新建”一个 Dword 值为“DelayCursorTimerQuantum”,并设置为“4294967295”(也就是FFFFFFFF,注册表里Dword最高值,换算成10进制的结果),最后重启试试看是不是已经没有烦人的沙漏了?嘿嘿~

  这里还要说明一下添加这个值的意思是“如果程序连续执行(指处理数据等,不含等待输入)超过给定时间(毫秒),就显示沙漏(让使用者明白)。设置成最大值以后,要等4294967295毫秒(约1200小时)以后才显示沙漏。没有哪个软件有这么恐怖的执行时间吧,电池都顶不住,哈哈。