日期 : July, 2008

PE学习工具及配套材料

PE结构的学习,对分析未知程序、软件的手动脱壳以及扩展程序功能等都有莫大的帮助,对提高程序开发人员的内力大有帮助,所以这两天在查看这方面的资料,系统的学习一下是很有必要的。在网上找到两款辅助资料,一个就下面这张结构图,另一个就是Stud_PE分析工具。

让指针不再困扰你[转]

作者:moonwalker

原文地址:http://bbs.bccn.net/thread-211258-1-1.html

能将指针讲成这样,也算有才了。by lonkil

声明:moonwalker 作于2008年4月26日 转载请注明出处
指针对一部分初学者来说一直是一个无法逾越的障碍,没有指针的C语言就好像没有左腿的短跑运动员。今天我来试试换一种方法来理解指针,希望能帮还在为指针挣扎的朋友们理清思路,高手略过即可。
我们先认为内存是一家客栈(看起来这和老掉牙的大楼的比喻没什么区别,但是请你耐心看下去)。
同大部分的客栈一样,这家客栈有天、地、人等各种档次的房间,用现在的话就是单人间、双人间、四人间等等。来住店的客人也是车水马龙,三教九流都有,我们看看都有哪些人:
快乐单身汉char,还有char的小弟unsigned char,他们只住单人间;
short int, unsigned short int都是已婚无孩,他们只住二人间;
int, unsigned int, long int, unsigned long int,这些都是四口之家,当然住四人间了;说起来这里面的前两位,int和 unsigned char,在dos时代还是二人世界,住二人间,后来出了32位系统后,他们才成为四口之家,等到了64位时代,他们中有人会变成8口之家。人口变化太快,所以人口问题就不讨论了,只要知道有几口人(几个字节)就住几人间就行了。

程序自修改实现[转]

作者:combojiang
地址:http://hi.baidu.com/combojiang/blog/item/b58750137ac144d6f6039e3c%2Ehtml
说明:如果需要正常演示出程序中的结果,请使用原作者要求的IDE和编译版。本文只演示了程序自修改的实现过程,由于不同的编译器生成PE文件的偏移不一样,请原作者的要求来演示。
当然这篇文章与实际应用还是有很大的距离的,RepalceMentProc的长度不能比CalledProc();长的太多,虽然在中间补了EndCalledProc,但也不能太长。可不可把修改的代码放到堆上,然后将CalledProc的地址改过去。有时间测试一下,嘻嘻。by lonkil

高精度计时器,计算代码执行时间类下载

下午闲着无聊,写了一个类,用于统计代码执行时间。本类采用高精度计时器实现,主要有两个函数。

1.QueryPerformanceFrequency该函数MSDN的解释是:The QueryPerformanceFrequency function retrieves the frequency of the high-resolution performance counter, if one exists. The frequency cannot change while the system is running.我的理解是统计出一秒内CPU的执行频率。

2.QueryPerformanceCounter该函数MSDN的解释是:The QueryPerformanceCounter function retrieves the current value of the high-resolution performance counter.我的理解是当前CPU执行的次数。

因此我的这段代码的主要思路是:在要统计的代码块之前,用QueryPerformanceCounter一次记一个counter,在代码使用之后再使用一次QueryPerformanceCounter得到另一个counter,两者相减除以一个QueryPerformanceFrequency就是执行所需要的秒数。

但是如果遇上一个骨灰级的机器加人品又不好,不支QueryPerformanceFrequency和QueryPerformanceCounter怎么搞呢?我在代码中使用了timeGetTime这个毫秒级的计时器来解决计时问题。如果timeGetTime还不支持呢?对不起本类只能运行在Windows平台下,谢谢。呵呵。

md5类代码

MD5算法是一种消息摘要算法(Message Digest Algorithm),此算法以任意长度的信息(message)作为输入进行计算,产生一个128-bit(16-byte)的指纹或报文摘要(fingerprint or message digest)。两个不同的message产生相同message digest的几率相当小,从一个给定的message digest逆向产生原始message更是困难(不过据说我国的某个教授很善于从message digest构造message),因此MD5算法适合用在数字签名应用中。MD5实现简单,在32位的机器上运行速度也相当快,当然实际应用也不仅仅局限于数字签名。

sourceforge.net又回来了

超强的大开源站点sourceforge.net,前段时间被无情的和谐了。是不是因为NotePad++作者在sourceforge上发一篇关于奥运很不和谐的文章,就不得而知了,这次SourceForge的正常访问不知道能正常开通多久。前两SorceForge上不去,可把一个孩子急坏了。

想想那孩子也够纯洁的,不讲VPN了,居然不带个套或porxy之类的防护措,就在网上混了,真佩服他的勇气。

最近的互联网是不太安宁的呀,DNS漏洞炒的沸沸扬扬。某牛说危害很大,破坏力极强;某牛说利用率极低,几乎猜中ID的可能性比中500万大一点。这就郁闷坏了我们这些安全门外汉了,到底哪个是对的呢?也许两者都是对的,如果成功利用后破坏力真的不可估量的。

前两天马云给阿里人的一封信“准备迎接互联网的冬天”,接着马化腾也发表了类似的文章,看样了今年颇不安宁哦。大道理我等小挨踢不懂,不过是感觉到全球的经济今年的问题是不小,汗。08乃多事之秋也。

VC中使用内联汇编

