User-agent: * Disallow: 老友吧——博闻强记

dedeCMS采集规则/过滤/替换文章内部分内容的代码

2010年9月4日 admin 没有评论

dedeCMS采集规则/过滤/替换文章内的部分内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
1.采集去除链接
[Copy to clipboard]CODE:
{dede:trim}]*)>([^<]*){/dede:trim}
--------------------------------
 
让field:title 标题突破30这个长度,修改代码的方法
找到./include/inc_arcpart_view.php291 :
if($titlelen=="") $titlelen = 30;
修改为
if($titlelen=="") $titlelen = 60;
就可以了,然后,你可以这样调用了
{dede:channelArtlist typeid='0' col=1 tablewidth='100%'}
{dede:arclist row="10"}
[field:title function="cn_substr('@me',38)" /]
 
 
{/dede:arclist}
{/dede:channelArtlist}
 
把这个延伸一下:关于inc_arcpart_view.php
function GetArcList($typeid=0,$row=10,$col=1,$titlelen=30,$infolen=160,
$imgwidth=120,$imgheight=90,$listtype="all",$orderby="default",$keyword="",
$innertext="",$tablewidth="100",$arcid=0,$idlist="")
这里的参数都可以更改你实际需要的模板元素尺寸大小.
 
 
 
2. 采集过虑中去掉链接保留文字的方法!
 
柏老大的方法是{dede:trim}<a ([^>]*)>([^<]*)</a>{/dede:trim}
这样做会去掉<a hf.......>与</a>之间的字符!这样整个文章就少了部分字符,不完整了!
 
后来我多次测试,总算找到了正确的使用方法!如下:
{dede:trim}<a([^>]*)>{/dede:trim}
{dede:trim}</a>{/dede:trim}
 
做成两条采集规则就可以了!
在实际使用中好像([^<]*)([^>]*)两条一起使用才行!
 
3. 过滤div
{dede:trim}]*)>{/dede:trim}
{dede:trim}
{/dede:trim}
过滤js
{dede:trim}]*)>([^<]*){/dede:trim}
 
 
过滤未知变量字符
固定(.*)固定
 
 
4.dede万能过滤代码
以下是常用的正则表达式标签
{dede:trim}<tbody(.*)>{/dede:trim}
{dede:trim}</tbody>{/dede:trim}
{dede:trim}<table(.*)>{/dede:trim}
{dede:trim}</table>{/dede:trim}
{dede:trim}<tr(.*)>{/dede:trim}
{dede:trim}</tr>{/dede:trim}
{dede:trim}<td(.*)>{/dede:trim}
{dede:trim}</td>{/dede:trim}
{dede:trim}<font(.*)>{/dede:trim}
{dede:trim}</font>{/dede:trim}
{dede:trim}<a(.*)>{/dede:trim}
{dede:trim}</a>{/dede:trim}
{dede:trim}<param(.*)>{/dede:trim}
{dede:trim}<embed(.*)</embed>{/dede:trim}
{dede:trim}<object(.*)</object>{/dede:trim}
{dede:trim}<iframe(.*)</iframe>{/dede:trim}
{dede:trim}<form(.*)</form>{/dede:trim}
{dede:trim}<input(.*)>{/dede:trim}
{dede:trim}<script(.*)</script>{/dede:trim}
{dede:trim}<style(.*)</style>{/dede:trim}
{dede:trim}<!--(.*)-->{/dede:trim}
 
以下为不常用的正则表达式标签
{dede:trim}<div(.*)>{/dede:trim}
{dede:trim}</div>{/dede:trim}
{dede:trim}<center(.*)>{/dede:trim}
{dede:trim}</center>{/dede:trim}
{dede:trim}<p(.*)>{/dede:trim}
{dede:trim}</p>{/dede:trim}
{dede:trim}<span(.*)>{dede:trim}
{dede:trim}</span>{dede:trim}
{dede:trim}<img(.*)>{/dede:trim}
 
/////////////////////////////////////
 
5.织梦标题不全,鼠标指向显示全部的代码:
{dede:arclist titlelen='100'}
 
[field:title function=' ( strlen("@me")>40 ? cn_substr("@me",40): "@me" ) '/]
{/dede:arclist}
 
6.dede/inc/inc_archives_functions.php第100(flash频道远程flash本地化的BUG)
$cfg_uploaddir = $GLOBALS['media_dir'];
修改成
$cfg_uploaddir = $GLOBALS['cfg_other_medias'];
 
6.发布时间,来源,作者可以通过@me函数实现,如:在自定义处理接口:处输入   @me = "Azure·【博】" 就表示来源为“Azure·【博】”
7.内容的替换:在所采集的文章内容中有多媒体,使用的是相对路径,采集的时候又不想下载,最好的办法就是将地址替换成媒体的实际地址。可以这样实现,在文章内容规则部分的自定义处理接口:处输入@me=str_replace('src="str1','src="str2',@me);
这样采集出来的文章中的所有的str1就被替换成str2.

Dede自动采集伪原创发布更新一体化插件使用说明

2010年9月4日 admin 没有评论

此插件是本人从网上找到的,插件原作者已经不可考。

本插下载

(声明:网上较多的是gbk版的,由于本人是utf8版的,代码已经转成utf8,下载前请注意,gbk版本人没保存):

http://earn.to/110659

http://earn.to/13606fb

http://earn.to/1ebc31b

http://earn.to/1e61ae4

http://earn.to/15e35d4

插件说明:

1 本插件最大的优点就是非常有利于seo,并且实现织梦做站的完全自动化。(这个差不多)

2 访问或者刷新首页即可触发采集,采集后自动伪原创文章,自动生成文章,自动发布,自动更新首页,栏目页。(是这样的)

3 采集插件只采集目标网站最新更新的内容,即对方网站一旦更新便立刻采集过来,不会重复发布文章。(是这样的)

4 指定的采集规则采集的内容可发布到指定的栏目(nid和typeid对应指定)。(这个在/plus/spider.php文件里面进行设置)

5 采集为逐条采集逐条发布,采集速度可以设置,不会影响网站访问速度,造成CPU使用过高,非常有利于SEO优化。(同样在/plus/spider.php文件里面进行设置)

6 伪原创词汇可以自己填写或者批量导入,暂提供3000组同义词。(不宜过多,影响文章可读性。原插件有BUG导致替换词不能正确导入,本人已修正)

一体化插件安装

首先解压缩插件安装包并上传到网站根目录,然后到DEDECMS后台管理 -> 模块 -> 模块生成向导,填写以下(橙黄色字体)内容:

