【原创】有关脱机外挂调试中利用WSADuplicateSocket保持定时发送心跳包的方法

有过脱机外挂编写经历的童鞋们大概都会遇到一个很纠结的问题,现在大多数游戏都要求客户端每几秒给服务器发送一个数据包以确定是否掉线,这样一来在调试程序的时候,无论是对客户端的逆向调试,还是对自己外挂的调试,一旦下了断点程序暂停后,如果不能在短短的几秒中恢复程序运行,那么游戏就会掉线。

在彩虹岛中,心跳包的发送间隔是10秒,我发誓这个问题困扰了我两年。。

比较容易想到的是,看有没有办法能直接截取数据链路层的raw packets,再看看有没有API,或者直接操作网卡驱动来模拟封包。然而这对计算机网络知识要求很高,并且貌似Windows下raw packets的操作很少很少,并且有各种各样[……]

Read more

Visual Studio 2008中统计代码行数

想必任何一个写程序的孩子都想对其他人炫耀:我的XXX程序代码量是多少多少~~

以前,我一直数代码的字数,很简单,到代码的目录里,按类型排序,然后把代码文件拖在一起点属性,哇塞,高三写的GMSJ网站有5万多字,正在写的LibCHD有7万多字了~~

但是呢,江湖上,貌似大家都爱说代码行数……行数这东西很不靠谱,写很长很长也是一行,写个int i或者干脆一大括号也叫一行(有关此方面的缩水可参见古龙的武侠)。。

于是呢,各种代码行数统计的工具、插件如雨后春笋般……(此处省略1000字)

其实呢,完全不必。其实VS自己就带有统计行数的功能。。(众:不是吧。。)只是你们不会用而已。。(众扔橘子。。[……]

Read more

细节决定一切——由一个函数声明引发的诡异崩溃

今天LibCHD成功登陆游戏,遂使用Release编译并在VB中调用,结果立崩,开始还以为是VB的问题,但是用C++调用居然也崩,而Debug编译没有出现任何问题。VC挂载后发现崩溃出在recv的thread中,但调用堆栈看不出哪里崩掉的。然后用OD挂载,崩溃现场显示堆栈已溢出,但调用框架还能看出,从堆栈最下面往上翻,总算找到一个返回地址在我的DLL里,看出来是在DynCode解密的调用中崩掉的。语句为pFuncDecrypt(Pac.Data, Pac.Length – 4);但是解密为什么会崩掉。我所了解的SDDynDll只有可能在线程不同步,同时进入加解密才会出问题,而这段代码已经是在E[……]

Read more

有关C++类成员函数的指针调用

今天做libchd中,在写thread的时候,突然厌烦了重写run虚函数的那种thread,而怀念起了vb时代的addressof操作符,于是想能不能通过指针调用类的成员函数做一个通用的thread类,遂开始捣腾。。

首先,想到一个办法,看能否将一个函数指针声明为void(__thiscall *pFunc)(void),然后在类的构造函数中传入一个这样的类型,结果试了&a.Func,编译错误,再试&A::Func,提示void(__thiscall A::*pFunc)()不能转换成void(__thiscall *pFunc)(),失败。。

然后,又想到一个办法[……]

Read more

无意中发现一个有趣的下断方法~

今天无聊去做LibCHD,参考ArcEmu中的一些代码,无意中看到一行被注释掉的这玩意:
__asm int 3;
很好玩~~IDE中调试倒是用不太上,但是如果自己做一些assert什么的应该就有用了~

不知此文所云的同学回家复习汇编去~[……]

Read more

C++调用COM组件

COM是复杂的,尤其是对于C/C++这样的和COM无关的语言(VB、Delphi、E语言等快速开发工具都是从内核支持COM/ActiveX的)。

一般情况下,在C++中,一个COM组件的调用要经过以下步骤:

1、包含头文件
2、使用CoCreateInstance创建对象并获取接口指针
3、调用组件方法,夹杂着大堆的类型转换等工作
4、手工管理对象生存周期

代码看起来灰常灰常的复杂。

事实上,VC给我们提供了一种和VB一样直观的方便的调用方法。

如VB中写:
Dim http As New XMLHTTP
http.open “GET”, “http:/[……]

Read more

我里个去。。以后就用MSXML了。。

今天想到要长远考虑,做一套完善的用户验证系统。

突然就想到XML技术,想把信息的POST做成XML格式,PHP对XML想必支持也很好的。

遂用VB对象浏览器打开msxml6.dll,好多好多的组件。。

突然看到一XMLHTTP类。

…………

于是发现,原来费多大力气的HttpPost验证,一步步调用WinINet API的那种,居然可以到手不费吹灰之力。。

太不可思议了。。。。。。
Private Sub Command1_Click()
Dim http As New XMLHTTP
http.open “GET”, “http://[……]

Read more

MTU设置造成VPN无法正常工作

今天要上youtube去找某位高人听写出来的Rayman3一个CG的字幕,结果发现上不了,更悲剧的是发现几乎所有的网站,如Google、youtube、twitter都上不了,但奇怪的是百度和我自己的网站能上。

开始以为是自己电脑上的360耍流氓了,就到室友电脑上上,发现故障依旧。

然后开始疯狂Google。得到什么在Windows配置和VPN配置里把什么加密给关掉,照做,未果。

突然在一条回复上看到有人提到了MTU这个词,遂想起前几天因为某人的WOW需要,好像是在路由器上改了什么MTU。当时我还一直问某飞MTU是啥MTU是啥,他也不告诉我。

于是问Google。MTU为Maximum[……]

Read more

解决搬家后Discuz积分兑换问题

搬家后Discuz积分兑换突然出了问题,表现在点击兑换后无响应,用抓包工具查得1多分钟后返回500错误。

这可急坏了,这功能可是俺用来赚钱的。。

经过很久很久,通过在各个php文件中插入file_put_contents("debug.txt","xxxxxxxxxx");跟踪,从memcp.php,到uc_client/client.php,最终查得阻塞在通过HTTP调用ucenter/index.php中网络文件的fget上。

开始以为是不是ucenter出问题了,然而输出到debug然后用nc手动请求ucenter却是一切正常。

到这里就突[……]

Read more

给Blog装上了WP-PostViews

统计点击量的。代码插到哪里斟酌了许久,最终选择了首页文章标题分类、Tag后“Edit”链接的位置,而将原来的Edit链接注释掉。反正现在也不再到后台写文章了。现在装上点击量自然都是0,看以后能有多少。其实主要还是有些担心以后文章怎么转移,老美的空间太慢,想在国内再弄一个,还怕数据丢了。。后台数据库已经涨到十几M了吧。唉。So be it.

[……]

Read more