【原创】内核内存空间中执行Ring3代码

很久很久以前,我系统还是XP的时候,自己的机子不知道因为卡巴还是蓝牙驱动的问题,每次对LoadLibraryA下断都会发现LoadLibraryA不是原本的LoadLibrary,而是只有一小段代码然后是一个inline hook的jmp,最出奇的是这个jmp的地址是大于0x80000000的,这导致我没法按Ctrl+F9执行到retn!(因为Ctrl+F9是单步执行,单步到80000000后就挂了)。

又有一段时间研究NTVDM.EXE,想知道DOS程序是怎么被执行的,发现是直接按DOS下的方法在00000000处开始映射内存(后来知道这是V86模式),只是中间又遇到了一个诡异的调用——我[……]

Read more

刚刚用上WinDBG,玩起来比OD刺激多了~~

举个例子吧——taskmgr就是通过这样的调用框架杀掉进程的~~

f889f808 80583394 nt!PspTerminateThreadByPointer+0xa8
f889f834 804df7ec nt!NtTerminateProcess+0xd5
f889f834 7c92e4f4 nt!KiFastCallEntry+0xf8
0007f5d0 7c92de5c ntdll!KiFastSystemCallRet
0007f5d4 7c801e3a ntdll!ZwTerminateProcess+0xc
0007f5e4 0100c22c ke[……]

Read more

Active Context及XP主题支持

博主按:

在对HTMLUI中HTML插入Windows的ListView控件时发现,IE8页面中的控件无法获得主题效果。用ResHacker打开iexplore.exe发现没有嵌入manifest清单,所以IE8不支持主题控件效果。

然而Internet选项的对话框是却有主题效果的!用Process Explorer查看iexplore.exe进程,发现5和6两个版本的comctl32.dll均被加载,即同进程中实现了site-by-site部署。

很显然,这使得EXE没有XP风格,但在DLL或ActiveX控件中实现XP风格有了机会。STFW很久后发现此文,讲的简单到位,转载以收藏。

[……]

Read more

【转载】蒙牛也做了一个艰难的决定。。。。。。。。。。。

蒙牛做了个艰难的决定,如果监测到用户胃里有伊利牛奶,将自动释放三聚氰胺。

阿迪做了个艰难的决定,如果检测到用户身上有耐克,衣服鞋自动变透视装。

安尔乐做了个艰难的决定,如果检测到身上有其他品牌的卫生巾将自动焚毁。

诺基亚做了个艰难的决定,如果探测到10米范围内有iPhone,将启动自爆程序,毁灭10米内一切物体。

麦当劳做了个艰难的决定:如果检测到用户身上有肯德基的优惠券将自动对所售汉堡进行焚毁处理。

惠普做了一个艰难的决定,如果局域网上有任何非惠普电脑存在将自动发起黑客攻击。

百度做出了个艰难的决定,如果检测到用户电脑里有谷歌公司的软件,将自动启动电脑硬盘自动格式化程序。

可口[……]

Read more

【原创】有关脱机外挂调试中利用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