模块名称:自动采集更新
封装类型: 勾选[ 小插件 ]
联系Email:某人
开发团队:某人
发布时间:默认
官方网址:某人
是否涉及会员系统: 不涉及
后台管理菜单:留空
使用说明文件: 勾选[ 直接填写 ]
内容
此插件是本人从网上找到的,插件原作者已经不可考。
本插件的优点和注意事项:
1 本插件最大的优点就是非常有利于seo,并且实现织梦做站的完全自动化。(这个差不多)
2 访问或者刷新首页即可触发采集,采集后自动伪原创文章,自动生成文章,自动发布,自动更新首页,栏目页。(是这样的)
3 采集插件只采集目标网站最新更新的内容,即对方网站一旦更新便立刻采集过来,不会重复发布文章。(是这样的)
4 指定的采集规则采集的内容可发布到指定的栏目(nid和typeid对应指定)。(这个在/plus/spider.php文件里面进行设置)
5 采集为逐条采集逐条发布,采集速度可以设置,不会影响网站访问速度,造成CPU使用过高,非常有利于SEO优化。(同样在/plus/spider.php文件里面进行设置)
6 伪原创词汇可以自己填写或者批量导入,暂提供3000组同义词。(不宜过多,影响文章可读性。原插件有BUG导致替换词不能正确导入,本人已修正)
安装程序:勾选[ 自动生成(由系统自动处理安装) ]
SQL语句
DROP TABLE IF EXISTS `#@__str_replace`;
CREATE TABLE `#@__str_replace` (
`id` int(11) NOT NULL auto_increment,
`find` varchar(255) NOT NULL,
`replace` varchar(255) NOT NULL,
`interconvert` smallint(2) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=gbk
删除程序:勾选[ 自动生成(由系统自动处理卸载) ]
SQL语句
DROP TABLE IF EXISTS `#@__str_replace`;
文件列表
../dede/co_do.php
../dede/pr_str_replace.php
../dede/templets/co_main.htm
../dede/templets/pr_str_replace.htm
../plus/spider.php
../include/dedecollection.class.php
../include/dedecollection.func.php
../include/dedecollection.spider.php

点提交,完成安装。

一体化插件设置

首先,需要先在DEDE后台设置好采集规则,这个不用说。

DEDE的采集规则是没有对应栏目的,采集的文章内容还不知道能放到哪里去。所以我们需要设置好采集规则和网站栏目ID的一一对应关系,具体设置在 plus/spider.php 件里面。

该文件从24行起是对应关系,如下:
$spider[]=array(1,1);  //采集节点ID在前,网站栏目ID在后,如采集节点为5,栏目ID为6,那么这里就是array(5,6)
$spider[]=array(2,2);
$spider[]=array(3,3);

注释说的很清楚了,采集节点ID在前,网站栏目ID在后,如采集节点为5,栏目ID为6,那么这一行应该这么写:
$spider[]=array(5,6);

有几条采集规则,就需要写几行对应关系。

该文件第21行,是设置重新生成主页的间隔时间(单位秒),一般保持默认就可以。当然,你也可以根据自己的实际需要设置成相应的整数。
maketime = 30;  //重新生成主页的间隔时间,单位秒

另外,如果想在采集到文章以后进行关键词替换(伪原创),那么我们还需要导入替换词。
到DEDECMS后台管理 -> 采集 -> 采集节点管理 -> 替换词设置 -> 批量导入同义词 ->浏览到一体化插件包里面的《替换词.txt》 -> 点[确定]按钮,就可以批量导入替换词了。

一体化插件使用

插件安装好以后,到DEDECMS后台管理 -> 模板 -> 默认模板管理 -> 修改footer.htm ,在最后面加上以下(橙黄色字体)内容:

<script language=’javascript’>
document.write(“<img src=’http://www.xxx.com/plus/spider.php?”+Math.random()+”‘ border=’0′ style=’display:none’>”);
</script>

这里的www.xxx.com替换成你的网站域名。

全站生成一下,然后刷新首页就可以在首页上看到更新的文章了。

后记

到这里,插件就安装完成了,最好再手工生成一下网站首页。以后每当网站首页被访问的时候,该插件就会根据你事先设定的采集规则进行采集。

如果想及时查看插件是否工作,可以在浏览器地址栏手工输入:http://你的网站域名/plus/spider.php,等页面运行完成,该插件就已经运行了一次。

致谢===》网站http://www.dedeplus.com 该站长在此基础上开发了第二代插件,想得到更多指导,请与dedeplus联系。

教你用wget批量下载文件

2010年8月31日 admin 没有评论

在上一篇文章《移植到Windows下的linux工具wget》中提到了linux中的利器wget,今天我们来谈谈如何利用wget批量下载网络上的文件。

如果你认为wget只是基于命令行的下载器,那你就错了。wget拥有各种各样的下载功能。下面就展示几个小例子:

从站点下载文件:
wget http://www.laoyou8.info/foo.tar.gz

实现断点续传:
wget -c http://www.laoyou8.info/foo.tar.gz

好的,我的网络连接比较慢,经常断线,想让它自动重连并继续下载,该怎么办呢?
wget -t -0 -c http://www.laoyou8.info/foo.tar.gz #默认重试20次,选项 -t 0 使它一直重试。

挺有意思的,那我想下载已知网址的整个站点该怎么办呢?
wget -p http://www.laoyou8.info/blog

如果我下载的文件需要用户名和密码该怎么办呢?
wget http://www.laoyou8.info/bar.tar --user=name --password=passwd

Wget批量下载很简单,当然也发现原来Wget是如此之强大,以前都是用Wget下载单个文件的,里面很多参数也不是很清楚,今天一看,参数多得不行了!言归正传,先建立一个要批量下载的地址文件:

如一个名为url.txt的文本文件,里面存放有一大批的Url下载地址:

http://laoyou8.info/dd.tar.gz

http://laoyou8.info/hh.tar.gz

就是以这样的模式写Url路径就可以了,然后执行 wget -b -i url.txt -c

-b 后台执行Wget;

-i inputfiles 从文本文件内读取地址列表;

-c 断点下传;

如果想下载一个网站上目录中的所有文件(需要这个网站支持列出目录下所有文件功能),

我需要执行一长串wget命令, 但这样做会更好:

wget -nd -r -l1 –no-parent http://laoyou8.info/dd

这条命令可以执行的很好, 但有时会下载像 index@dd 这样一些我不想要的文件. 如果你知道想要文件的格式, 可以用下面的命令

来避免下载那些多余的文件:
wget -nd -r -l1 –no-parent -A.mp3 -A.wma http://laoyou8.info/dd

我来简单的介绍一下命令中指定选项的作用.

-nd 不创建目录, wget默认会创建一个目录

-r 递归下载

-l1 (L one) 递归一层,只下载指定文件夹中的内容, 不下载下一级目录中的.

–no-parent 不下载父目录中的文件.

ren命令实现批量更改文件名

2010年8月31日 admin 没有评论

首先,在论坛上面由于上传策略限制,有很多会员把上传的文档后添加后缀名,如torrent后缀。

那么,当我们辛苦的下载完成之后,就必须去掉torrent,一个个去掉很麻烦。那么试试下面的方法。

步骤一:

将下载的文件放在D盘,可以放在文件夹下面:这里使用的是D:2

步骤二:

点开始——运行——输入cmd——-回车,看到黑黑的框就行了

步骤三:

找图例中输入ren D:2*.torrent *.mp3

其中ren是语法, D:2是路径 *.torrent是将被转换的格式后缀 *.mp3是被转换成的格式后缀,注意在*.torrent和*.mp3之间有空格

移植到Windows下的linux工具wget

2010年8月29日 admin 没有评论

Linux下有非常好用的wget工具。

wget是一个从网络上自动下载文件的自由工具,支持通过HTTP、HTTPS、FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理。

那么windows下呢?当然也有了,确切地说,是wget的win32编译版本,因此参数完全相同。

在这里下载:

http://users.ugent.be/~bpuype/wget/ 打开wget的下载页面

另外你可以尝试下curl,一个更为强大的工具。

下载地址:

http://curl.haxx.se/latest.cgi?curl=win32-nossl 打开curl的下载页面

=========================================

简单说下wget的使用方法,不说你一定不知道,:)

wget.exe must be placed in your path (e.g. c:\windows) if you want to be
able to run it from any directory.

To retrieve a file: wget http://users.ugent.be/~bpuype/wget/wget.exe

wget screenshot

wget in action…

Basic options

First off, the official
manual
has all command line options and parameters.

Display all help: wget --help

Completely mirror a site: wget -mr http://...

-m: mirror

-r: recursive

Mirror without following links to other servers, parent directories:
wget -mrnp http://...

-np: no-parent

Retrieve a html file and convert relative links to absolute ones:
wget -k http://users.ugent.be/~bpuype/wget

-k: ‘k’onvert links

Resume partially downloaded files (if supported by the server):
wget -c http://...

-c: continue

Read url’s from a file and retrieve them:
wget -i file_with_urls.txt

-i: input-file

Ask for url’s (read from stdin):
wget -i -. Enter url’s on the command line, press enter after
each url, and terminate with ^Z (press CTRL-Z) on an empty line.

FTP

--glob=off

Don’t treat (, *, ? etc. as globbing
characters. Use when transfering files with names that contain these
characters.

--passive-ftp

Use passive mode for data connection (try this if you’re behind a firewall,
NAT box…)

Proxy

To make wget use a proxy, you must set up an environment variable before
using wget. Type this at the command prompt:

set http_proxy=http://proxy.myprovider.net:8080

…where you use the correct proxy hostname and port for your ISP or
network. You can use ftp_proxy to proxy ftp requests.

--proxy=on

--proxy=off

Turn proxy usage on/off once variable is set; default is on when variable
is present.

Environment variables can be set permanently for the entire system, or
on a per-user basis. Procedure for Windows XP
(similar for NT, 2000, Vista, 7). For Windows 95, 98, ME, add them
to autoexec.bat (use msconfig to do this easily).

Passwords

To retrieve with passwords (http or ftp), you can use the following url
syntax:

wget http://username:password@www.example.net/somedir/somefile

wget ftp://username:password@ftp.example.net/somedir/somefile

Additionally, you can also use --http-user, --http-password
as well as --ftp-user, --ftp-password:

wget ftp://ftp.example.net/somefile --ftp-user=username --ftp-password=password

If username or password contain non-alphanumeric characters, you need to
escape them when passing them in urls (rfc1738 %HH) syntax. For example, with
a username of user@domain and password of pass, your
url becomes http://user%40domain:pass@www.example.net/somefile.
When using escaped urls in batch files, remember that % itself is a special
character, and needs to be escaped itself (by using %% instead of %).

SSL certificates

Current versions of OpenSSL do not come with root certificates. This means
when trying to download over SSL, wget will give you errors such as

  Unable to locally verify the issuer's authority.
ERROR: certificate common name `dnsname' doesn't match requested host name
`dnsname'.

Either you can use the suggested --no-check-certificate to
skip authentication – only use this if you only need encryption functionality,
and not authentication.
The alternative is to get a set of root certificates and pass it to wget with
--ca-certificate file.crt. The problem is then to get
a correct root certificate bundle first. The following link has a perl script
which will download root certificates from Mozilla and convert them to a
wget usable certificate bundle (you’ll need Perl, typically
ActivePerl).

http://www.floodgap.com/software/ttytter/mk-ca-bundle.txt

Do not trust other people to give you a set of root certificates.
This means you should not trust this site (but it no longer offers certificates
anyway). Audit any sources you download root certificates from, audit the
tools you use to process certificates (including the mk-ca-bundle.pl script
linked above).

The official source for root certificates is your Windows install media and
Windows Update (remember to update the root certificates regularly), though
this set is not used by wget and many other Windows tools.

Furthermore, the Windows makefiles for wget refer to the certificate
bundles available at http://curl.haxx.se/docs/caextract.html (which
are extracted from Mozilla as well).

Default options (.ini file)

You can put either a wget.ini file in the same directory as
wget.exe, or use an environment variable called wgetrc to point to the file
if it is in another location (set wgetrc=\path\to\wget.ini).
Syntax
for wget.ini (or .wgetrc) can be found in the official documentation.

与文本文件有关的一些事,不说你一定不知道

2010年8月28日 admin 没有评论

文本文件的编码

打开记事本,输入1234

按不同的编码方式(ANSI,Unicode,Unicode big endian和UTF-8)保存文件。然后勇敢winhex查看内容:

ANSI:31323334

Unicode:FFFE3100320033003400

Unicode big endian:FEFF0031003200330034

UTF-8:EFBBBF31323334

可以判断格式啥的……

文本文件与二进制文件
一、文本文件与二进制文件的定义
大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。
简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。
从上面可以看出文本文件基本上是定长编码的(也有非定长的编码如UTF-8),基于字符嘛,每个字符在具体编码中是固定的,ASCII码是8个比特的编码,UNICODE一般占16个比特。而二进制文件可看成是变长编码的,因为是值编码嘛,多少个比特代表一个值,完全由你决定。大家可能对BMP文件比较熟悉,就拿它举例子吧,其头部是较为固定长度的文件头信息,前2字节用来记录文件为BMP格式,接下来的8个字节用来记录文件长度,再接下来的4字节用来记录bmp文件头的长度。。。大家可以看出来了吧,其编码是基于值的(不定长的,2、4、8字节长的值都有),所以BMP是二进制文件。

二、文本文件与二进制文件的存取
文本工具打开一个文件的过程是怎样的呢?拿记事本来说,它首先读取文件物理上所对应的二进制比特流(前面已经说了,存储都是二进制的),然后按照你所选择的解码方式来解释这个流,然后将解释结果显示出来。一般来说,你选取的解码方式会是ASCII码形式(ASCII码的一个字符是8个比特),接下来,它8个比特8个比特地来解释这个文件流。例如对于这么一个文件流”01000000_01000001_01000010_01000011″(下划线”_”,是我为了增强可读性,而手动添加的),第一个8比特”01000000”按ASCII码来解码的话,所对应的字符是字符”A”,同理其它3个8比特可分别解码为”BCD”,即这个文件流可解释成“ABCD”,然后记事本就将这个“ABCD”显示在屏幕上。
事实上,世界上任何东西要与其他东西通信会话,都存在一个既定的协议,既定的编码。人与人之间通过文字联络,汉字“妈”代表生你的那个人,这就是一种既定的编码。但注意到这样一种情况,汉字“妈”在日本文字里有可能是你生下的那个人,所以当一个中国人A与日本B之间用“妈”这个字进行交流,出现误解就很正常的。用记事本打开二进制文件与上面的情况类似。记事本无论打开什么文件都按既定的字符编码工作(如ASCII码),所以当他打开二进制文件时,出现乱码也是很必然的一件事情了,解码和译码不对应嘛。例如文件流”00000000_00000000_00000000_00000001”可能在二
进制文件中对应的是一个四字节的整数int 1,在记事本里解释就变成了”NULL_NULL_NULL_SOH”这四个控制符。
文本文件的存储与其读取基本上是个逆过程,不再累述。而二进制文件的存取显然与文本文件的存取差不多,只是编/解码方式不同而已,也不再叙述。

三、文本文件与二进制文件的优缺点
因为文本文件与二进制文件的区别仅仅是编码上不同,所以他们的优缺点就是编码的优缺点,这个找本编码的书来看看就比较清楚了。一般认为,文本文件编码基于字符定长,译码容易些;二进制文件编码是变长的,所以它灵活,存储利用率要高些,译码难一些(不同的二进制文件格式,有不同的译码方式)。关于空间利用率,想想看,二进制文件甚至可以用一个比特来代表一个意思(位操作),而文本文件任何一个意思至少是一个字符.
很多书上还认为,文本文件的可读性要好些,存储要花费转换时间(读写要编译码),而二进制文件可读性差,存储不存在转换时间(读写不要编解码,直接写值).这里的可读性是从软件使用者角度来说的,因为我们用通用的记事本工具就几乎可以浏览所有文本文件,所以说文本文件可读性好;而读写一个具体的二进制文件需要一个具体的文件解码器,所以说二进制文件可读性差,比如读BMP文件,必须用读图软件.而这里的存储转换时间应该是从编程的角度来说的,因为有些操作系统如windows需要对回车换行符进行转换(将”\n”,换成”\r\n”,所以文件读写时,操作系统需要一个一个字符的检查
当前字符是不是”\n”或”\r\n”).这个在存储转换在Linux操作系统中并不需要,当然,当在两个不同的操作系统上共享文件时,这种存储转换又可能出来(如Linux系统和Windows系统共享文本文件)。关于这个转换怎样进行,我将在下一篇文章《Linux文本文件与Windows文本文件间的转换》给出^_^

四、C的文本读写和二进制读写
应该说C的文本读写与二进制的读写是一个编程层次上的问题,与具体的操作系统有关,所以"用文本方式读写的文件一定是文本文件,用二进制读写的文件一定是二进制文件”这类观点是错误的.下面的讲述非明确指出操作系统类型,都暗指windows.
C的文本方读写与二进制读写的差别仅仅体现在回车换行符的处理上.文本方式写时,每遇到一个”\n”(0AH换行符),它将其换成”\r\n”(0D0AH,回车换行),然后再写入文件;当文本读取时,它每遇到一个”\r\n”将其反变化为”\n”,然后送到读缓冲区.正因为文本方式有”\n”--”\r\n”之间的转换,其存在转换耗时.二进制读写时,其不存在任何转换,直接将写缓冲区中数据写入文件.
总地来说,从编程的角度来说,C中文本或二进制读写都是缓冲区与文件中二进制流的交互,只是文本读写时有回车换行的转换.所以当写缓冲区中无换行符”\n”(0AH),文本写与二进制写的结果是一样的,同理,当文件中不存在”\r\n”(0DH0AH)时,文本读与二进制读的结果一样.


五、实例
5678的存储形式为:ASCII码:    00110101   00110110   00110111   00111000  (四个字节)
5678的存储形式为:二进制:      00010110   00101110  (两个字节)
二进制文件和文本文件的唯一差异就是前者含有一些非标准输出的ASCII码。0×01就是非标准输出的ASCII码,0×61就是标准输出的ASCII码。

分类: 代码 标签: 关注度: 1%

QQ应用程序错误常见问题处理办法

2010年8月20日 admin 没有评论

QQ2009非得安装?绿色免安装的小技巧 其实就是缺少一个文件 SSOPlatform.dll 对sp6无用

内容:
记得早期的QQ版本都是绿色版本的,QQ程序可以拷贝到任意目录,双击就可以运行使用了。

而新的QQ2009的核心做了巨大的革新,却发现不能像早期版本那样拷贝到任意目录来运行了,登录时提示文件已经损坏,需要重新安装。如图:

而在没有管理员权限的帐户下就没有办法安装了,自然没法用上最新的QQ2009。况且我也不愿意每次都去下载去安装一次啊。

这个问题应该有大多朋友发现了,难道真的就没办法实现免安装运行吗?

花了点时间分析,原来是少了一个SSOPlatform.dll的文件,安装完后位置在C:Program FilesCommon FilesTencentTXSSOBin目录下,只要将其拷贝到QQ2009安装目录D:Program FilesTencentQQ2009Bin即可完成所谓的绿化免安装版。

将QQ2009目录打包,免安装版本就此完成了。

补充说明:如果您试图运行QQ.exe出现下图的错误提示,说明您的机器缺少VC2005的运行库,可以在微软下载网站进行下载安装。

附:QQ2009提示音(假设安装在D:toolsQQ中):
好友/群消息 D:toolsQQMiscSoundClassicmsg.wav
好友上线 D:toolsQQMiscSoundClassicGlobal.wav
语音呼叫 D:toolsQQMiscSoundClassicAudio.wav
────────────────────
补充:如在Windows 2000/Win2K下做绿色免安装包,按上述方法做成的做成后,运行会出现如下错提示:

运行QQ2009,依次提示找不到atl80.dll、msvcp80.dll和msvcr80.dll。

这时,可以到网上搜索相关文件,并拷贝到QQ2009的Bin文件夹中。或者,如装和WinXP的双系统等,可在WinXP等中找,并拷贝到QQ2009的Bin文件夹中。如果都没找到,请到网上下载一个其它聊天工具,如百度Hi聊天工具,安装后,在其安装目录中找到相关文件,拷贝后,卸载相关软件即可。

分类: 程序 标签: , , 关注度: 1%

如何将PhpBB论坛整合到WordPress中?

2010年8月12日 老友吧 没有评论

增加博客的浏览量和用户的参与性的方法之一就是给博客整合进一个论坛,当然前提是你必须拥有好的用户基础,这样论坛才能发挥出较好的作用。当然也有的SEOer认为,论坛会分散用户的注意力,从而降低博文的浏览量,进而损害了博客的用户基础。

但不管怎样,一般来说,给博客增加个论坛功能是个非常好的主意,论坛可以增加博客所缺乏的讨论性话题,可以增加用户与网站管理者之间的互动。

虽然利用WP的回复插件可以很容易地实现问题的联系性讨论,但显然给博客添加个专属论坛将更方便。

  • 专有性的内容

每一个新开的讨论话题,都有其专属及唯一性的内容,这将非常有利于搜索引擎的抓取。

  • 搜索引擎优化

通过优化博客中整合的论坛,比如整合PhpBB,博客就有更高的机会提高其在搜索引擎中的权重。

  • 网站管理者与用户的交互性

显而易见地,通过整合博客论坛,可以增强博客与浏览者之间的交互性,可以增强博客的谈论气氛。

那么如何将论坛整合到WordPress中呢?

1. 在网站根目录建立个文件夹,然后安装好PhpBB论坛,网上有很多PhpBB论坛安装的教程,这里就不赘述了。

2.下载并安装 WordPress-PhpBB integration插件。

3.配置好插件和边栏。

利用这个插件整合论坛,不需要繁琐的数据库整合和其他方面的操作,并且整合后发表帖子或博文都很方便,当然你还可以在边栏中添加最新论坛帖子排行,非常有用。
当然如果觉得使用不方便,可以推荐你使用WP-UNITED: THE PHPBB – WORDPRESS INTEGRATION PACKAGE
这个插件可以完全整合PhpBB和wordpress,实现同步注册和登录,发帖等,功能强大,呵呵,因此安装起来也很麻烦,
有兴趣的同学可以Google下,插件完全免费。

分类: WP 标签: , , 关注度: 2%

What Debt Settlement Companies Don’t Tell You?

2010年8月8日 老友吧 2 条评论

If you’re cerebration about application a debt alliance or  debt settlement  annual to advice you get out of debt faster and save money on your annual payments, accomplish abiding you do your appointment afore allotment a company. There are absolutely shams and scams out there.

First let me say that debt alliance is *not* the aforementioned as debt settlement/negotiation, which a lot of humans don’t realize.

Debt settlement companies allegation hundreds of dollars as an antecedent “admin fee” to set up your account, additional a annual annual fee. The fees alter depending on the aggregation and the bulk of your debts.

Such companies yield your money every month, but don’t accomplish annual payments to your creditors! Instead, they put it in a assurance account, accommodate your debts with your creditors, again accomplish a lump-sum transaction if there’s abundant in your annual to pay a creditor in full.

That can yield *years* depending on the bulk of debt you acquire with anniversary creditor. Meanwhile, you can be sued by your creditors and your accomplishment can be garnished! (Or just don’t accomplish payments to your creditors. You’ll end up in the aforementioned atom afterwards paying anyone to advice you get there!)

Settlement companies don’t ask your creditors to stop all interest, backward fees and overlimit fees from accruing. That agency while the negotiations are ongoing, your bills will abide to grow! So if you’re sued and a judgement is brought adjoin you, you’ll owe added money than before!

And base companies, which there are alot of, don’t acquaint you *any* of this up front. I alarm it “getting permission by omission” because they artlessly don’t acquaint you how their affairs works *before* you assurance an acceding with them. Or after, for that matter. But if you ask the appropriate questions, eventually you’ll amount it out. (Or if the applesauce hits the fan. Whichever comes first.)

Let me accord you an archetype of how debt settlement works.

Let’s say you acquire $20,000 in apart acclaim agenda debt. You owe $10,000 to one acclaim agenda company, $6,000 to addition and $4,000 to a third. You accede to a 5 year plan area you pay $250 a ages to the adjustment company. (After all, $250 a ages for 60 months is alone $15,000, so you’re extenuative $5,000 and you’ll be debt-free in 5 years, right?)

The admin fee will amount you $750. Your aboriginal 3 annual payments go appear that and annihilation gets put into your assurance annual until your 4th month.

The adjustment aggregation keeps $50 of your $250 transaction anniversary ages for the annual fee. That agency $200 a ages is accepting added to your assurance account.

Most debt settlement companies affirmation to be able to accommodate your debt for about 50% of what you owe. So let’s use the everyman acclaim agenda debt as an example.

If you owe $4,000 and your creditor agrees to acquire $2,000 as transaction in full, it will yield 10 months at $200 per ages to acquire abundant in your assurance annual to pay off just that one acclaim card.

But remember, your aboriginal 3 payments to the adjustment aggregation alone paid the admin fee. That agency your aboriginal acclaim agenda adjustment is 14 months *after* you started sending them money.

So what’s the problem? It’s simple. Your creditor won’t accede to acquire bisected of your absolute debt unless, or until, it can be paid in full. Otherwise, you’re accepted to accomplish your accustomed annual payments.

Since you don’t acquire $2,000 in your assurance account, and you won’t acquire it until added than a year afterwards you chock-full paying your creditor directly, they’ll apparently yield you to cloister and appeal that your accomplishment be busy continued afore you acquire that $2,000 congenital up.

And what about your added creditors? Well, they’ll be cat-and-mouse even best to get their money from the adjustment company. The $6,000 debt will yield 15 *more* months to pay off, bold your creditor waits that continued and agrees to 50%. And that $10,000 bill? You do the math.

On the added hand, if you active up for a 3 year plan with the adjustment company, your debts would be paid off sooner. But, the catechism is, will your creditors delay that long? Apparently not.

The facts are, you can accommodate with your creditors yourself. A lot of will accede to yield a abate annual transaction from you and stop all absorption and fees from accruing. And, of course, you’ll save bags of dollars in fees to a adjustment company.

Before signing up for any service, amuse be abiding you analysis out the aggregation thoroughly. And don’t let the words “non-profit” fool you either. Alot of debt adjustment companies affirmation to be non-profit.

Going aback to the archetype above, if you pay them $15,000 over a 5 year time anatomy and they achieve your debts at bisected of what you owed, they’ll accomplish $5,000 from you. I’d alarm that a profit, abnormally back they ability not acquire in fact helped you in any way.

Most companies will acquiesce you to abolish your annual and get a acquittance of what you’ve paid, beneath the non-refundable admin fee and the annual annual fees. If you feel you’ve been mislead about their program, don’t alternate to altercate til the beasts appear home. File a complaint with the Better Business Bureau or appoint an advocate if you feel you’re accepting nowhere.

分类: 随笔 标签: 关注度: 2%

腾讯很强大。。。膜拜下。。。

2010年8月7日 老友吧 没有评论

分类: 随笔 标签: 关注度: 1%

脱Enigma Protector壳文件

2010年8月7日 老友吧 没有评论

—————————————————–
[ 破文标题 ] Bypass Enigma Protector Registration
[ 破文作者 ] Hmily[LCG]
[ 作者邮箱 ] UnPacKer#vip.qq.com [ #换成@ ]
[ 作者主页 ]
http://Blog.52Crack.Cn 吾爱破解{http://www.52pojie.cn}
[ 破解工具 ] OllyDBG
[ 保护方式 ] 被Enigma Protector注册机制保护的程序
[ 破解声明 ] 我是一只小菜鸟,只愿与大家分享我小小的经验
—————————————————–
[ 破解过程 ]—————————————–

看名字顾名思义就是跳过Enigma Protector加壳的注册机制,过程简单,大牛跳过.

先直接启动程序,待出现注册对话框

88 02 E8 ?? ?? FF FF A1 ?? ?? ?? ?? 80 B8 ?? ?? 00 00 00 74 0F A1

特征码适合各个版本Enigma Protector保护的程序

mov byte ptr ds:[edx],al        ; 关键标志位AL置一

可以在这里下硬件访问断点,重新运行程序,等访问到这里的时候把AL置一,不要修改其他代码,有校验然,然后直接运行,就可以跳过注册了.

破解思路:

首先先运行起来后直接在壳的最后一个区段搜索代码Delphi按钮事件的特征码:

740E8BD38B83????????FF93????????#
搜索到后Call上下好断点,然后直接随便输入用户名和假吗吧,点注册就断下来了,后面自己跟踪,关键是跟踪到这里

cmp byte ptr ds:[eax],0        ; 这里就是比较标志位

这里就是比较标志位了,如果EAX为0则出错,EAX里地址的数据也是整个注册验证的标志位,现在直接再这个地址里下硬件写入就可以找到是哪赋值的了,也就回到前面的地址了,这个注册过程都是这个标志,抓住这个就解决问题了,OK,结束,谢谢观看.

分类: 破解 标签: , 关注度: 1%

脱壳后软件无法运行的原因分析及对策写给初学者

2010年8月7日 老友吧 没有评论

一、脱壳是否成功的标志
一般说来,对软件脱壳是不会改变原软件的运行机制的。它只是将加密的IAT地址还原成装载前的API函数名字串的地址,并以明码方式显示。脱壳是否成功的标志是软件运行前图标与脱壳前一致、运行时windows并未发出“……,初始化失败……”的警告,那么脱壳大体是成功的。若出现初始化失败警告,则百分之百是IID表或IAT表搞错了。

二、用OD加载时出现“异常”或直接运行时,windows弹出“发送错误报告”消息。
原因:
(1)OEP入口地址错误;
(2)在手动脱壳时“张冠李戴”,把某函数的地址写到了另一个函数的地址上去了。

三、软件一运行就退出
1.原因:
(1)如果脱壳前软件能(直接)运行,脱壳后软件一闪而过,说明软件有“文件校验”。软件脱壳前后的最大变化是文件尺寸变化,那么软件的“校验和”一定要发生变化,当它发现“校验和”变了时,知道了你对软件“动了手脚”,它就毫不犹豫地退出了。若这时你想找到“文件校验”的位置,无异于大海捞针!
(2)如果脱壳后能直接运行,但用OD加载时就退出或有无法跳过的异常,则是有“反跟踪”部件。(这和脱不脱壳没有关系)反跟踪不是本文今天讨论的内容,只是附带说一声。

2.对策:
在一个软件中去找出它的“文件检验”代码在什么地方,同样得用“思想”,和破案也差不多。别急,先看看它是什么语言编写的。若是用“VC++”或“Delphi”编写的,则脱壳后的软件对于使用者,则基本上没有秘密可言。唯一的是它们的“call”嵌套太深,要进行底层的跟踪,很容易跟丢。举个例子,说明跟踪方法。
有个商业软件,脱壳前可以运行,脱壳后就不能运行了。它是用“VC++”编写的。

3.破解思路:
用“VC++”或“Delphi”来编写软件,有它快捷方便的一面。但是,因为它不能直接对内存进行操作,所以灵活性受到很大影响。例如,它就不能对运行中的内存文件进行“校验和”检验,若非要检验,除非在VC编程中嵌入ASM代码,但这样一来,地址的起点和终点难于确定,且给调试带来麻烦。一个变通的办法是:打开同一文件的一个“副本”,检验它“副本”的“校验和”也可以达到对自身检验的目的。这样一来,软件的秘密也就暴露无遗了,用OD来查看(已经脱壳的)软件怎样打开另一个文件,那实在是“再容易”不过的事情了!

4.具体操作:
(1)用OD打开要跟踪的软件,右键打开搜索“所有模块间的调用”,在所有“CreateFile”和“ReadFile”的调用地址上设断点。
(2)运行OD,按“F9”,中断在一个CreateFile上:

CreateFile中断:(该函数的返回值是被打开文件的句柄)
……………………………………………………………………
0013E708 0013E90C |FileName = “E:\xxxx\New_xxxxxxx.exe”
0013E70C 80000000 |Access = GENERIC_READ
0013E710 00000003 |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
0013E714 00000000 |pSecurity = NULL
0013E718 00000003 |Mode = OPEN_EXISTING
0013E71C 00000080 |Attributes = NORMAL
0013E720 00000000 \hTemplateFile = NULL
……………………………………………………………………
以上是堆栈中的显示,其中,FileName = “E:\xxxx\New_xxxxxxx.exe”是将要打开的文件。若不是正在运行中的同名文件,则继续按“F9”。其余的参数是打开方式,不重要。
监视CreateFile中断的另一个收获是知道了该软件在硬盘上写入了哪些文件,比如注册表中、系统文件夹中等(我最讨厌那些在硬盘中乱写文件的软件)。更重要的是,若软件有“反跟踪”代码,那么“CreateFile”或“FindWindow”等API函数调用时,它明码显示的文件名或窗口名是某个“调试软件”,就表明它在“反跟踪”,若发现了它们,相应的“反反跟踪”措施也应该不是太困难的事。当然,高明的作者用VC也会让你伤透脑筋。
当FileName=“正在运行的文件名时”, 再按“F9”来到ReadFile的中断上:

ReadFile中断:
…………………………………………………………
0013E708 000001C0 |hFile = 000001C0
0013E70C 0013EA10 |Buffer = 0013EA10
0013E710 00001000 |BytesToRead = 1000 (4096.)
0013E714 0013E71C |pBytesRead = 0013E71C
0013E718 00000000 \pOverlapped = NULL
0013E71C 00000000
0013E720 00001000
0013E724 004C5CD7
0013E728 0000016F ;调用次数记录
…………………………………………………………
其中,hFile = 000001C0是打开的文件句柄,Buffer = 0013EA10是保存读入数据的地址,BytesToRead = 1000 (4096.)是读入的字节数,其余的不重要。
由于一个软件,不可能只有1000h字节,一次不能读完,所以ReadFile要调用多次,调用的次数总可以在某个寄存器中或堆栈中找到,这里(0013E728 :0000016F)就是递减的调用次数。每调用一次,后面的程序就将这1000h字节累加一次,稍加跟踪就到了“校验和”代码处:

(3)文件“校验和”代码:
……………………………………
004E0164 . 8D85 E0EFFFFF lea eax,dword ptr ss:[ebp-1020] ;eax=读入字节存放地址
004E016A > 33C9 xor ecx,ecx
004E016C . 8A08 mov cl,byte ptr ds:[eax]
004E016E . 014D EC add dword ptr ss:[ebp-14],ecx ;[ebp-14]=累加值
004E0171 . 40 inc eax
004E0172 . 4A dec edx ;1000h字节的计数
004E0173 .^ 75 F5 jnz short 004E016A
004E0175 > 4B dec ebx ;调用次数计数
004E0176 .^ 75 C6 jnz short 004E013E
004E0178 > 836D EC 7B sub dword ptr ss:[ebp-14],7B ;累加完成后的修正
004E017C . 8D85 48EDFFFF lea eax,dword ptr ss:[ebp-12B8]
004E0182 . E8 B564F2FF call 0040663C
………………………………………
累加结果存放在[ebp-14]=0013FA1C中。
不停地按“F9”,并观查(0013E728 :0000016F)中的值,当它变为1时,就单步跟踪,“比较转跳”代码就近在咫尺了。

(4)“比较转跳”代码:
………………………………………
004E0182 . E8 B564F2FF call 0040663C ;这就是前面的最后一行
004E0187 . E8 E826F2FF call 00402874 ;释放一些内存等善后(VC特有)
004E018C . 837D F4 00 cmp dword ptr ss:[ebp-C],0
004E0190 . 75 22 jnz short 004E01B4
004E0192 . 8B45 E4 mov eax,dword ptr ss:[ebp-1C] ;取0013FA14的检验值
004E0195 . 3B45 EC cmp eax,dword ptr ss:[ebp-14] ;和累加值比较
004E0198 75 13 jnz short 004E01AD ;最关键的(非0)转跳
004E019A . BB 01000000 mov ebx,1
004E019F . 8B45 FC mov eax,dword ptr ss:[ebp-4]
004E01A2 . FE80 10450100 inc byte ptr ds:[eax+14510]
004E01A8 . E9 96000000 jmp 004E0243
004E01AD > 33DB xor ebx,ebx
004E01AF . E9 8F000000 jmp 004E0243

5.修改代码:
到了现在,文件检验和转跳都清楚了,修改就变得十分简单,只需将:(用16进制编辑器)
……………………………………………………………………
004E0198 75 13 jnz short 004E01AD ;改为:90 90 nop ,nop
…………………………………………………………………………
存盘,大功告成了。怎么样?一个大海捞针的工作变得谨然有序。运行一切正常。
(注:该软件是国产商业软件,需要注册才能有全部功能,为了保护知识产权,注册破解法不是讨论内容)

分类: 破解 标签: 关注度: 1%

花指令的原理和常用花指令收集

2010年8月1日 老友吧 4 条评论

花指令的作用是对付静态分析,以下面一段程序说明一下花指令的原理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include
#include
void main()
{
    _asm
    {
            jmp l2
        _EMIT 0x1//这里就是花指令
        _EMIT 0x2//这里就是花指令
        _EMIT 0x3//这里就是花指令
        _EMIT 0x4//这里就是花指令
l2:
        mov eax,0x11111111
    }
}

可以看到,程序直接跳转到标签l2了,在jmp指令和l2之间的就是花指令,花指令为什么能起作用呢?那是因为反编译器在反编译的时候不会像我们人一样去理解jmp和l2之间的指令是永远不会执行到的,所以在反编译的时候就把这段乱七八糟的代码作为正常的指令了,而这样的反编译会影响mov eax,0×11111111这个指令的正确识别,所以导致在OD中以上代码不会正确显示。

了解了原理我们就可以自如地设计花指令了,比如再加一段_EMIT 0×5等等。

花指令不光是能够用jmp指令来设计,还可以用call指令配合ret指令来进行设计,原理是这样的:我们知道call指令等于这样两条指令,一是把自身所在位置的下一条指令的地址压入堆栈,二是jmp到call的地址处,而ret指令可以理解为jmp到call指令压入堆栈的地址,因此,可以用call指令这样来写花指令:

1.call一个地址,在call下面随便写一点花指令,但是要注意一点与jmp版花指令不同的,我们要记得自己写的花指令占了多少个字节,比如,占了2字节,至于为什么要记得,往下看

2.在call里面,也就是函数里面,首先pop出压入的地址,然后把这个地址减去花指令占用的字节数,这里是2字节,再重新push进堆栈,然后就ret

这样,call结束以后执行的下一条指令就是我们想要去的位置了,也就是花指令下面的正常的指令了

其实用call来做的话起到的也就是jmp的作用,道理是一样的,只不过手法不同

这个call ret配合的方法是我分析aspack看到的,不知道还有没有其他的花指令的方法,有的话再加上:)

