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

有关__declspec(property)的多态性

MSVC为了方便C++编写COM客户程序引入了property关键字。可能有些人不知道VC有这个功能,但是property的概念相信大家都清楚。例如:

class A
{
public:
int _width;
int get_width()
{
return _width;
}
void set_width(int value)
{
_width = value;
}
__declspec(property(get=get_width,put=set_width)) int width;
}

int main()
{
A a;
a.width = 3;
in[……]

Read more

抽风的路由器

昨天回来路由器挂了,频繁的出现wifi挂掉、死机、自动重启等情况。系统设置方面折腾半天无果(事实上就没能进几次设置,22端口一连就重启)。推测是RAM或者ROM哪块出了点小毛病。

于是只能进安全模式复位系统。但是依旧不稳定,估计是复位影响不到的ROM有毛病。

考虑重新刷。恩。经过几次刷机,终于不会抽风死机了。恩。找出以前的配置手记一点点弄——装ip、macvlan软件包啊,建虚拟网卡啊,拷贝以前写的拨号程序啊,新建一个interface加入防火墙的wan区域啊。我确信所有的步骤都和以前一样,但是——

路由器上了网电脑上不了。。。电脑ping外网显示Destination port unr[……]

Read more

吐槽一下HDD Regenerator的防破解技术

前几天因为以为几次蓝屏是硬盘的问题而装上了以前用过的HDD Regenerator 2011破解版,然后这软件给我推送了更新的版本,就上网更新了下。

由于现在用的破解版是Patch形式而不是KeyGen,所以新版自然没有破解。出于好奇,就想自己破破看。

我的目标很简单,HDDREG不是有写到U盘上的DOS版本么,我只需要找到注册版的这个DOS程序就够了。

事实证明,我手贱了。。。这是我接触逆向这么多年来碰到的最厉害的软件保护。

==================华丽丽的分割线==================

用winhex看了下安装目录下个各个文件,发现DOS版本是放在DSCK[……]

Read more

针对笔记本键盘Fn+字母键不能打出数字的终极解决思路与一种实现方案

前几天用Finale打谱需要用到小键盘的数字键,然后发现Fn键加uio等字母按不出来数字,实际出来的是NumLk没有打开情况下的方向键与PgUp和PgDn等。如果打开键盘的NumLk,按字母键可以打出数字,但我需要的是Fn直接能打出小键盘数字,这样在许多地方才方便,之前用过NEC、DELL的笔记本都能做到。

很容易可以想到,之所以会打出方向键是因为Windows认为NumLk在关着。开始并没觉得这个问题很严重,就去问了下谷哥,参考到这篇帖子:

http://acer.it168.com/thread-2136449-1-1.html

该帖子提到可以通过按外接键盘上的NumLk来激活Win[……]

Read more

解决MeGUI有时出现的StackHash崩溃问题

无聊想压一份Lord of The Rings,结果写了AVS结果在MeGUI中载入会导致崩溃,故障模块显示为StackHash_XXXX这样的字样,但是Windows中并没有这样一个模块。

Google得到的信息并不多,有这一篇文章引起了我的注意:

解决WIN7出现stackhash APPCRASH问题(故障模块名称: StackHash_af76)

虽然不确定是不是如文章所说的DEP问题,但还是按照文章的做法试着添到Windows的白名单中,结果提示此程序不支持关闭DEP保护类似这样的字样,无法添加进Windows的例外。

立即联想到PE文件头中有一个IMAGE_DLL_CHAR[……]

Read more

做了份School Days的DVDRIP,以及再次重新压制了一套EVA

首先吐槽一下我爹这破电脑,五年前的Dell 640m,实测压制848×480的片子速度仅3-4fps,压一集动画片要两个多小时,比i3 530要慢5倍左右。下面正题。

假期宅了几部岛国动画,觉得School Days很不错,遂决定收藏。但HKG字幕组发布的DVDRIP版使用的是24/60变码率封装,不喜欢就此收藏。变码率主要是为了解决片尾滚动字幕导致的24p/30i混合难以进行反交错的问题,但只有mkv支持这种封装,并且由于并不标准,若不进行任何修改直接用作片源转码则必定会出现兼容性问题(目测优酷上的高清版School Days声音与图像不同步完全无法观看就是由于这个原因)。然而找不到更好的[……]

Read more

WRT54G的河南联通PPPoE拨号设置手记

由于实在忍受不了家里无线路由的丢包率,抱着赌博的心态在TB上淘了个WRT54G V4。WRT54G这款路由器不用多做介绍,一代经典,堪称“机王”,尤其是V2到V4版本。此机早在07年就已停产,但远远不能满足人们对cisco一代经典的追求,于是万能的天朝商人便打起了山寨的主意,之所以说是赌博便因为目前TB上WRT54G与WRT54GS买到山寨的概率远远高于买到二手真货的概率。我本来就赌它是个假的,只要比我现在用的无线好并且能编程折腾就行,来了就拆机看电路板,结果居然是真货!并且是WRT54G-CN V4的大陆行货!!!恩,恭喜我中奖。。。

因为用不上太多功能,所以目前不急着刷系统。[……]

Read more

XDL Project

Xiaofei Development Library,简称XDL,中文名只可意会不可翻译。

开始这个项目的起因很简单,就是前不久的一天接到一个游戏上的活儿,工作很简单,就是让游戏不掉线,核心就几句代码就搞定,结果愣是折腾了一下午,原因是主程序端还是用VB6做,而这次要弄的是socket api,一个个地声明各种函数与结构我里个艹,最后把我都要写吐了,发誓再也不要用VB6写东西了!!!

那么又回到了原来那个问题,用C的话选择什么界面库。据说这个问题曾经引发过“血案”——本人坑爹的考研就是一年前拜此问题引发的项目把脑袋搞炸所赐。

如果需要个完善的界面框架,在Windows本机代码下其实是还[……]

Read more