奇迹之海

逝者如斯
网志分类
· 所有网志 (19)
· 读书 (6)
· 动漫 (0)
· 摄影 (1)
· 流血的仕途注 (4)
· 生活 (4)
· 技术 (4)
最新评论
· 06/22 G你不赖呢。儿...
· 06/22 最早看到这个故...
搜索本站
友情链接
· 我的歪酷 非非共享界

订阅 RSS

0001244

歪酷博客


奇迹之海 @ 2008-06-29 05:18

看了同学写的一篇回家的网志,想起4年前回家的感觉,与她相反,那个无比熟稔的城市是如此的陌生,我一个人做在图书馆前的阶梯上,眼前车如流水人如潮.......,而我却空前的无依,偌大的一个城市,我唯一可以去的地方竟然只是我的家.
我决定还是将我的想法画下来,家,对男生女生是不同的,于是就有了下面的两个版本.
第一次用photoshop作画,之前我连怎么用photoshop画个正方形都不会,这次用我笨拙的手指在笔记本那小巧的触摸板上画了许久,男生版用了几米的人物.这一番折腾,起码会用钢笔了.

城男生版
男生版

女生版
失城-女生版



 
奇迹之海 @ 2008-06-25 00:17

问题总是不只有一种解法,今天想办法可以继续使用shimadzu的LCsolution.本想用正道破解的,但我的汇编实在是不过关,当年上课真的没搞懂.下面转贴了两篇技术文章,说起来容易做起来难,真正去看exe的汇编代码时,实在有太多的跳转,不管怎样,慢慢来吧.



 
奇迹之海 @ 2008-06-24 23:25

从本章开始,我们来一步一步学习Crack软件(80%读者昏死过去,且不省人世...另有20%在寻找附近可以用来打人的东西)

不可不说一下学习破解的三个阶段:
初级,修改程序,用ultraedit等工具修改exe文件,称暴力破解,简称爆破
中级,追出软件的注册码
高级,写出注册机

先说这爆破。所谓爆破,就是指通过修改可执行文件的源文件,来达到相应的目的。你不明白?呵呵,举个例子好了,比如说某共享软件,它比较用户输入的注册码,如果用户输入的,跟它通过用户名(或其它)算出来的注册码相等的话(也就是说用户输入的注册码正确了),那么它就会跳到注册成功的地方去,否则就跳到出错的地方去。

明白过来了吧,我们只要找到这个跳转指令,把它修改为我们需要的“造型”,这样,我们是不是就可以为所欲为了?(某软件双手放在胸口,你要干嘛?)
常见的修改方法有两种,我给你举例说明:
no.1
在某软件中,这样来进行注册:
00451239 CALL 00405E02  (关键CALL,用来判断用户输入的注册码是否正确)
0045123D JZ 004572E6   (!!!<--此为关键跳转,如果用户输入的注册码正确,就跳向成功处,即004572E6处)
0045XXXX YYYYYYYYYY
XXXXXXXX YYYYYYYYYY
XXXXXXXX YYYYYYYYYY
XXXXXXXX 执行到此处,就提示用户注册失败
...提示用户注册码不正确等相关信息
...
004572E6 ...  <--(注册成功处!!!)
...提示用户注册成功等相关信息
呵呵,看明白了吗?没有的话,我来给你讲一下。在软件执行到00451239处的时候,CALL置0045E02处来进行注册码判断。接着回来后就来一个跳转语句,即如果用户输入的注册码正确就跳到004572E6处,跳到此处,就算是注册成功了。如果用户输入的注册码不正确的话,那么就不会在0045123D处进行跳转,而一直执行下去。在下面等它的,是注册失败部分。

想明白了吗?嘿嘿...没错,我们只要把那个关键跳转JZ给改为JNZ(如果用户输入的注册码错误,就注册成功,输入正确则注册失败)。当然你也可以将JNZ修改为Jmp,这样的话,你输入的注册码无论正确与否。都可以注册成功。
no.2
我们再来讲一下另外的一种情况:
00451239 CALL 00405E02  (关键CALL,用来判断用户输入的注册码是否正确)
0045123D JNZ 004572E6   (!!!<--此为关键跳转,如果用户输入的注册码不正确,就跳向失败处,即004572E6处)
0045XXXX YYYYYYYYYY
XXXXXXXX YYYYYYYYYY
XXXXXXXX YYYYYYYYYY
XXXXXXXX 执行到此处,就提示用户注册成功
...提示用户注册成功等相关信息
...
004572E6 ...  <--(注册失败处!!!)
...提示用户注册码不正确等相关信息
这次我相信,并且深信不疑。你一定明白了。我还是不明白...倒...

