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

有关__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

很无耻地给部落格设了个古老的Rayman头像

由于近期弄了个shnu的宿舍校园网拨号
然后几个同搞H3C的童鞋就盯上了我
然后评论数暴增
然后我就对空白的头像越看越不顺眼
然后就给设了一个
恩,就这样
常驻我Blog的@CacheWang与@rAYz两位童鞋,你们也去设一个吧 = =
传送门:http://gravatar.com[……]

Read more