这里有个找花指令的小技巧,当发现jmp或者call的地址在OD中没显示的话,就把jmp或者call指令的下一个指令nop掉吧,肯定是花指令,如果还没有显示的话就继续nop下一条,直到显示的指令和执行的指令一致,所以说,去花指令是个体力活,哈哈

补充一点,如果这个call不跟进去的话,貌似程序就没办法调试了,不知道怎么回事,不清楚原因

分类: 破解 标签: , 关注度: 1%

什么是绿色软件,如何制作绿色软件

2010年7月26日 老友吧 3 条评论

绿色软件的定义和分类

安装完操作系统后,我们一般需要安装一些常用的软件,但是随着我们常用软件的增多,这个安装过程显得越来越令人厌烦:运行setup,然后是选择目标路径,不断的重复这个过程。后来我见到有人制作所谓的绿色软件,不需要安装,感觉很方便。当时很好奇,想知道怎么做的,有没有什么方便的工具等等,可是在网上没有找到什么相关的知识,随着自己的一步步摸索,我逐渐积累了一些经验和比较有效的方法,在这里提供给大家。

首先要先弄清楚何谓绿色软件?其定义是什么?我收集了一些网友的讨论和想法:
A 说,不需要安装 同时 不向注册表写入任何东西
B 说,应该还包括不向系统文件夹拷贝文件,我的理解就是:安装这个软件对现有的操作系统没有任何改变,改变包括写注册表之类的。
C 说,除了你现在安装的目录,应该不往任何地方写东西(比如log)。
D 说,免安装,并且 不往程序所在目录以外的任何地方产生垃圾文件,还有 不写注册表
E 说,综上加一条,可以放在移动存储器上在任一电脑上使用且效果相同。
F 说,好像不写注册表,直接copy来就可以用得就算吧。
G 说,重新安装系统的时候,仅需导入注册表,不需重新安装,就可以认为是绿色软件。
H 说,其实只要不写注册表、不往系统文件夹写文件,哪怕需要.ini文件也在软件自己的目录里就行,那么就可算作绿色软件,特征是能够任意copy到别的文件夹照样能用或重装系统后直接能用,没有其它变化。所以有小部分“安装”的软件其实也符合绿色软件,因为它 的安装只是解压缩建立文件夹而已。
I 说,基本同意,但不写注册表的几乎是不可能,你只要运行过那个软件,打开注册表编辑器HKLM和HKLU下面software看看,几乎都会留下键值,其实这样也应该叫做绿色的吧。