你一定看出跟第一种情况不同的地方了吧。没错!它与第一种不同的,就是第一种情况是如果注册码正确,就跳到注册成功处,如果没有跳走,就会执行到失败处。而这一种情况则是如果注册码不正确,就跳到注册失败处,否则将执行到注册成功处。

这种情况的修改,除了把JNZ改为JZ外,还可以将其改为Nop,Nop这个指令没有任何意义,将该条指令修改为Nop后,便可随意输入注册码来进行注册了。

原理以经给你讲了,下面我们再来讲一下具体的修改办法吧。(我假设你以经明白了我所说的工具的使用方法)

先说一下虚拟地址和偏移量转换的问题,在SoftICE和W32Dasm下显示的地址值是所谓的内存地址(memory offset),或称之为虚拟地址(Virual Address,VA)。而十六进制工具里,如:Hiew、Hex Workshop等显示的地址就是文件地址,称之为偏移量(File offset) 或物理地址(RAW offset)。

所以当我们要通过那些十六进制工具来对可执行文件中的相应指令进行修改的话,先要找到它的File offset。我们没有必要去使用那些专门的转换工具,在W32Dasm中就有这个功能,比如说你W32Dasm中来到0045123D处,在W32Dasm界面下方的状态栏中就会出现该条指令的虚拟地址和偏移地址,即@:0045123D @offset 0005063Dh 后面的这个0005063Dh就是相应的偏移地址。我们得到该地址后,便可用UltraEdit等十六进制工具来对可执行文件进行修改了。比如使用UltraEdit,你先用UltraEdit打开该可执行文件,然后按Ctrl+G,接着输入你得到的偏移地址,就可以来到其相应的机器码处。 

再给你讲一下机器码,所谓的机器码。就是你看到的那些个十六进制数据了。还记的它们与汇编指令是一一对应的吗?

以下这几个是爆破时要用到的,其它的如果感兴趣,可自行查看相关资料:
JZ=74;JNZ=75;JMP=EB;Nop=90
爆破的时候,只要对以上机器码进行相应的修改就行了,比如第一种情况的时候,可以将74修改为EB,即将JZ修改为JMP。而第二种情况,责需将75修改为90,即将JNZ修改为Nop。

由于本章只讲原理,具体一点的。如怎样找到关键跳转等,我们在下一章中再讲。(一个砖头飞了上来!嘿嘿,这次被俺接到了)
上边讲了爆破的原理,你需要明白的是。爆破只是你学习Crack的开始,是很简单的手段。刚入门的时候可以玩玩儿,但希望你不要就此不前!

(嘿嘿,再说了。人家的软件中不是都说了嘛,不准对其进行逆向修改。你动了人家的身子,怎么能不买帐呢? )
偶就不喜欢爆破,做不出注册机也要找出注册码。否则我就不会去注册这个软件,既然想不掏钱,就要靠你自己的本事。(等以后我有钱了,会考虑去注册那些优秀的共享软件的 )。所以,从某种意义上来说,我是一个正人君子.

其实要找到注册码并不是一件多么难的事,我是指你所针对的软件不太那个的时候 , 不过你无需惧怕。
刚才我们说爆破的时候不提到过关键CALL吗?一般情况下,这个关键CALL就是对两个注册码(一个是软件自身通过你的注册名或机器什么的计算出来的正确的注册码,令一个就是你输入的错误的注册码)进行比较。我前边提到过,CALL之前一般会把所用到的数据先放到一个地方,CALL过去的时候再从这些地方把先前放入的数据取出来,进行相应的处理。这个关键CALL也是这样,在CALL之前,一般会把那两个注册码放到堆栈或某个寄存器中。嘿嘿,我们只要在调试器中,单步执行到该CALL,在未进去之前通过CALL之前的指令判断其将正确的和不正确的注册码放到哪里了。然后再用相应指令进行查看就成了,我说过不难的。