这几天狂懒,什么事都不想做,什么地方也没去,一直在CSDN转转,居然看到03年刚学VC时在CSDN发的第一贴,那个菜呀,现在看来真的很好笑,那段时间真的太痛苦了,没人问没人学,就一个人闭门造车,后来开始混CSDN,一直到在水源混成星星了,后来就去的少了。还好走过来了,没有放弃。

不同的生活方式

前几天早上上班,在公交车上,车到五里墩(合肥的和第一座立交桥,号称五里飞虹哦,不过现在合肥也不知道有多少座立交桥了,合肥发展不小。),罗牛人叫我看窗外,就看到下面这幅图(我的摄影技术有所提高哦,当即掏出手机,在行驶的公交上拍下的,手有好稳嘛,嘻嘻)。这位仁兄旗后面标上这几个大字“单行者,欢度奥运走单骑。”。当时正是上班的路上,给我和罗大侠,不少感触,每个人都不同的生活方式,像我等这样的“爬格子”的打工仔,每天日出而作,日落而息,连陪MM出去看一场“赤壁”的时间没有(严格来说是没心情,每天累得和死狗一样,^_^。),哪还有时间搞什么单骑呀。像我等挨踢盲流(罗大侠除外,^_^.),整天不知道忙些什么,总之一条为了生活。时间是有的,要学的东西还很多,每在忙完了工作,三心二意的胡乱学点东西,就这样天复一天,周复一周。看着人家开着奔驰,驾着宝驾马,心里那个痒呀,自己到现在一个窝还没有呢。伤~~~~~~

VC产生足够随机的随机数

随机数在游戏开方面很有用,可惜MS直接提供的Rand,产生随机数不够随机,特别在循环中连续生成,如果以时间作为随机种的话,就显得格外的不随机。
我找到一款开源的产生随机数的库,可以产生整型和浮点随机数,速度还不错。而且作者制作了一个Lib库,经过汇编优化过的,效率比源码的要好。由于原作者发布的代码没有工程文件(老外很多代码没有工程,可能兼容不同平台吧),我建了一个工程,供各位VCFans测试。

如果想了解源码方面的资料,可以访问原作者的网站:http://www.agner.org/random/

SourceInsight字体颜色样式配置文件下载

如果你项目的代码量以万为单位进行计数的话,如果单纯的以VS这样的IDE来管理,你看的话会累死人。SourceInsight是个不错的选择,虽然它对中文的支持不是太友好,不过怎么办呢,一个字忍了。

SourceInsight默认的配置不太适合我等的谓口,需要重新进行配置。我在网上查了这方面的资料,自己改了一份。供大家下载。注意我的开发路线一直沿袭微软IDE的风格,所以对VS的着色和风格不感冒的话请飘过。你也可以根据自己的实际需求在此基础上进行修改,在你所想修改的部分点右键,选择”Style Properties”进行修改。

曾经的课堂上你是怎么打发时间的?

曾经的课堂上你是怎么打发时间的?认真真的听老师的每一节课?上课开会儿小差?整两整武侠或言情?和MM or GG整两封信表达一下仰慕之情的?总之,曾经的课堂生活可是丰富多彩的。反正我当年上课是没有做出什么出格的事,最严重的一次就是在后面和同学下象棋,被班主任罚站了两个多小时。其它遇到无聊课程的时候,基本都是在草稿纸上“练字”,说来惭愧现在连自己名字都写不好了,真是应了那句话:“好好的一手字,让键盘给废了。”

看看下面这位仁兄是怎么在课堂上打发时间的?真是佩服佩服,这个世界不缺乏牛人,有的就是强人,妙思妙想者,技术牛X者,可谓便地都是。

下面数据传载自“有意思吧”。

堆和栈的区别 (转)

原作者已无法考证,感谢作者。 by Lonkil

堆和栈的区别
一、预备知识—程序的内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 – 程序结束后有系统释放
4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。

IPhone基于Air的模拟器出来了

IPhone3G还没出来,就已在网上被炒的沸沸扬扬,各种高级玩法视频在几大视频网站上屡见不鲜。搞得国内的一些发烧友们兴奋不已,就是在国内买不到(为什么不在国内发行?怕国内的“山寨王”了?),呵呵。前两天一个时尚MM菊总,还问我能不能搞到IPhone呢说就299$可以接受,想整一部玩玩。

本人比较老土,还是那句老话,不喜欢做小白鼠,对一新的电子产品,主要注重性价比、质量、可扩展性以及功能。对花稍的界面,都不太感冒,因为我知道那些是需要花费大量系统性能为代价的,性能就是我的追求。

这次在网上出现了IPhone的模拟器,试用了一下,也就是外观的模拟。感觉还行,模拟器也差不多就这个样子。这款模拟器是基于Adobe的AIR 的,看了几款AIR做的东西,那效果不是一般的好。Adobe是很牛,灭掉了Macromedia,图形图像方面Adobe牛是不用讲的了。

获取硬盘序列号

在网上找到一份取硬盘序列号的类,原作者已经无法查证了。这个类的作用就不多说了,至少可以一定程度的防止软件的任意Copy。

我在其中作了一处修改,因为原作者采用了MFC中的CString,在SDK下面使用不便,我就简单的修改了一下。

本站2008年的第二次大规模变动

本站的前两的程序是我自己写的,第一个版本用ASP做的,第二个版本是ASP.Net做的。由于种种原因我还放弃了采用自己制作的系统,采用WordPress的这套Blog系统。朋友都说这样的不利于搜索引擎的搜索,整天变来变去的。管不了那么多了,我站我作主,还让搜索引擎说三道四呀,呵呵。