贴个CHDEMU最新的开发图

昨天达成了一个checkpoint,即物品系统基本操作逻辑的完成。包括物品的获取(目前是通过GM作弊命令)、销毁、分发、装备等。

其中物品装备的逻辑还是有点难度的,因为装备栏有的物品是占用两格(双手武器)或三格(时装衣服),装备物品时要判断冲突,想当然写了几遍都有逻辑漏洞,最后不得不在开发笔记上列举所有的冲突情况才总结出与原版的服务端一致的逻辑(算法)。

目前所有的代码都是重构过的了,采用的是与官方相同的编码规范(不要问我从哪儿得到的官方编码规范),即变量全部为匈牙利命名法(驼峰法,有前导数据类型字符),函数全部为首字母大写。如m_fPosX、GetPosX()、m_sObject[……]

Read more

再次对付WordPress文章ID

我严重怀疑这个ID是WordPress开发者故意弄的,这个这个这个必须是逼疯强迫症病人的大杀器啊。。。

曾几何时为了这个文章ID做了不知多少事:
关闭Revision
关闭Auto Draft
冒着丢失几千字的风险关闭自动保存
甚至不惜影响交叉链接和搜索引擎收录而完全重排文章,几乎相当于重新建站

然而最近三观又有改变,喜欢简约风格,把主题给换了不说,而且还不再用Live Writter写文章了而改用dashboard里的在线编辑器。用这个当然不敢再一直冒风险关着自动保存,所以又把保存给打开了。而这样可能过几天发现ID又会呼啦一下跳很多了。所以今天决定再次对付一下文章ID的问[……]

Read more

某某视频平台加密视频的解密

说实话这种玩意发出来对我没什么好处,但是本着高尚的自由主义精神,还是稍微发一下。

严重鄙视一位同行写出了类似程序但“解密一个视频收费XXX元”的行为。

做网站的也程序员也挺不容易的,所以在此不点名是哪个视频网站。不过还是要吐槽一下:你们号称的“独创的DRM视频版权保护”能不能不这么垃圾,就把FLV文件用对称加密处理一下文件头有意思伐,Adobe官方出的DRM系统你们倒是有没有了解过。
static void Main(string[] args)
{
var fs_pcf = new FileStream(args[0], FileMode.Open, FileAcc[……]

Read more

GhostCHD网络封包引擎用户层过LaTale台服nProtect

这篇文章其实不能给外挂初学者带来什么帮助,因为我的目的不是调试NP保护下的游戏来找call什么的——事实上,在国服待的几年我已经把这游戏研究透了,不夸张地讲给我一年的全日制时间我能自己逆向写一份这游戏。

GhostCHD引擎只有一个功能——分析游戏的通信协议、然后自己发包。辅助软件坚决不读写游戏内存,即便是当年发布的GhostCHD辅助实际上也是一个小型的独立游戏客户端,而不依赖游戏本身。说白了就是脱机挂。脱机版本的GhostCHD我没有发布过,不过当年接代练生活技能就用的是脱机的,一天能同时接五六个单子,最后受不了的是宽带带宽的说。

这使得我的思路受NP的限制不大。众所周知NP主要防的是[……]

Read more

CHDEMU彩虹岛模拟器v1.00发布暨使用说明

(一)项目声明、与“私服”的区别、与运营商的关系准则

CHDEMU是大型多人在线角色扮演游戏(MMORPG)La Tale(中文名:彩虹岛)的单机与局域网模拟器。网络游戏La Tale由韩国Actoz开发,中国大陆区域于2007年至2012年由盛大网络代理运营,2013年以后由盛大游戏独立研发。以上组织视具体情况拥有该网络游戏的合法版权。

本项目由本人,即此博客博主、曾经的资深彩虹岛玩家、现上海师范大学音乐学院钢琴系研究生gmsj0001同学独立开发,初衷是当游戏停运或线上虚拟社会发展不乐观时能够帮助老玩家在线下找回曾经美好的回忆。项目所有服务端代码均为自主研发,中国大陆区目前没有[……]

Read more

UNICODE_STRING到wchar_t*的转换

这两天做了点Native API的东东,很近似驱动了。以前没有接触过驱动方面的东西,结果今天程序出了莫名其妙的bug。还好只是native api而没在内核,不然估计要看一天的蓝天白云下的雪崩了。

代码是注入的钩子,由于加载很早,先于exe本身的启动,故无法以dll注入的方式实现,只能以动态代码注入的形式,这样一来就无法在C语言级进行调试,只能通过反复的注释掉代码或插入CC指令、编译运行然后附加调试器的方法调试。

最后发现问题出在从UNICODE_STRING到C字符串的转换上。

开始是这么写的,并且90%的情况都能工作正常。

const wchar_t *str = punistr-[……]

Read more

VC++类成员函数委托(第一版)

前置博文:

2010.10.3:《有关C++类成员函数的指针调用》

2012.12.18:《C++成员函数回调的一种实现》

本研究为XDL项目(Xiaofei Development Library)的一部分。

 

实现基于X86动态代码的函数委托,并提供基于模板类的代码中显式调用。

目前实现的功能:

1、除pascal外任何调用约定的C++类成员函数通过cdecl调用约定的C函数指针进行调用的适配器。

2、thiscall调用约定的C++类成员函数通过stdcall调用约定的C函数指针进行调用的适配器。

其中1多用于代码中调用的委托,2多用于系统API传入回调函数[……]

Read more

C++成员函数回调的一种实现

成员函数回调即C语言函数(如Windows API)调用C++类成员函数,相当于C#中的委托。

实现这个功能有两个难点,一是C语言中不允许从成员函数指针到万能指针void*的类型强转,这个可以通过union来绕过。

第二是从C调用带this指针的C++要求每个函数C函数指针能够保存不同的this指针。这个必须通过动态代码技术实现。

这两个问题记得都困扰了很久,今天终于写出一种方案,能够简单地将stdcall调用约定的C函数转到thiscall调用约定的C++函数,这样便能实现WindowProc直接窗口子类化到类成员函数中,而不需要再通过窗口句柄hash表来查找窗口类指针。动态代码也很简[……]

Read more

防调试代码

程序功能:“断线程”技术防调试
运行平台:x86 & x64
编写时间:2012.12.13-2012.12.14
参考资料:毕业设计第一版、《加密与解密》、网上的一些x64平台资料
00401013 |. 60 PUSHAD
00401014 |. 6A 00 PUSH 0
00401016 |. 6A 00 PUSH 0
00401018 |. 6A 11 PUSH 11
0040101A |. 6A FE PUSH -2
0040101C |. 33C9[……]

Read more