下面列出两个最常见的情况(可参考相关教程):
no.1
mov  eax [      ]  这里可以是地址,也可以是其它寄存器
mov  edx [      ]  同上,该条指令也可以是pop edx
call 00??????   关键call
test eax eax      
jz(jnz)或jne(je)  关键跳转
看明白了吧,在关键CALL之前,软件会把两个注册码分别放入eax和edx中,你只要在CALL处下d eax或d edx就能看到正确的注册码了。
no.2
mov  eax [      ]  这里可以是地址,也可以是其它寄存器
mov  edx [      ]  同上,该条指令也可以是pop edx
call 00??????   关键call
jne(je)         关键跳转
以上两种情况最为常见,而那些个不太常见的情况,我们这里就不再提了。到下下一章的时候,我会给你讲相关方法的...
关于查找软件注册码的部分,就到这里。具体内容,下下一章咱们再说。(不是说了吗?我以经可以接到你的砖头了,干嘛还要丢呢? 

最后,再来说最后的所谓的高级阶段,如果你相信自己。并且热爱Crack,那么你一定会熬到这个阶段的,只是时间因人而异。

其实分析软件的算法,是有好多技巧在里面的。呵呵,最起码我刚开始的时候就摸不着头脑,那么多CALL,每个看起来,都很重要,都追一遍?结果连好多API都被追了进去。等你自己真正用心分析了一个软件的算法,并写出了注册机后。你就会明白其中的道理了,我们下下下一章再说。(大哥,你不是吧,连你家太阳能都丢过来了




 
奇迹之海 @ 2008-06-24 23:23

(1)序列号保护机制

  数学算法一项都是密码加密的核心,但在一般的软件加密中,它似乎并不太为人们关心,因为大多数时候软件加密本身实现的都是一种编程的技巧。但近几年来随着序列号加密程序的普及,数学算法在软件加密中的比重似乎是越来越大了。 

      我们先来看看在网络上大行其道的序列号加密的工作原理。当用户从网络上下载某个shareware——共享软件后,一般都有使用时间上的限制,当过了共享软件的试用期后,你必须到这个软件的公司去注册后方能继续使用。注册过程一般是用户把自己的私人信息(一般主要指名字)连同信用卡号码告诉给软件公司,软件公司会根据用户的信息计算出一个序列码,在用户得到这个序列码后,按照注册需要的步骤在软件中输入注册信息和注册码,其注册信息的合法性由软件验证通过后,软件就会取消掉本身的各种限制,这种加密实现起来比较简单,不需要额外的成本,用户购买也非常方便,在互联网上的软件80%都是以这种方式来保护的。 

      我们注意到软件验证序列号的合法性过程,其实就是验证用户名和序列号之间的换算关系是否正确的过程。其验证最基本的有两种,一种是按用户输入的姓名来生成注册码,再同用户输入的注册码比较,公式表示如下:
                            序列号 = F(用户名)
      但这种方法等于在用户软件中再现了软件公司生成注册码的过程,实际上是非常不安全的,不论其换算过程多么复杂,解密者只需把你的换算过程从程序中提取出来就可以编制一个通用的注册程序。

      另外一种是通过注册码来验证用户名的正确性,公式表示如下:
                        用户名称 = F逆(序列号) (如ACDSEE,小楼注)
      这其实是软件公司注册码计算过程的反算法,如果正向算法与反向算法不是对称算法的话,对于解密者来说,的确有些困难,但这种算法相当不好设计。

      于是有人考虑到一下的算法:
                    F1(用户名称) = F2(序列号)
      F1、F2是两种完全不同的的算法,但用户名通过F1算法的计算出的特征字等于序列号通过F2算法计算出的特征字,这种算法在设计上比较简单,保密性相对以上两种算法也要好的多。如果能够把F1、F2算法设计成不可逆算法的话,保密性相当的好;可一旦解密者找到其中之一的反算法的话,这种算法就不安全了。一元算法的设计看来再如何努力也很难有太大的突破,那么二元呢?

                  特定值 = F(用户名,序列号)
      这个算法看上去相当不错,用户名称与序列号之间的关系不再那么清晰了,但同时也失去了用户名于序列号的一一对应关系,软件开发者必须自己维护用户名称与序列号之间的唯一性,但这似乎不是难以办到的事,建个数据库就好了。当然你也可以根据这一思路把用户名称和序列号分为几个部分来构造多元的算法。
      特定值 = F(用户名1,用户名2,...序列号1,序列号2...)

      现有的序列号加密算法大多是软件开发者自行设计的,大部分相当简单。而且有些算法作者虽然下了很大的功夫,效果却往往得不到它所希望的结果。其实现在有很多现成的加密算法可以用,如RSADES,MD4,MD5,只不过这些算法是为了加密密文或密码用的,于序列号加密多少有些不同。我在这里试举一例,希望有抛砖引玉的作用:
  1、在软件程序中有一段加密过的密文S
  2、密钥 = F(用户名、序列号)  用上面的二元算法得到密钥
  3、明文D = F-DES(密文S、密钥) 用得到的密钥来解密密文得到明文D
  4、CRC = F-CRC(明文D)      对得到的明文应用各种CRC统计
  5、检查CRC是否正确。最好多设计几种CRC算法,检查多个CRC结果是否都正确
      用这种方法,在没有一个已知正确的序列号情况下是永远推算不出正确的序列号的。

(2)如何攻击序列号保护

  要找到序列号,或者修改掉判断序列号之后的跳转指令,最重要的是要利用各种工具定位判断序列号的代码段。这些常用的API包括GetDlgItemInt, GetDlgItemTextA, GetTabbedTextExtentA, GetWindowTextA, Hmemcpy (仅仅Windows 9x), lstrcmp, lstrlen, memcpy (限于NT/2000)。

1)数据约束性的秘诀
  这个概念是+ORC提出的,只限于用明文比较注册码的那种保护方式。在大多数序列号保护的程序中,那个真正的、正确的注册码或密码(Password)会于某个时刻出现在内存中,当然它出现的位置是不定的,但多数情况下它会在一个范围之内,即存放用户输入序列号的内存地址±0X90字节的地方。这是由于加密者所用工具内部的一个Windows数据传输的约束条件决定的。

2)Hmemcpy函数(俗称万能断点)
  函数Hmemcpy是Windows9x系统的内部函数,位于KERNEL32.DLL中,它的作用是将内存中的一块数据拷贝到另一个地方。由于Windows9x系统频繁使用该函数处理各种字串,因此用它作为断点很实用,它是Windows9x平台最常用的断点。在Windows NT/2K中没有这个断点,因为其内核和Windows9x完全不同。