综合上面的意见,可以总结出绿色软件的优点,就是对操作系统无污染(恐怕这也是绿色这个名字的由来),不需要安装,方便卸载,便于携带,可以拷贝到便携的U盘上到处运行。

我的意见是,绿色软件应该分类,分为狭义的绿色和广义的绿色:
狭义的绿色可以叫做纯绿色软件,就是指这个软件对现有的操作系统部分没有任何改变,除了软件现在安装的目录,应该不往任何地方写东西,删除的时候,直接删除所在的目录就可以了,就类似于以前的大多数DOS程序。
广义的绿色就是指不需要专门的安装程序,对系统的改变比较少,手工也可以方便的完成这些改变,比如拷贝几个动态库,或者导入注册表,这里的关键是手工可以方便的完成这些改变,或者可以借助于批处理等等脚本完成。
为什么要分为两类?虽然狭义的绿色软件最为理想,但是完全符合这种定义的软件非常罕见,而相当多的软件可以划分到广义的绿色这个类别,这样包括了广义的绿色软件的概念后使得绿色软件这个概念更有意义。
那么不符合绿色软件要求的有哪些呢?主要是指那些和操作系统联系和集成非常紧密的软件,这些软件不适合制成绿色软件,最好还是用原来的安装程序来安装。如IE6,替换了系统中的许多动态库,手工完成这个过程很困难,也不太安全。又比如大多数杀毒软件,如果必须实时监控系统的底层运作,对系统的修改比较大,就不适合做成绿色软件。还有微软公司的Office系列软件,和系统集成的也比较紧密。但是广义的这个标准比较灵活,如果有人搞清楚了Office系列软件的安装制作过程,也有可能制作出广义的绿色的Office系列。

为了充分理解绿色软件的定义,必须从现代软件的安装过程和运行过程两个方面来讨论。
安装过程:以前在dos下面的时候,就没有这些所谓绿色软件的说法,原来程序的安装基本上都是简单的复制或者解压缩,然后配置一下config.sys 和autoexec.bat文件就可以了。随着windows的发展,应用软件也越来越大,也越来越复杂,从而有公司专门从事安装程序的制作,如InstallShield就是一款比较有名和应用比较广泛的安装软件,现在windwos也有了专门的安装程序,就是Microsoft Installer。安装程序的作用是什么呢?主要是为了给要安装的程序提供一个简单方便的设置环境,而不需要用户手工完成这个步骤,越是复杂的配置过程,对系统的修改越多,对安装程序的依赖性就越高,Windows程序的易学易用的优点和良好的安装界面是分不开的,安装软件的任务就是给应用程序提供一个初步完好的可以运行的环境,而不需要用户进行手工配置。
运行过程:应用程序启动的时候,从注册表或者配置文件中读取配置,运行的时候,可以修改配置,但这个修改一般是在安装软件所作工作的基础上进行的,例如不能改变应用程序的安装位置了。
明白安装过程和运行过程的区别后,很容易就想到把绿色软件的使用按照这两个阶段分为绿色安装过程和绿色运行过程。绿色安装是绿色运行的前提,没有绿色安装,也就说不上什么绿色运行了,绿色软件首先必须是绿色安装,我前面提到的不适合绿色软件标准的基本上都是不能绿色安装的。
绿色安装的基本含义,我认为可以也可以分为狭义的和广义的绿色安装:
1 狭义的绿色安装就是指直接拷贝或者解压缩到目标目录,不需要向系统目录拷贝也不需要写入注册表,这是最理想的情况,或者是安装程序的作用除了解压缩外是可以忽略的,如在开始菜单加入快捷键等对系统和软件的运行没有太大影响的操作,也就是说安装过程的作用就是复制文件到目标文件夹。
2 广义的绿色安装就是指在狭义的复制的基础上,必须向系统目录拷贝一些动态库,或者要在注册表中导入必要的设置,或者要进行一些其他的配置,否则的话,应用程序不能运行,而且这个配置工作应该比较简单,也容易撤销这些操作对系统的改变。
同样,绿色运行也可以分为狭义的和广义的绿色运行:
1 狭义的绿色运行指的是软件运行时完全不改变操作系统的文件和配置–很多小程序属于这个类别,或者运行结束后把撤销对系统的改变,比如运行的时候加载一个驱动程序,退出时卸载该驱动程序,所操作的INI文件在自己的程序目录中。
2 广义的绿色运行指的是可以通过程序本身来改变当前的设置,如改变当前软件的运行方式,或者与某些文件后缀相关联,或者在注册表中留下当前的软件设置,也就是说对系统的注册表有永久的改变,但是这些改变都是应用程序自己完成的,不需要借助其他程序或者用手工完成。
综合绿色安装和绿色运行,可以把绿色软件细分为:
1 狭义的绿色安装,同时是狭义的绿色运行的软件,对操作系统没有任何改变。
2 狭义的绿色安装,广义的绿色运行的软件,软件的配置工作由软件本身来完成,不是通过安装程序。
3 广义的绿色安装,狭义的绿色运行,软件的配置工作由安装程序来完成,软件本身不能对配置改,同时如果没有配置工作,软件无法正常运行。
4 广义的绿色安装,广义的绿色运行,最复杂的一种绿色软件,软件的配置工作由安装程序来完成,但是软件本身可以对配置 修改,同时如果没有配置工作,软件无法正常运行。