3)S命令
  由于S命令忽略不在内存中的页面,因此你可以使用32位平面地址数据段描述符30h在整个4GB(0~FFFFFFFFh )空间查找,一般用在Windows9x下面。具体步骤为:先输入姓名或假的序列号(如: 78787878),按Ctrl+D切换到SoftICE下,下搜索命令:
  s 30:0 L ffffffff '78787878'
  会搜索出地址:ss:ssssssss(这些地址可能不止一个),然后用bpm断点监视搜索到的假注册码,跟踪一下程序如何处理输入的序列号,就有可能找到正确的序列号。

4)利用消息断点
  在处理字串方面可以利用消息断点WM_GETTEXT和WM_COMMAND。前者用来读取某个控件中的文本,比如拷贝编辑窗口中的序列号到程序提供的一个缓冲区里;后者则是用来通知某个控件的父窗口的,比如当输入序列号之后点击OK按钮,则该按钮的父窗口将收到一个WM_COMMAND消息,以表明该按钮被点击。
  BMSG xxxx WM_GETTEXT (拦截序列号)
  BMSG xxxx WM_COMMAND (拦截OK按钮)
  可以用SoftICE提供的HWND命令获得窗口句柄的信息,也可以利用Visual Studio中的Spy++实用工具得到相应窗口的句柄值,然后用BMSG设断点拦截。例:
  BMSG 0129 WM_COMMAND




 
奇迹之海 @ 2008-06-24 21:22

它采用的是p2p技术与传统服务器下载想结合的工作原理。
1998年,当19岁的肖恩-范宁(Shawn Fanning)坐在电脑前编写一个基于P2P技术的共享软件时,他丝毫没有意识到这个叫Napster的软件即将引发一场互联网地震。Napster能够很方便地让肖恩跟女同学在互联网上交换最新的MP3格式的音乐,这位美国波士顿东北大学的一年级新生,慷慨地与同学们分享自己的聪明才智,他们当时的目的很简单,那就是更方便地结识到漂亮女同学。
1999年夏天,肖恩把他的Napster程序放到了互联网上,并架设了服务器让网友下载。出人意料的是,Napster突然之间成为了人们争相转告的“杀手程序”——它令无数散布在互联网上的音乐爱好者美梦成真,无数人在一夜之间开始使用Napster。与此同时,由Napster引发的P2P思想也传遍了互联网。
P2P技术在很大程度上颠覆了人们对互联网的传统观念。以往占据主导地位的互联网架构是客户端/服务器(Client/Server)结构。互联网以服务器为中心,各种各样的资源,包括文字、图片、音乐、电影等都存放在服务器的硬盘上,网民把自己的电脑作为客户端通过网络连到服务器上检索、下载、上传资料或请求运算———在这种架构下,客户端和服务器存在着明显的主从关系;而P2P技术,也称为对等网络(PeertoPeer)结构,它的本质思想是,整个网络结构中不存在中心节点(或中心服务器),在P2P结构中,每一个节点(Peer)大都同时具有信息消费者、信息提供者和信息通讯等三方面的功能,在P2P网络中每一个节点所拥有的权利和义务都是对等的。
肖恩编写的Napster音乐交换软件正是基于这种P2P技术原理,每一个安装了Napster软件的电脑既是服务器又是客户端,当这台电脑联上网络后,你就能够搜索到另一台装有Napster软件电脑里的音乐文件,同时其他装有Napster软件的电脑也能连上你的电脑,进行搜索或下载。然而,Napster的P2P思想贯彻得并不彻底,基于运行效率的考虑,也为了更方便网友检索和交流音乐,Napster把所有的音乐文件地址都存放在一个集中的服务器中,Nap-ster的用户能够方便地过滤大量的地址,快速找到自己需要的MP3文件。也就是说,Napster的用户还是需要Napster公司的服务器这个中转站才能找到另外一台装有Napster的电脑。而这个服务器,正是由肖恩成立的Napster公司维护。
很显然,肖恩为这个做法付出了代价。1999年12月,美国唱片业协会RIAA(Recording Industry Association of Ameri-ca)代表环宇音乐、索尼音乐、华纳音乐、百代唱片、BMG等七大唱片公司,以违反版权保护法为由把Napster公司推向法庭。他们称Napster向网民提供MP3文件共享软件侵犯了音乐版权,要求法院关闭该公司并赔偿损失1亿美元,Napster公司最终输掉了官司。唱片公司能够胜诉的原因是,法官认为集中化的服务器索引让这家公司必须对网络上的盗版负法律责任。
第二代P2P软件吸取了Napster的教训。1999年底,美国在线(AOL)的员工贾斯汀.弗兰克尔(JustinFrankel)发布了Gnutella。这个软件采用了一种新的文件交换网络技术,Gnutella不需要固定的服务器,使用者也不必进行注册,从理论上讲,只要打开Gnutella便能连上网络上的某台机器,用户发送的搜索请求在每一台电脑间来回传递,一直到找到文件为止,然后再将信息传回搜索者的电脑,这是一种真正意义上的对等分布式网络。由于没有真正的网络控制中心,FBI侦探和唱片公司律师永远都不知道该找谁的麻烦,美国上诉法院也认为,Gnutella和Napster不一样,这种软件的散播者,并未直接控制网络上所发生的行为,因而这种分布式网络是合法的。
但第二代P2P软件有个很大的问题,就是你很难分辨它与蚕食网络带宽的蠕虫病毒有何区别。就Gnutella而言,当数以百万计的搜索要求在网络上同时运行时,网络大塞车的情况就屡屡发生。幸运的是,Gnutella工程师改进了搜索处理方式,使搜索结果变成只限定于网络的某些人获得——例如,只有1万人,而不是200万人。
近两年来,P2P的用户越来越多,互联网上运行着各种各样的P2P软件,这直接导致的结果就是网络带宽趋于紧张。有调查显示,互联网三分之一的带宽是被P2P或BT下载软件“吃掉”的,P2P和BT软件转眼间成为众矢之的。于是,使用节约带宽新技术的第三代P2P软件应运而生。这类软件进一步改进了搜索算法,如借鉴了“Google”等搜索引擎所常用的“快照”技术(SnapShot),然后把这些文件“快照”分布式地存放在网络上。当用户发出搜索指令的时候,搜索的要求是先到达网络上的任何一台电脑上,然后这台电脑就会再将它转到另一台有更多文件信息的电脑,第三台电脑可能就拥有文件本身———或者也可能再继续将搜索要求转到其他有正确信息的电脑。整个过程有点像在照着交通指示牌循序问路,而不是路上随便找个人问路,这样很大程度上提高了搜索效率,节约了带宽。在第三代P2P网络里,分布式存放的索引文件都会随着电脑及文件的加入而持续更新。
如果把P2P技术仅仅用于交换MP3文件或下载电影,就有点辜负了它是互联网“杀手程序”的美誉了。实际上,P2P技术在下一代互联网运用中有着广阔的前景,如果说传统互联网的标志运用是“WWW”的话,新一代互联网就可以用P2P来指代。除了用于交换文件,P2P技术还可以实现对等计算、对等存储、协同处理与服务共享等。P2P技术将重构今天的互联网络,它正在互联网各个运用领域产生持久而巨大的变化。
但是,P2P对于用户最大的意义不是它的技术和功能,而是它的理念。P2P技术把网络中不同的计算机连接在一起,并充分利用互联网和Web站点中任何地方的闲置资源。P2P的目的是将它以用户为中心,所有的用户都是平等的伙伴。相隔万里的用户可以通过P2P共享硬盘上的文件、目录乃至整个硬盘,所有人都共享了他们认为最有价值的东西。这种用户间直接交流的方式,真正实现了互联网共享和自由的梦想,它正在改变着互联网现有的游戏规则,也改变着我们的生活。这种理念源于人们对互联网的憧憬和梦想,它使网络回归到Internet的本质,让共享与自由的精神充满网络世界。




 
奇迹之海 @ 2008-06-07 21:04