只有第一个类别属于我说的狭义的绿色软件,其他3类都属于广义的绿色软件的范畴。

绿色软件的“绿化”方法
下面讲一下绿色软件的制作,简称软件的“绿化”,绿色软件的制作实际上就是我们自己完成安装程序的工作。没有什么固定的方法,基本上是猜测加上试验,不同类别的绿色软件分别有不同的制作策略。
拿到一个新的软件,想要制成绿色软件的话,我一般遵循如下步骤:
1 判断。就是指猜测这个软件能不能制成绿色软件,从功能,从你对它的了解,如果你觉得这个软件和系统的关系非常紧密,就不要继续下去了,还是用原始的安装程序最保险最方便,这样的例子有directx9 ,IE6,Norton的反病毒软件等等。这样的判断可以节省你的时间,当然你可以忽略这一步,尝试制作绿色软件,那么就转到第2步。
2“绿化”。对于不同的软件有不同的方法,没有一定的规则,但是总的来说,就是理解软件的安装过程,转换为绿色安装,在这个过程中,可能需要尝试多个方法,也可能最后由于软件的复杂性或者某些特性,导致无法绿化。要有失败的思想准备,具体的绿化方法随后讲述。
3 测试。”绿化“后的测试最好到你个全新安装的操作系统中测试,而且如果你要在多个操作系统中使用这个软件的话,还要在其他的操作系统中测试,有的软件的文件随着操作系统的不同而不同,这个时候你需要在不同的操作系统中进行”绿化“过程,最后综合为一个完整的适应多个操作平台的绿色软件。