鱼和水的故事,那两句对白很经典,几乎谁都知道,但却很少人知道故事的全篇。

  鱼说:“你看不见我眼中的泪,因为我在水中。” 水说:“我能感觉得到你的泪,因为你在我心中。”
这两句对白很经典,几乎谁都知道,但却很少人知道故事的全篇。 鱼儿从小就是一个顽皮的孩子,她从不像别的孩子那样安静。她喜欢在水里蹿来蹿去,先是个50米冲刺,然后来一个急刹车或是一个急转弯。每每这时,水儿总是微笑地看着鱼儿……有时,鱼儿会碰到一些令人丧气的事,但在这时,温柔的水儿总是静静地倾听着,抚慰着鱼儿。 白天,水儿把鱼儿轻轻抛起,让她跃出水面,看看外面的世界,然后再将她稳稳地接住。到了夜里,水儿就成了最温暖的摇篮,他总是轻轻地摇晃,哄着鱼儿让她入睡。在夏天的夜晚里,水儿总是会将鱼儿拖到水面 鱼儿渐渐长大了,她发现心里有一样东西让她牵挂——那就是水儿。一天,鱼儿终于鼓足了勇气告诉了水儿她喜欢他,水儿却沉默了。“你为什么不说话?”鱼儿问。水仍旧沉默着,只是开始轻轻地摇着头。 妈妈说鱼儿不能爱水。这是大自然的规律,就好像斑马只能爱斑马,花豹只能爱花豹;条纹的只能爱条纹,斑点的又只能爱斑点,而斑点却是永远不能爱条纹的。

鱼儿不明白,如果条纹真的爱上了斑点,飞鸟真的爱上鱼而鱼儿真的爱上水,那又该如何呢?鱼儿不明白,她吐着泡泡对水说:“我爱你!”水儿再次沉寂,鱼儿没有再说什么,只是静静地躺在了水的怀里………… 许久, 鱼儿的开口打破了沉寂:“你看不见我眼中的泪,因为我在水中。” 水说:“我能感觉到你的泪,因为你在我心中。” 鱼儿急了:“那你为什么不爱我?” 水却只能说:“我不能爱你,我居无定所,时常到处漂流,你和我在一起会很辛苦的。”

  鱼儿又坚定地说:“我不怕,我要永远和你在一起!” 可是,水终究逃不过漂流的命运,他流入了一条大河,鱼儿一直寸步不离地陪着他。他们相拥着饶过暗礁和险涛,流过江湖,跃下瀑布,流入一条小溪中。一路上,水儿将鱼儿轻轻抛起,又接住,再抛起,再接住,嬉闹着。水流越流越暖,最后竟快断流了! “

  太好了,我们终于可以定居了。”鱼儿欢呼雀跃。 “ 不行,水面太浅,太危险了,乘现在还有退路,你赶快往回游吧!”水儿紧张地说。 “不,不管怎样,我决不离开你!”鱼儿坚决地说。 为了减少水的蒸发量,白天,鱼儿静静地躺在水的怀里,不作任何运动。到了夜里,星星全落到了水里,鱼儿才开始嬉戏,把星星一颗颗吞进去,又吐出来,再吞进去,再吐出来,乐此不疲。 六月,火红的太阳照射着水面,尽管他们做了各种努力,可水儿还是在一点一点的蒸发。鱼儿的脊背渐渐地露出了水面,水儿努力地激起了波澜,湿润着她的脊背,不让太阳将她灼伤。可是这样,更加加速了水的蒸发。终于,最后的一滴水也离开了鱼儿。鱼儿躺在了龟裂的土地上,奄奄一息。 鱼儿的心脏在完成了最后一次跳动时,一滴眼泪从脸颊滑落。 突然,天空划过一道闪电,在几声响雷之后,大雨倾盆而下,鱼儿又回到了水的怀抱,水儿呼唤着鱼儿,可是鱼儿再也没有醒来,水带着悲伤的心情载着鱼儿像风一样地奔驰,撕裂心肺的哭声,任谁都可以听到……………… 水儿载着鱼儿,奋力奔跑,流到了一棵干枯的小树旁,水儿侵入了泥土里,把鱼儿的身体埋进了泥土,水儿对着鱼儿已腐烂的尸体轻轻地说:“我们不用再到处奔流了,我找到了你的住所,从今以后,你中有我,我中有你…………” 不知道过了多少年,树顶上长出了嫩绿色的新芽,在上面有一滴水珠,阳光下闪闪发亮,那是鱼儿流下的眼泪…………

鱼说:“你看不见我眼中的泪,因为我在水中。”
水说:“我能感觉到你的泪,因为你在我心中。”

  鱼对水说:我一直在哭泣,可是你永远都不知道,因为我在水里.
水说:我知道,因为你一直在我心里。
我不是鱼,你也不是水,你能看见我寂寞的眼泪吗?
也许,因为这是寂寞的情人泪。

  鱼对水说:我永远不会离开你,因为离开你,我无法生存。
水说:我知道,可是如果你的心不在呢?
我不是鱼,你也不是水,我不离开你是因为我爱你,
可是,你的心里有我吗?

  鱼对水说:我很寂寞,因为我只能待在水里。
水说:我知道,因为我的心里装着你的寂寞。
我不是鱼,你也不是水,我寂寞是因为我思念你,
可是,远方的你能感受到吗?

  水对鱼说:如果没有鱼,那水里还会剩下什么?
鱼说:如果没有你,那又怎么会有我?
我不是鱼,你也不是水,没有你的爱,我依然会好好的活,
可是,好好的活并不代表我可以把你忘记。

  鱼对水说:一辈子不能出去看看外面的世界,是我最大的遗憾
水说:一辈子不能打消你的这个念头,是我最大的失败
我不是鱼,你也不是水,现在的我只想要一个一辈子的承诺
可是,你负担得起吗?

  鱼对水说:在你的一生中,我是第几条鱼?
水说:你不是在水中的第一条鱼,可却是我心中的第一条。
我不是鱼,你也不是水,我们都不是彼此生命中的第一个,
可是,知道吗?你是第一个我想要嫁的人。。

  鱼对水说:你相信一见钟情吗?
水说:当我意识到你是鱼的那一刻,就知道你会游到我的心里。
我不是鱼,你也不是水,我以为我对你的感情不会长久,因为那是一见钟情 。
可是,我错了,感情如酒,越封越香,越长久。

  鱼对水说:为什么每次都是我问你答?
水说:因为我喜欢在回答中让你了解我的心。
我不是鱼,你也不是水,为什么你总是让我等待?
难道,你不知道,等待=失去信心=放弃?

  如果我是鱼,而你是水,那该有多好!
水永远都知道鱼的想法,因为鱼在水的心里。
但是我不是鱼,你也不是水,
你永远都不知道我的爱,因为我也许根本不在你的心里!

  如果我是鱼,而你是水,