“绿化”方法,需要根据经验选择不同的“绿化”方法,也可能需要不断尝试不同的方法,直到成功为止。按照先易后难的次序,具体的方法包括:
1 解压缩。这是最简单的一种方法,就是指尝试能不能直接解开软件的压缩包。用Winzip和Winrar试一试,看看能不能直接打开压缩的安装文件,如果不能打开,那么就换别的方法。如果可以,那么恭喜,这个软件多半是属于绿色安装的软件(有个别例外,如EmEditor),把压缩包中的文件直接解压到目标路径,然后测试软件的功能是否正常,如果功能正常,那么“绿化”就成功了,如果使用不正常,那么就换别的方法。这一类软件的特点是安装程序的工作完全可以由软件自身来完成。
2 安装然后卸载。也是比较容易的方法,完全是体力劳动,就是指直接安装这个软件,然后把程序复制出来,最后卸载安装程序。如果这个软件的安装程序的作用仅仅是复制文件和生成快捷键等工作,那么就属于绿色安装,可以使用这个方法。最后测试软件的功能是否正常,如果功能正常,那么“绿化”就成功了,如果使用不正常,那么就换别的方法。
3 反编译安装程序。这个方法需要动脑筋,就是根据安装程序所用的制作工具,选择相应的反编译程序,然后阅读反编译出的安装脚本,制作绿色软件。目前的软件大多使用专门的安装工具制作,如InstallShield,Wise,Inno Setup,Windows Installer,NSIS(Nullsoft),Installer VISE,其中Windows Installer格式的安装文件(就是MSI,MST为后缀的文件),可以通过微软的免费工具Orca打开查看,InstallShield格式的安装文件也有很多免费的工具可以解压缩和查看脚本。当然专门的安装工具很多,有许多安装程序没有相应的反编译程序,这种时候,就无法使用这个方法了。
4 观察反安装程序和log文件。现在的软件安装完成后绝大多数都带有卸载方法。卸载是安装的逆过程,如果知道怎么卸载,那么也可以推测出如何安装。由专门的安装工具制作的反安装程序,一般都是根据某一个文件中的信息来卸载的,可以用一个纯文本的编辑器打开这个文件。个别情况下这个文件完全不包含可读信息,就只好换用其他方法了。具体过程就是先采用方法2,然后理解反安装过程,最后根据反安装的信息制作绿色软件。
5 比较系统快照。当前面的方法都失败的时候,可以试一试这个方法。具体思路就是首先在安装软件之前,把系统的状态记录下来,主要包括注册表和系统目录的所有的文件状态。然后就是安装软件。安装完成后,再一次记录系统状态。最后就是比较前后两个系统状态的不同,而得知安装程序所做的工作。这个工作一般由专门的软件完成,如免费工具Regshot,免费工具inctrl5(http://www.pcmag.com/article2/0,4149,9882,00.asp),微软公司的sysdiff工具(可以从Windows2000的资源工具箱中得到),或者WinInstall LE(在Windows 2000 Sever 光盘的目录VALUEADD\3RDPARTY\MGMT\WINSTLE\中)。在多数时候,仅仅需要对比安装前后注册表的不同,这时候还有大量的注册表工具可以选用。在得出系统差异后,把差异分解为两个部分:文件部分和注册表部分。文件部分指的是向系统目录拷贝的文件,以及作为COM组件注册的文件,还有与这些文件相关的注册表部分。注册表部分单单指其余的注册表的变化。对于文件部分,可以进一步区分出必须要往系统目录拷贝的文件(这种情况是少数)和可以放在软件的安装目录的文件。对于注册表部分,区分出由这个软件的安装程序本身所作出的注册表操作和注册COM组件时候的注册表操作,抛弃其他程序(如资源管理器Explorer)的操作。根据所有这些,写一个拷贝文件,注册COM组件和导入注册表的批处理文件,就可以完成绿色软件的制作了。当注册表文件中含有路径信息的时候,可以手工修改注册表文件或者把注册表文件转化为INF文件从而实现全自动的路径处理。
6 直接导出注册表,寻找自注册的COM组件。这个方法是上面的方法5的简化版,现在软件的配置大多写在注册表中的“HKEY_LOCLAL_MACHINE\SOFTWARE\软件公司名字”和“HKEY_CURRENT_USER\SOFTWARE\软件公司名字”这2个键下面,直接对把这2个注册表键导出到REG文件中。自注册的COM组件都需要导出如下4个函数:DllCanUnloadNow,DllGetClassObject,DllRegisterServer, DllUnregisterServer,可以用vc自带的depend.exe找出哪一个动态链接库是自注册的COM组件。最后写一个批处理文件用regsvr32.exe注册COM组件和用regedit.exe导入注册表。
通过上面分析安装程序的动作,把安装程序的工作分解为复制文件,注册COM组件,安装服务驱动,注册表配置等几个部分,虽然注册表配置可以覆盖注册COM组件,安装服务驱动等操作步骤,但是把这些明显分割出来有助于制作绿色安装的软件。对于需要更复杂的步骤来安装的软件,还是使用原来的安装程序比较保险。

对于每个方法,下面我会给出具体的例子,有些时候,需要几个方法联合使用,无论使用什么方法,都是模拟原来的软件作者的安装过程,所以原作者最容易给出该软件的绿色版本。

具体事例

winrar3.30 和Winzip9.0,采用方法1,解压缩。这个方法非常简单,从天空软件站下载Winzip90.exe和winrar330sc.exe,在一个安装了Winrar的系统上,用鼠标右键选择下载的文件,运行右键菜单中的用Winrar打开的命令,然后把文件解压到我们的目标路径,如E:\tools目录,就可以了。然后分别对Winzip9和Winrar进行设置就可以了。运行winzip9目录中的Winzip32.exe,进行winzip的设置。Winrar也是一样,运行Winrar.exe,打开菜单选项-〉设置,弹出一个对话框,选择标签–集成,如图WinrarSetting.png,逐项对Winrar设置。当拷贝到U盘而到新的机器上运行时,需要重复这些设置过程。
这一类软件的特点是安装程序的工作完全可以由软件自身来完成,从而完全抛开安装程序,或者说安装程序的工作也就是解压缩。类似的软件还有一些,最简单的测试办法就是看看Winrar能否直接打开压缩的安装程序。也可以采用方法2,过程基本上和方法1一样。
方法2就不具体说明了,仅仅指出有许多程序属于这个类别,如Myie2,GreenBrowser,qq,BPFTP Server,IDA_Pro_Standard_4.5.1.770,FinalData,EASYRECOVERY 6.03,腾逊公司的TM等等。
flashget是大家用得比较多的一个软件,可以多线程下载并且下载管理的功能也很方便,从天空软件站sky.com下载flashget1.60a国际版,运行一下,如图flashget_wise.PNG,然后取消安装。从图上可以看出flashget1.60a国际版是使用Wise制作的安装程序,从网上下载wungui程序,非常容易的把安装程序解压缩到一个目录中,如图flashget160a.PNG,观察Maindir目录,其中有两个DLL文件Jccatch.dll和fgiebar.dll,进一步察看这两个动态库文件的导出函数,可以知道这两个DLL文件都是自注册的COM组件,写一个批处理文件install.bat来注册这两个DLL:
REGSVR32 JCCATCH.DLL /s
REGSVR32 fgiebar.dll /s
经过测试,功能正常,并且可以从浏览器IE中用鼠标的右键菜单激活flashget,功能完全,下面考虑卸载过程。
运行Regedit.exe,发现flashget在注册表中的路径是[HKEY_CURRENT_USER\Software\JetCar\JetCar],写一个注册表文件unflashget.reg删除这个路径,如下:
REGEDIT4
; flashget
[-HKEY_CURRENT_USER\Software\JetCar\JetCar]
同时写一个批处理文件uninstall.bat来卸载这两个DLL文件并导入unflashget.reg:
Regedit unflashget.reg /s
REGSVR32 JCCATCH.DLL /s /U
REGSVR32 fgiebar.dll /s /U

随后就是删除一些我们用不到的文件,比如language目录的绝大多数欧洲的语言文件,这时候这个绿色版本就做好了。把制作好的绿色的flashget拷贝到U盘上,需要用的时候,直接执行里面的install.bat文件就可以了(注意,要在flashget的目录运行批处理文件),不需要任何文件拷贝。
我看到有人提到用优化大师提取falshget的注册表,然后直接导入注册表来制作绿色的flashget,这样做是不行的,从我前面的步骤来看,注册2个DLL文件必然在注册表中引入了绝对路径,那么如果直接提取注册表的话,就必须根据当前的路径来修改注册表中的路径,否则的话制作的绿色版的flashget只能在固定的目录运行。在制作flashget绿色版的时候,我同时使用了方法3和方法6,使用方法3的的就是避免安装程序对系统作的修改,这样可以直接在当前系统进行测试,而不需要到另外一个没有安装过flashget的系统测试。

Emeditor是方法1的一个反例。Emeditor可以从开发商主页http://www.emurasoft.com/下载,是一个简单好用的文本编辑器,支持多种配置,自定义颜色、字体、工具栏、快捷键设置,可以调整行距,避免中文排列过于紧密,具有选择文本列块的功能(按ALT 键拖动鼠标),并允许无限撤消、重做,总之功能多多,使用方便,是替代记事本的最佳编辑器。
下载emed404epx.exe后,发现用Winrar可以打开,解压后,运行Emeditor,发现丢失了预定义的多种文本格式的语法配置,看来这样做不行,只好采用方法5了。请随我一步步进行,步骤如下:
1 扫描系统,制订系统快照。这里我仅仅记录当前系统的注册表(因为我认为Emeditor不会向系统目录拷贝文件,如果判断错误,就会导致“绿化”失败),运行ART(Advanced Registery Tracer),扫描一遍注册表。如图emeditor_snap.PNG,不要关闭ART。
2 安装Emeditor。随便安装到哪里,反正一会就卸载。安装好后,如果需要的话,更改配置,或者配置新的文件类型,例如我就增加了NFO文件类型,设定和NFO文件相关联的字符集,这样可以用Emeditor直接察看NFO文件,不需要专门的察看工具了。
3 记录系统变化。再一次扫描系统,给系统作快照,从ART里面再一次扫描注册表,然后选择菜单命令Registry-〉compare here或者直接用键盘F10,比较结果如图emeditor_compare.png,点击图中那个save to redo file的按钮,存储为Emeditor.reg文件,关闭ART。
4 复制并卸载。复制安装好的Emeditor目录到其他路径,然后卸载Emeditor程序。
5 分析。打开刚刚导出的Emeditor.reg文件,这是一个巨大的reg文件,单单是REG文件就有1兆多,不过不用担心。阅读注册表后,删除和emeditor无关的注册表项后,如仅仅和资源管理器相关的注册表部分,发现剩下的注册表文件可以分成3个部分。一部分在位于注册表的这个路径[HKEY_LOCAL_MACHINE\SOFTWARE\EmSoft],里面大部分不涉及路径,只有一项记录了Emeditor的路径,就是”ModulePath”=”h:\\EmEditor4\\”;还有一大部分在注册表的这个路径下面[HKEY_CURRENT_USER\Software\EmSoft\EmEditor v3],里面有很多项都涉及了Emeditor的路径,如”Tmpl”=”h:\\EmEditor4\\template.xml”;还有就是和Emeditor和txt文件后缀向关联的注册表设置,把Emeditor设置为IE中缺省的源代码察看工具的注册表设置以及注册COM组件EMEDSHL.DLL的注册表部分(和InProcServer32相关的就是)。
6 “绿化”。
6.1 把位于注册表路径路径[HKEY_LOCAL_MACHINE\SOFTWARE\EmSoft]的内容存储到emeditor_HKLM.reg文件中,把位于注册表路径[HKEY_CURRENT_USER\Software\EmSoft\EmEditor v3]的内容存储到emeditor_HKCU.reg文件中,把剩下的内容首先除掉COM组件EMEDSHL.DLL的相关部分,然后存储到emeditor_assoc.reg文件中。
6.2 把emeditor_HKLM.reg文件和emeditor_HKCU.reg文件中涉及到路径的注册表内容抽取出来,存储到emeditorConf.reg文件。
6.3 把emeditor_assoc.reg文件和emeditorConf.reg文件用INF的语法转换为INF文件,或者用一个免费小工具reg2inf.exe自动转换,然后把转换得到的emeditor_assoc.inf文件和emeditorConf.inf文件中的路径h:\EmEditor4全部用%01%代替。下面是emeditorConf.inf文件的内容:
[Version]
Signature=”$CHICAGO$”
[DefaultInstall]
AddReg=EmeditorConf_AddReg
[EmeditorConf_AddReg]
hklm,”SOFTWARE\EmSoft\EmEditor v3\Common”,”ModulePath”,,”%01%\”
hkcu,”Software\EmSoft\EmEditor v3\Config\C++”,”Tmpl”,,”%01%\template.cpp”
hkcu,”Software\EmSoft\EmEditor v3\Config\CSS”,”Tmpl”,,”%01%\template.css”
hkcu,”Software\EmSoft\EmEditor v3\Config\HTML”,”Tmpl”,,”%01%\template.htm”
hkcu,”Software\EmSoft\EmEditor v3\Config\Java”,”Tmpl”,,”%01%\template.java”
hkcu,”Software\EmSoft\EmEditor v3\Config\JavaScript”,”Tmpl”,,”%01%\template.js”
hkcu,”Software\EmSoft\EmEditor v3\Config\JSP”,”Tmpl”,,”%01%\template.jsp”
hkcu,”Software\EmSoft\EmEditor v3\Config\Perl”,”Tmpl”,,”%01%\template.pl”
hkcu,”Software\EmSoft\EmEditor v3\Config\PHP”,”Tmpl”,,”%01%\template.php”
hkcu,”Software\EmSoft\EmEditor v3\Config\Python”,”Tmpl”,,”%01%\template.py”
hkcu,”Software\EmSoft\EmEditor v3\Config\Ruby”,”Tmpl”,,”%01%\template.rb”
hkcu,”Software\EmSoft\EmEditor v3\Config\TeX”,”Tmpl”,,”%01%\template.tex”
hkcu,”Software\EmSoft\EmEditor v3\Config\VBScript”,”Tmpl”,,”%01%\template.vbs”
hkcu,”Software\EmSoft\EmEditor v3\Config\VBScript for EmEditor”,”Tmpl”,,”%01%\template.vbee”
hkcu,”Software\EmSoft\EmEditor v3\Config\Windows Script”,”Tmpl”,,”%01%\template.wsf”
hkcu,”Software\EmSoft\EmEditor v3\Config\XML”,”Tmpl”,,”%01%\template.xml”

6.4 写一个批处理文件install.bat,内容如下:
regedit emeditor_HKLM.reg
regedit emeditor_HKCU.reg
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 .\emeditorConf.inf
regsvr32 EMEDSHL.DLL
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 .\emeditor_assoc.inf
6.5 把install.bat,emeditorConf.inf,emeditor_assoc.inf,emeditor_HKLM.reg,emeditor_HKCU.reg5个文件存储到Emeditor的目录,删除其余的注册表文件。
6.6 根据安装步骤和install.bat,写出相应的卸载的批处理文件,这个比较简单。
经过测试后,Emeditor工作正常,也可以注释掉install.bat的最后2行语句,这样Emeditor就不会和系统关联,上面的步骤是在windows 2000上的,对于win9x也同样,而且win9x下面的emeditor的配置文件和windows 2000的一样,仅仅是程序的版本不同。
把制作好的绿色的emeditor拷贝到U盘上,需要用的时候,直接执行里面的install.bat文件就可以了(注意,要在Emeditor的目录运行批处理文件),不需要任何文件拷贝。这个例子演示如何自动绿色安装,如何解决路径问题,如果你用几十个类似的绿色软件,但是需要手工修改路径的话,是很难记住那些路径需要修改的,当然你如果可以写出自动替换路径的脚本也是可以的。我说u盘就是为了强调 路径可以变化,如果大家所使用的机器的所有分区排列都是一样的话,都是把软件存储到c:的话,是可以直接备份注册表的,否则需要手工修改路径,修改一个容易,多了就麻烦了。

从以上的事例中,可以看出,方法2和方法1基本一样,只不过方法1我们使用WinRar解压缩,而方法2我们使用安装程序解压缩。方法6可以说是方法5的简化版本,方法3和方法4也可以辅助方法5,也有一些需要联合应用这些方法,有时候难以判断到底使用了那个方法,方法是死的,需要灵活运用,有些时候需要不断试验。
我简单说几个软件“绿化”时候使用的方法,某些软件可能有多种“绿化”方法,然而最后的结果基本一样:

使用方法1就不提了,只要没有专门的安装程序,直接以zip形式发布的,都使用方法1。
CuteFTP,Flashfxp,qq,foobar ,winamp2.8,acrobat,FinalData ,金山词霸 ,ZoomPlayer,WinISO ,IsoBuster,WinISO ,MIRC,WinCVS,Photoshop6 ,EASYRECOVERY 6.03,网易泡泡使用方法2。
VisualC++ 6, real player,realmedia的解码器包,大部分解码器如vp6,mpeg2,ac3 ,ogg ,divx ,xvid 使用方法5。
Netants ,flashget,OfflineExplorer acdsee,ultraedit ,IBM词典,theBat,网文快捕,和现在的CyberArticle,PartitionMagic7 使用方法6。
不适合“绿化”的有Directx9,Mediaplayer9,IE6,微软的补丁程序,Office2003,反病毒工具NAV,Java虚拟机,虚拟机VMware等等,其中有些是不知道如何“绿化”或者说比较困难,如Office 2003,我认为那种把Office安装到硬盘上,然后抽去注册表的变化的方法部叫做“绿化”,因为注册表文件中有大量的绝对路径存在,而且Offcie的组件之间有比较复杂的联系,所以难以“绿化”。有些是“绿化”没有意义,如IE6,微软的补丁程序,Directx9等等。

目前我使用的软件,绝大部分都“绿化”了,只有少数几个必须安装了,如MS Office,Visual Studio.net 2003等等。感觉非常方便,尤其是改变盘符的时候,非常简单,可以做到便携化。

分类: 程序 标签: 关注度: 1%

米国装逼指南(V2.51薄码流出版)

2010年7月11日 老友吧 2 条评论

本文不适合任何18岁以下及18岁以上的人士观看,本文的一切内容均属虚构,与任何现实中的个人及组织皆无关系。如有雷同,不一定是巧合。如您观看 本文后对作者的无知、偏狭、刻薄、信口雌黄或种族主义观点感到愤怒或不适,您有权用适当的语言在此处发表您的看法。适当的语言包括但不限于“傻 逼”,“2B”,“操行”,“闭嘴”等,但不包括“对不起,你是个好人”。谢谢。

在美国的七个月里,我了解到了关于这个国家的一些真相——

1. 普通美国人知道地球上有1/5的人口姓在名字前面吗?(补充一个背景知识,匈牙利人的姓也在名前)

不知道

2. 那如果我有一个比较复杂的中文名字,比如西门吹雪,他们念得出来嘛?

绝对念不出来,但他们能念出Sha Bi和Cao Ni Ma

3. 普通美国人知道伊拉克在哪里吗

确实不知道

4. 为什么华盛顿只被印在一刀的钞票上,格兰特却在50刀上

当现在版本的一刀纸币被设计出来的时候它是最常用的纸币

5. Beijing和Peking?

我曾听一个受过良好教育的美国人说这是两个地方

6. 他们会算35.3乘以3嘛?

起码商学院的教授是会的

7. 这里下电影会被抓吗?

那我都被枪毙五百回了

8. 有什么食物呢?

三明治、汉堡包、墨西哥肉卷。热狗其实不常见,因为可塑性差。

9. 都肥吗?

只有两种极端,特别健美的和一坨肉山

10. 会说外语吗?

和中国会跳芭蕾的人口比例大致相仿

11. 枪随便的买?

我们家就有两只,补充一点,子弹在沃尔玛就有卖的,一般在小五金部的旁边。

12. 很多美女吧?

13. 中国女生很受欢迎吗?

诚然

14. 听说穿衣服很土?

你能想象在中国一个60人的大学课堂里,20个人穿着同样款式的套头衫,上面印着“同济大学”,“上海交通大学”,“蓝翔技校”,“湖南”,“四川”,“山东健力宝”,“雪花啤酒”吗?

15. 素质高吗?

照样从机房拿纸

16. 美国人说什么语言

英语、黑人英语、印度英语和野鸡英语

17. 黑人为什么平均寿命低

晚上开车你真的看不到他们

18. 受过良好教育的日本人,英语也说得那么烂吗?

闭上眼你会觉得听到的是日语

19. 中国口音呢?

和其他国家的不同之处在于,我们的口音是以省为单位划分的。目前个人鉴定出来的有北京英语、四川英语、江西英语、上海英语、广东英语和福建英语。

20. 我总是记不住英语的月份

其实你说Two Twenty-Six他们一样也能明白

21. 你觉得你英语最大的提高是什么

我用了一个月的时间,在别人问我How are you的时候,终于能够本能的说出”Good”而不是”Fine”了。

22. 什么是Intuition?

任何你应该理解但是不能理解的知识

23. 一定要起一个英文名吗?

当你看见一个国际友人在名牌上印着“Toyotomi Hideyoshi”或者”Shanitta Shanaatavitiill” 的时候,你就知道这并非是必须的。

24. 中国人回国后最应注意什么

不要当人面骂人,别人是听得懂的

25. 有一个老师问,你们中国过感恩节吗?

我的回答是,我们没有火鸡这个物种

26. 怎么鉴定大陆人和ABC?

扇他一巴掌,说“操”或者“嗷”的是大陆人,说“Ouch”的是ABC

27. 我在网上看见了一篇帖子,叫做美国人发短信常用的缩写,我真的应该把他们都背下来吗?

你和一个在中国的美国人发短信会说“得,明儿见,有事短你,8”么?

28. 英语中插拉丁文是什么概念

就好比我问你“我的头像牛逼吗?”你不说“像”,而说“何其相似乃尔”。

29. 18岁就独立自主?

23家里蹲的大有人在

30. 你为什么这么无聊

我的书被印度大哥借走了,我现在没法写作业

31. 同学你好,我听说今年美国的就业形势十分的不景气,请问在留学期间我应当向什么方面努力呢?

如果你参加的是一年以上的项目,你可以努力当美国人的爸爸/妈妈,将来抱一堆美国孙子。如果你参加的是一年以下的短期交换项目,请在国内努力做人。

32. 如果我在留学期间去古巴旅游,回美国时会遇到困难吗?

会的,但你那时就不会想回美国了。

33. 美国大学生都抽大麻吗?

没抽过大麻的美国大学生就如同没吃过大红果的中国80后,一言以敝之,没有生活。

34. 美国人很喜欢滥交吗?

美国人很喜欢滥交,但不一定喜欢和你滥交。

35. 美国什么亚克西?

商店全年打折亚克西

36. 美国最流行的运动是什么?

棒球

37. 好看吗?

我宁可去看女子举重

38. 听说《孙子兵法》是西点军校的教材?

我问过一个美国退伍老兵,他确实知道《孙子兵法》这本书,但他同时表示作者是克劳塞维茨。

39. 美国人歧视中国人吗?

是的,所以请你一年四季都戴一顶毛线帽,他们就会认为你是韩国人。韩国人受美国动物保护法的保护。

40. 今天的最后一问-在美国生活最需要注意的是什么?

拉完屎把手纸冲掉,不要扔进垃圾桶里

41. 睡了美好的一觉,补充一些问题——美国各个州之间互相歧视吗?

前年奥运会期间俄罗斯入侵格鲁吉亚,美国网民纷纷表示对生活没有影响,并希望俄罗斯将核武器的破坏限制在佐治亚州境内。

42. 同学你好,我是一位准备赴美国攻读XX学位的中国留学生,鉴于美国目前的经济形势,现在在那边容易找到工作吗?

你猜。

43. 好找?

你再猜。

44. 我想去美国旅游,请问什么路线最经济实惠?

上海——关岛——上海

45. 刚才说到了美国各个州互相歧视的问题,现在能说一下各地的特产吗?

佛罗里达——短吻鳄,肯塔基州——肯塔基炸鸡,加州——Gay,波多黎各——波多,首尔——泡菜思密达

46. 我想体会最本土的美国文化,应当去哪里呢?

印第安保留地

47. 美国既然和沙特这个最大的阿拉伯国家有着坚固的同盟关系,为什么还要支持以色列?

当他们终于弄明白以色列人不是阿拉伯人的时候,一切已经太晚了。

48. 美国的电视连续剧好看吗?

说实话我不知道,因为电视上放的没有中文字幕

49. 美国本地人主要的娱乐方式是什么?

吃饭,淡B,边吃饭边淡B

50. 从你的语气里我觉得你似乎对在美国的生活并不十分的满意,那你干嘛上赶着跑到人美国去?

这样中国就少了一个傻逼

51. 美国人心中最伟大的本土作家是谁?

莎士比亚

经过一天与热心读者愉快的互动之后,作者意识到本文的内容可能过长。因此谨在文章的最后再次向您友情提示,如果看完本文后对文章的内容有任何不同意见,请参考本文顶端的声明及再次声明。

分类: 随笔 标签: 关注度: 1%