我可以游入你的心里吗?




 
奇迹之海 @ 2008-05-23 01:21

G同学,你一定要挺住!
记得这个艰难的时刻,
让苦难变成你的财富,
做自己,做最好的自己!



问我

问我欢呼声有几多
问我悲哭声有几多
我如何能够一一去数清楚

问我为何会高兴
究竟为何要苦楚
我笑着回答 
讲一声 我是我

无论我有百般对 
或者千般错
全心去承受结果
面对世界一切 那怕会如何
全心保存真的我

问我欢呼声有几多
问我悲哭声有几多
我如何能够一一去数清楚
问我为何会高兴
究竟为何要苦楚
我笑着回答 
讲一声 我系我

la...

无论我有百般对
或者千般错
全心去承受结果
面对世界一切
那怕会如何
全心保存真的我

问我我得失有几多
其实得失不必清楚
我但求能够一一去数清楚

愿我一生去到终结
无论历尽几许风波
我仍然能够讲一声
我系我
我仍然能够讲一声
我系我




 
奇迹之海 @ 2008-05-13 23:57

国内地震了,过得昏天黑地的我到下午才知道.地震似乎是离我很遥远的事情,看到不是家乡,稍微安了些心. 看了一下伤亡数字,当时报道四川只有5个证实死亡的,于是不担心了.还自言自语了一句,白天地震就是好,大家都有准备.到夜里有些怕了,因为是邻省,想想还是问问家里吧.一看表,妈妈也该睡了.熬到早上,算好她起来了,拨通了电话.看来还是震动不小.妈妈不担心自己,反而问我是不是心情不好.怕我因为上周的一个事件影响了心情.平时都是周六通话的,因为周三说了很久,而且我自己的近况实在乏善可陈.就没有通话,妈妈最让我难过的一句话是"周日是母亲节,你平时都不会忘记的,你也没有打电话,我就怕你在那边是不是出什么事了,心情不好." 我的日子,外公外婆,其他重要的日子,妈妈从来不会忘记.真的是全世界都没有人想起我的时候,妈妈也记得我.忘记自己,妈妈也会记得我. 妈妈常说:"娘的心在儿身上,儿的心在石头上".我从前还不信,现在,我真的信了.
最近在听周杰伦的<<我不配>>,怎么听怎么觉得像是写给母亲的,但原来的词有些不伦不类.我照着填了一个.给我的母亲.周同学唱歌反正吐字不是很清楚(旁白:网友听写下来的<<我不配>>的歌词才搞笑呢),看着我填的词,听他唱,基本上也能凑合着听. 

附歌词如下

献给我的母亲和家人
奇迹之海
于2008母亲节后第二天
 



周杰伦-我不配
作词:奇迹之海

作曲:周杰伦

午后的一阵雨
淋湿我的思绪
交错的语言里听雨打玻璃声急
地铁门刚开启
拥挤的人群里
晃动的身影交叠依稀看见过去
蝉鸣声落满地
院落里坐藤椅
外婆搓着麻将外公在一旁下棋
近开学的日期
将远行的欣喜
饭桌前母亲忽然掩藏不住情绪
还来不及
仔细看你
察觉成长经历
十八年都在一起
突然一朝你离我而去

这感觉已经不对
我努力在安慰
一些些应该体贴的感觉
我没给
你对儿子的愿望
很卑微
在妥协
是我忽略
你不要我查觉 

这感觉已经不对
我当时不了解
一幕幕回味成长的情节
你受累
你默默为我掉过
几多泪
人憔悴
我心碎你更受罪
你的恩情
我不配

 

匆匆的行人里
我向前方奔去
力争留下一点我存在过的痕迹
陌生的城市里
看不见我自己
每天绷紧神经忘了家里的消息
隔遥远的距离
电话声忽想起
犹豫如何隐藏近况给家里演戏
你很久没消息
又嘱咐了几句
我们都好在外自己要注意身体
还来不及
把这感动
仔细用心记取
描述我如何爱你
泪水却已盈眶满溢 

这感觉已经不对
我努力在体会
一些些应该体贴的感觉
我没给
你对儿子的愿望
很卑微
在妥协
是我不对
你不过要问慰 

这感觉已经不对
我最后才了解
一幕幕回味成长的情节
你受累
你默默为我掉过
几多泪
人憔悴
我心碎你更受罪
你的恩情
我不配