2009年6月7日星期日
2009年6月5日星期五
Entertainment Jokes
A lady walks into the drugstore and asks the pharmacist for some arsenic.
"Ma'am, what do you want with arsenic?" "To kill my husband."
"I can't sell you arsenic to kill a person!"
The lady lays down a photo of a man and a woman in a compromising position.
The man is her husband and the woman is the pharmacist's wife.
He takes the photo, and nods. "I didn't realize you had a prescription!"
"Ma'am, what do you want with arsenic?" "To kill my husband."
"I can't sell you arsenic to kill a person!"
The lady lays down a photo of a man and a woman in a compromising position.
The man is her husband and the woman is the pharmacist's wife.
He takes the photo, and nods. "I didn't realize you had a prescription!"
2009年5月27日星期三
Excel批量导入文件的宏代码
在网上找了半天,没有发觉现成的批量导入文件的宏代码。就自己写了一个,用的时候对应改两处文件夹的名称就行了。
Sub Macro1()
k=1
file=Dir("C:\zzm\measure\data22052009\7P230K*.*")
while file<> ""
Range ("A"&k).Select
With ActiveSheet.QueryTable.Add(Connection:=_
"TEXT;C:\zzm\measure\data22052009\"&file,Destination:=Range("A"&k))
.Name="U10AK"
.FieldNames=True
.RowNumbers=False
.FillAdjacentFormulas=False
.PreserveFormatting=True
.RefreshOnFileOpen=False
.RefreshStyle=xlInsertDeleteCells
.SavePasswor=False
.SaveData=True
.AdjustColumnWidth=True
.RefreshPeriod=0
.TextFilePromptOnRefresh=False
.TextFilePlatform=437
.TextFileStartRow=1
.TextFileParseType=xlDelimited
.TextFileTextQualifier=xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter=True
.TextFileTabDelimiter=True
.TextFileSemicolonDelimiter=False
.TextFileCommaDelimiter=False
.TextFileSpaceDelimiter=True
.TextFileColumnDataTypes=Array(1,1,1,1,1,1,1)
.TextFileTrailingMinusNumbers=True
.Refresh BackgroundQuery:=False
End With
' k=k+1
file=Dir()
Wend
End Sub
Sub Macro1()
k=1
file=Dir("C:\zzm\measure\data22052009\7P230K*.*")
while file<> ""
Range ("A"&k).Select
With ActiveSheet.QueryTable.Add(Connection:=_
"TEXT;C:\zzm\measure\data22052009\"&file,Destination:=Range("A"&k))
.Name="U10AK"
.FieldNames=True
.RowNumbers=False
.FillAdjacentFormulas=False
.PreserveFormatting=True
.RefreshOnFileOpen=False
.RefreshStyle=xlInsertDeleteCells
.SavePasswor=False
.SaveData=True
.AdjustColumnWidth=True
.RefreshPeriod=0
.TextFilePromptOnRefresh=False
.TextFilePlatform=437
.TextFileStartRow=1
.TextFileParseType=xlDelimited
.TextFileTextQualifier=xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter=True
.TextFileTabDelimiter=True
.TextFileSemicolonDelimiter=False
.TextFileCommaDelimiter=False
.TextFileSpaceDelimiter=True
.TextFileColumnDataTypes=Array(1,1,1,1,1,1,1)
.TextFileTrailingMinusNumbers=True
.Refresh BackgroundQuery:=False
End With
' k=k+1
file=Dir()
Wend
End Sub
2009年5月17日星期日
“长生不老”梦想成真? 台大学找到长寿基因
秦始皇追寻不到的长寿秘密,现代科学家找到了。台湾阳明大学生命科学系暨基因体科学研究所副教授蔡亭芬发现一个新颖基因,并命名为Cisd2,她发现Cisd2可以操控寿命长短,研究成果刊登在国际重要期刊《基因与发育》。
这个神奇的Cisd2基因落在第四号染色体上。蔡亭芬发现,当Cisd2缺失时,细胞里制造能量的车间粒腺体就会开端破损,使提供能量的小分子ATP供应不足,进而导致全身性的肌肉萎缩,神经退化,成为视茫茫、发苍苍、齿牙动摇的老人。
研究团队用老鼠做实验,把小黑鼠的Cisd2基因剔除后,小黑鼠不仅比同胎兄弟瘦小,且基因剔除的小黑鼠才10个月大时,头顶就开端出现白毛,不停颤抖,紧张时,会像老人般喘不过气,成为一只短命鼠。
当Cisd2缺乏时,小鼠显得老态龙钟;当Cisd2表现多时,小鼠不仅年轻且生龙活虎。蔡亭芬透露,研究团队正在研究如何活化Cisd2,抗氧化剂可能是长寿药!至于是哪种抗氧化剂,在实验退出之前,她不愿意再透露更多的信息,仅说“多吃蔬菜水果就没错”。
由于岛内没有长寿家族的研究,阳明研究团队将与盛行长寿研究的日本团队共同研究,由日本提供百岁人瑞的DNA检体,检验这些人瑞的Cisd2活跃程度,或能率先揭开人类长寿秘密。
这个神奇的Cisd2基因落在第四号染色体上。蔡亭芬发现,当Cisd2缺失时,细胞里制造能量的车间粒腺体就会开端破损,使提供能量的小分子ATP供应不足,进而导致全身性的肌肉萎缩,神经退化,成为视茫茫、发苍苍、齿牙动摇的老人。
研究团队用老鼠做实验,把小黑鼠的Cisd2基因剔除后,小黑鼠不仅比同胎兄弟瘦小,且基因剔除的小黑鼠才10个月大时,头顶就开端出现白毛,不停颤抖,紧张时,会像老人般喘不过气,成为一只短命鼠。
当Cisd2缺乏时,小鼠显得老态龙钟;当Cisd2表现多时,小鼠不仅年轻且生龙活虎。蔡亭芬透露,研究团队正在研究如何活化Cisd2,抗氧化剂可能是长寿药!至于是哪种抗氧化剂,在实验退出之前,她不愿意再透露更多的信息,仅说“多吃蔬菜水果就没错”。
由于岛内没有长寿家族的研究,阳明研究团队将与盛行长寿研究的日本团队共同研究,由日本提供百岁人瑞的DNA检体,检验这些人瑞的Cisd2活跃程度,或能率先揭开人类长寿秘密。
2009年5月16日星期六
解密宝典——十招教你学会软件破解(转载)
下面谈到了一些在学习解密过程中经常遇到的问题,本人根据自己的经验简单给大家谈一谈。这些问题对于初学者来说常常是很需要搞明白的,根据我自己的学习经历,如果你直接照着很多破解教程去学习的话,多半都会把自己搞得满头的雾水,因为有很多的概念要么自己不是很清楚,要么根本就不知道是怎么一回事,所以希望通过下面的讨论给大家一定的帮助:
1. 断点
所谓断点就是程序被中断的地方,这个词对于解密者来说是再熟悉不过了。那么什么又是中断呢?中断就是由于有特殊事件(中断事件)发生,计算机暂停当前的任务(即程序),转而去执行另外的任务(中断服务程序),然后再返回原先的任务继续执行。打个比方:你正在上班,突然有同学打电话告诉你他从外地坐火车过来,要你去火车站接他。然后你就向老板临时请假,赶往火车站去接同学,接着将他安顿好,随后你又返回公司继续上班,这就是一个中断过程。我们解密的过程就是等到程序去获取我们输入的注册码并准备和正确的注册码相比较的时候将它中断下来,然后我们通过分析程序,找到正确的注册码。所以我们需要为被解密的程序设置断点,在适当的时候切入程序内部,追踪到程序的注册码,从而达到crack的目的。
2. 领空
这是个非常重要的概念,但是也初学者是常常不明白的地方。我们在各种各样的破解文章里都能看到领空这个词,如果你搞不清楚到底程序的领空在哪里,那么你就不可能进入破解的大门。或许你也曾破解过某些软件,但那只是瞎猫碰到死老鼠而已(以前我就是这样的 ^_^,现在说起来都不好意思喔!)。所谓程序的领空,说白了就是程序自己的地方,也就是我们要破解的程序自己程序码所处的位置。也许你马上会问:我是在程序运行的时候设置的断点,为什么中断后不是在程序自己的空间呢?因为每个程序的编写都没有固定的模式,所以我们要在想要切入程序的时候中断程序,就必须不依赖具体的程序设置断点,也就是我们设置的断点应该是每个程序都会用到的东西。在DOS时代,基本上所有的程序都是工作在中断程序之上的,即几乎所有的 DOS程序都会去调用各种中断来完成任务。
但是到了WINDOWS时代,程序没有权力直接调用中断,WINDOWS系统提供了一个系统功能调用平台(API),就向DOS程序以中断程序为基础一样,WINDOWS程序以API为基础来实现和系统打交道,从而各种功能,所以WINDWOS下的软件破解其断点设置是以API函数为基础的,即当程序调用某个API函数时中断其正常运行,然后进行解密。例如在SOFTICE中设置下面的断点:bpx GetDlgItemText(获取对话框文本),当我们要破解的程序要读取输入的数据而调用GetDlgItemText时,立即被SOFTICE拦截到,从而被破解的程序停留在GetDlgItemText的程序区,而GetDlgItemText是处于WINDWOS自己管理的系统区域,如果我们擅自改掉这部分的程序代码,那就大祸临头了^_^!所以我们要从系统区域返回到被破解程序自己的地方(即程序的领空),才能对程序进行破解,至于怎样看程序的领空请看前面的SOFTICE图解。试想一下:对于每个程序都会调用的程序段,我们可能从那里找到什么有用的东西吗?(怎么样去加密是程序自己决定的,而不是调用系统功能实现的!)
3. API
即Application Programming Interface的简写,中文叫应用程序编程接口,是一个系统定义函数的大集合,它提供了访问操作系统特征的方法。 API包含了几百个应用程序调用的函数,这些函数执行所有必须的与操作系统相关的操作,如内存分配、向屏幕输出和创建窗口等,用户的程序通过调用API接口同WINDOWS打交道,无论什么样的应用程序,其底层最终都是通过调用各种API函数来实现各种功能的。通常API有两中基本形式:Win16和 Win32。 Win16是原来的、API的16位版本,用于Windows 3.1;Win32是现在的、API的32位版本,用于Windows 95/98/NT/ME/2000。Win32包括了Win16,是Win16的超集,大多数函数的名字、用法都是相同的。
16位的API函数和32位的API函数的区别在于最后的一个字母,例如我们设置这样的断点:bpx GetDlgItemText、bpx GetDlgItemTextA和bpx GetDlgItemTextW,其中 GetDlgItemText是16位API函数,GetDlgItemTextA和GetDlgItemTextW是32位API函数,而 GetDlgItemTextA表示函数使用单字节,GetDlgItemTextW表示函数使用双字节。现在我们破解中常用到的是Win32单字节 API函数,就是和GetDlgItemTextA类似的函数,其它的两种(Win16 API和Win32双字节API函数)则比较少见。 Win32 API函数包含在动态链接库(Dynamic Link Libraries,简称DLLs)中,即包含在kernel32.dll、user32.dll、gdi32.dll和comctl32.dll中,这就是为什么我们要在softice中用exp=C:\windows\system\kernel32.dll等命令行将这些动态链接库导入 softice中的原因。因为不这样做的话,我们就无法拦截到系统Win32 API函数调用了。
4. 关于程序中注册码的存在方式
破解过程中我们都会去找程序中将输入的注册码和正确的注册码相比较的地方,然后通过对程序的跟踪、分析找到正确的注册码。但是正确的注册码通常在程序中以两种形态存在:显式的和隐式的,对于显式存在的注册码,我们可以直接在程序所处的内存中看到它,例如你可以直接在SOFTICE的数据窗口中看到类似"297500523"这样存在的注册码(这里是随意写的),对于注册码显式存在的软件破解起来比较容易;但是有些软件的程序中并不会直接将我们输入的注册码和正确的注册码进行比较,比如有可能将注册码换算成整数、或是将注册码拆开,然后将每一位注册码分开在不同的地方逐一进行比较,或者是将我们输入的注册码进行某种变换,再用某个特殊的程序进行验证等等。
总之,应用程序会采取各种不同的复杂运算方式来回避直接的注册码比较,对于这类程序,我们通常要下功夫去仔细跟踪、分析每个程序功能,找到加密算法,然后才能破解它,当然这需要一定的8086汇编编程功底和很大的耐心与精力
5. 关于软件的破解方式
本人将破解方式分为两大类,即完全破解和暴力破解。所谓完全破解主要是针对那些需要输入注册码或密码等软件来说的,如果我们能通过对程序的跟踪找到正确的注册码,通过软件本身的注册功能正常注册了软件,这样的破解称之为完全破解;但如果有些软件本身没有提供注册功能,只是提供试用(DEMO),或是注册不能通过软件本身进行(例如需要获取另外一个专用的注册程序,通过INTERNET的注册等等),或者是软件本身的加密技术比较复杂,软件破解者的能力、精力、时间有限,不能直接得到正确的注册码,此时我们需要去修改软件本身的程序码.
6. 关于破解教程中程序代码地址问题
破解教程中都会放上一部分程序代码以帮助讲解程序的分析方法,例如下面的一段程序代码:
......
0167:00408033 PUSH 00
0167:00408035 PUSH EBX
0167:00408036 CALL [USER32!EndDialog]
0167:0040803C JMP 0040812C
......
在这里程序中的代码地址如0167:00408033,其代码段的值(即0167)有可能根据不同的电脑会有区别,不一定一模一样,但偏移值应该是固定的(即00408033不变),所以如果看到破解文章里的程序代码的地址值和自己的电脑里不一样,不要以为搞错地方了,只要你的程序代码正确就不会有问题。
7. 关于如何设置断点的问题
正确恰当的设置好断点对于快速有效的解密非常重要,好的断点设置可以使我们迅速找到关键的程序段,而不恰当的断点则会对解密造成不必要的精力消耗,甚至根本就不能拦截到程序的运行。
但是具体什么时候用什么断点比较合适很难说,这需要自己用经验去累积,总的说来bpx hmemcpy这个万能断点对大多数注册码方式的软件都有用,初学者不妨多试试这个断点(通常我也是用这个断点设置,懒嘛^_^,哈哈。。。)。
对于那些需要暴力破解的非注册码方式的软件,通常我们应该拦截对话框(如bpx DialogBox)和消息框(如bpx MessageBox(A))等。不论对于哪一类软件,当我们设置的断点均没有效果时,可是试一下bpx lockmytask,这个断点的作用是拦截任何一个按键的动作,具体常用的一些断点设置请参考"破解常用断点设置"一文。
另外,在注册码的破解中通常需要输入用户名和注册码,一般说来用户名和密码都可以随意输入,但是根据我自己的经验,很多软件对于注册码都会逐位的进行处理,假如输入"78787878"这串数字,那么在跟踪程序的时候我们就无法知道我们当时所看到的"78"倒底是哪一个"78",所以我比较喜欢用"12345678"这样的注册码输入方式,这样的话就就能知道程序是在对注册码的哪一位进行运算,同样的对于那些需要输入较长序列号的软件,输入类似"12345-67890-ABCDEF"这样的序列号较好。
不过有一点大家需要特别的注意:上面讲的注册码输入方式"12345678"是针对拦截WIN32 API函数来说的,假如有些时候直接拦截WIN32 API函数难以找到程序的突破口,而要借助于"S"指令在内存中寻找我们输入的用户名或注册码时,就最好不要采用"12345678"作为注册码,因为内存中很可能有许多的"12345678"字符串,这样我们没有办法知道倒底我们要破解的程序使用的是哪一个"12345678",所以我们应该选择一个不易和内存数据相同的注册码,比如:74747474(本人喜欢用,意思嘛:去死去死。。。哈哈哈^_^),对应的搜索指令为: S 30:0 L FFFFFFFF '74747474' 。当然,以上只是我个人的习惯而已,具体用什么样的输入形式可以根据本人的爱好、习惯来定,不必拘泥于某一固定的模式
8. 关于如何跟踪程序的问题
初学者在开始学习解密的时候往往不知道怎么样去跟踪程序,怎么样找到注册码比较的地方,当面对长长的一堆程序代码时显得不知所措。通常软件的程序内部都会利用一个子程序(即 CALL ********)去验证我们输入的注册码正确与否,对于注册码显式存在的程序,一般都会将所输入的注册码和正确的注册码放进寄存器,然后调用验证子程序进行判断,将结果返回,应用程序根据子程序返回的结果决定是否注册成功,这样的程序经常具有如下的形式:
****:******** MOV EAX,[********] (或 PUSH EAX等形式)
****:******** MOV EDX,[********] (或 PUSH EDX等形式)
****:******** CALL ********
****:******** TEST EAX,EAX (或 TEST AL,AL,或是没有这一句等形式)
****:******** JNZ ******** (或 JZ ********等形式)
其中EAX和EDX指向的内存区域就是我们输入的注册码和正确的注册码,这里的寄存器EAX和 EDX是随意写的,也可以是ECX,EBX,EDI,ESI等等。对于注册码隐式存在的程序,虽然不能直接看到正确的注册码,但是通常也是先将所输入的注册码地址放进某个寄存器,然后调用子程序去验证,破解时就需要进入子程序去分析注册算法。总之,看到子程序(call ********)后面跟着跳转指令(JNZ ********或JZ ********)的地方我们就应该提高警惕,多用 D EAX(或EBX、ECX、EDX、EDI、ESI...等)去看看寄存器指向的内存区域藏着什么东西。
有一点大家要提醒大家:看见程序中使用下面这个函数是要注意,即GetDlgItenInt,这个 API函数的作用是将输入的文本转化为整数,所以这类程序中是不会有显示存在的注册码的,因为注册码被转换为整数了,程序通常会用CMP ECX,EDX 这种类型的指令去验证注册码的正确性,这里ECX和EDX中存的就是所输入注册码和正确注册码的整数形式,此时可以用 ? edx 和 ? ecx 看到其十进制形式,即我们输入的形式。
9. 关于软件的反安装问题
经常我们使用某些软件时都会遇到一个问题,就是共享软件过期之后即使删掉原程序重新安装,程序依然不能用,还是一样提醒你试用期已过请注册;或者是你已经破解了某个软件,但是还想继续研究它,但是因为软件已经注册好,没有了注册选项,这时你即使彻底删掉程序再重新安装软件,结果程序运行后还是注册过的。
遇到这样的情况,其实原因很简单,因为程序将注册或过期信息存在了系统注册表里,所以简单的重新安装软件是无济于事的。解决的办法就是自己删掉注册表中有关的信息,但是因为注册表是WINDOWS系统工作的基础,如果不小心就很可能会损坏它而引起系统异常,所以如果你对注册表不是很熟的话,应该在修改之前备份一下注册表。
不论是修改还是备份注册表都可以使用WINDOWS下的注册表管理工具"REGEDIT"来进行,一种办法是在"开始->运行"下输入"regedit"启动它,也可以直接点击"C:\WINDOWS\regedit.exe"来运行。大部分的应用软件都会将自己的信息存在如下的路径中:HKEY_LOCAL_MACHINE\Software、HKEY_LOCAL_MACHINE \Software\Microsoft、HKEY_CURRENT_USER\Software、HKEY_CURRENT_USER \Software\Microsoft 或 HKEY_USERS\.DEFAULT\Software下,具体是哪个地方依据不同的程序而有所不同,只要按上面的顺序肯定能找到有关应用程序的键,然后将和用户名及注册码有关的键值删掉就搞定了。
10. 关于破解练习的问题
学习破解需要大量的练习,对于破解目标的选择,初学者不宜以大型的、著名的软件为目标,因为这些软件通常加密较为复杂,破解不易,应该选择一些比较不出名的、小型的和早些时候的共享软件来练习,因为加密相对简单的软件有利于初学者快速掌握破解思想和技能。至于习题的来源则很广泛,可以从网上下载。
1. 断点
所谓断点就是程序被中断的地方,这个词对于解密者来说是再熟悉不过了。那么什么又是中断呢?中断就是由于有特殊事件(中断事件)发生,计算机暂停当前的任务(即程序),转而去执行另外的任务(中断服务程序),然后再返回原先的任务继续执行。打个比方:你正在上班,突然有同学打电话告诉你他从外地坐火车过来,要你去火车站接他。然后你就向老板临时请假,赶往火车站去接同学,接着将他安顿好,随后你又返回公司继续上班,这就是一个中断过程。我们解密的过程就是等到程序去获取我们输入的注册码并准备和正确的注册码相比较的时候将它中断下来,然后我们通过分析程序,找到正确的注册码。所以我们需要为被解密的程序设置断点,在适当的时候切入程序内部,追踪到程序的注册码,从而达到crack的目的。
2. 领空
这是个非常重要的概念,但是也初学者是常常不明白的地方。我们在各种各样的破解文章里都能看到领空这个词,如果你搞不清楚到底程序的领空在哪里,那么你就不可能进入破解的大门。或许你也曾破解过某些软件,但那只是瞎猫碰到死老鼠而已(以前我就是这样的 ^_^,现在说起来都不好意思喔!)。所谓程序的领空,说白了就是程序自己的地方,也就是我们要破解的程序自己程序码所处的位置。也许你马上会问:我是在程序运行的时候设置的断点,为什么中断后不是在程序自己的空间呢?因为每个程序的编写都没有固定的模式,所以我们要在想要切入程序的时候中断程序,就必须不依赖具体的程序设置断点,也就是我们设置的断点应该是每个程序都会用到的东西。在DOS时代,基本上所有的程序都是工作在中断程序之上的,即几乎所有的 DOS程序都会去调用各种中断来完成任务。
但是到了WINDOWS时代,程序没有权力直接调用中断,WINDOWS系统提供了一个系统功能调用平台(API),就向DOS程序以中断程序为基础一样,WINDOWS程序以API为基础来实现和系统打交道,从而各种功能,所以WINDWOS下的软件破解其断点设置是以API函数为基础的,即当程序调用某个API函数时中断其正常运行,然后进行解密。例如在SOFTICE中设置下面的断点:bpx GetDlgItemText(获取对话框文本),当我们要破解的程序要读取输入的数据而调用GetDlgItemText时,立即被SOFTICE拦截到,从而被破解的程序停留在GetDlgItemText的程序区,而GetDlgItemText是处于WINDWOS自己管理的系统区域,如果我们擅自改掉这部分的程序代码,那就大祸临头了^_^!所以我们要从系统区域返回到被破解程序自己的地方(即程序的领空),才能对程序进行破解,至于怎样看程序的领空请看前面的SOFTICE图解。试想一下:对于每个程序都会调用的程序段,我们可能从那里找到什么有用的东西吗?(怎么样去加密是程序自己决定的,而不是调用系统功能实现的!)
3. API
即Application Programming Interface的简写,中文叫应用程序编程接口,是一个系统定义函数的大集合,它提供了访问操作系统特征的方法。 API包含了几百个应用程序调用的函数,这些函数执行所有必须的与操作系统相关的操作,如内存分配、向屏幕输出和创建窗口等,用户的程序通过调用API接口同WINDOWS打交道,无论什么样的应用程序,其底层最终都是通过调用各种API函数来实现各种功能的。通常API有两中基本形式:Win16和 Win32。 Win16是原来的、API的16位版本,用于Windows 3.1;Win32是现在的、API的32位版本,用于Windows 95/98/NT/ME/2000。Win32包括了Win16,是Win16的超集,大多数函数的名字、用法都是相同的。
16位的API函数和32位的API函数的区别在于最后的一个字母,例如我们设置这样的断点:bpx GetDlgItemText、bpx GetDlgItemTextA和bpx GetDlgItemTextW,其中 GetDlgItemText是16位API函数,GetDlgItemTextA和GetDlgItemTextW是32位API函数,而 GetDlgItemTextA表示函数使用单字节,GetDlgItemTextW表示函数使用双字节。现在我们破解中常用到的是Win32单字节 API函数,就是和GetDlgItemTextA类似的函数,其它的两种(Win16 API和Win32双字节API函数)则比较少见。 Win32 API函数包含在动态链接库(Dynamic Link Libraries,简称DLLs)中,即包含在kernel32.dll、user32.dll、gdi32.dll和comctl32.dll中,这就是为什么我们要在softice中用exp=C:\windows\system\kernel32.dll等命令行将这些动态链接库导入 softice中的原因。因为不这样做的话,我们就无法拦截到系统Win32 API函数调用了。
4. 关于程序中注册码的存在方式
破解过程中我们都会去找程序中将输入的注册码和正确的注册码相比较的地方,然后通过对程序的跟踪、分析找到正确的注册码。但是正确的注册码通常在程序中以两种形态存在:显式的和隐式的,对于显式存在的注册码,我们可以直接在程序所处的内存中看到它,例如你可以直接在SOFTICE的数据窗口中看到类似"297500523"这样存在的注册码(这里是随意写的),对于注册码显式存在的软件破解起来比较容易;但是有些软件的程序中并不会直接将我们输入的注册码和正确的注册码进行比较,比如有可能将注册码换算成整数、或是将注册码拆开,然后将每一位注册码分开在不同的地方逐一进行比较,或者是将我们输入的注册码进行某种变换,再用某个特殊的程序进行验证等等。
总之,应用程序会采取各种不同的复杂运算方式来回避直接的注册码比较,对于这类程序,我们通常要下功夫去仔细跟踪、分析每个程序功能,找到加密算法,然后才能破解它,当然这需要一定的8086汇编编程功底和很大的耐心与精力
5. 关于软件的破解方式
本人将破解方式分为两大类,即完全破解和暴力破解。所谓完全破解主要是针对那些需要输入注册码或密码等软件来说的,如果我们能通过对程序的跟踪找到正确的注册码,通过软件本身的注册功能正常注册了软件,这样的破解称之为完全破解;但如果有些软件本身没有提供注册功能,只是提供试用(DEMO),或是注册不能通过软件本身进行(例如需要获取另外一个专用的注册程序,通过INTERNET的注册等等),或者是软件本身的加密技术比较复杂,软件破解者的能力、精力、时间有限,不能直接得到正确的注册码,此时我们需要去修改软件本身的程序码.
6. 关于破解教程中程序代码地址问题
破解教程中都会放上一部分程序代码以帮助讲解程序的分析方法,例如下面的一段程序代码:
......
0167:00408033 PUSH 00
0167:00408035 PUSH EBX
0167:00408036 CALL [USER32!EndDialog]
0167:0040803C JMP 0040812C
......
在这里程序中的代码地址如0167:00408033,其代码段的值(即0167)有可能根据不同的电脑会有区别,不一定一模一样,但偏移值应该是固定的(即00408033不变),所以如果看到破解文章里的程序代码的地址值和自己的电脑里不一样,不要以为搞错地方了,只要你的程序代码正确就不会有问题。
7. 关于如何设置断点的问题
正确恰当的设置好断点对于快速有效的解密非常重要,好的断点设置可以使我们迅速找到关键的程序段,而不恰当的断点则会对解密造成不必要的精力消耗,甚至根本就不能拦截到程序的运行。
但是具体什么时候用什么断点比较合适很难说,这需要自己用经验去累积,总的说来bpx hmemcpy这个万能断点对大多数注册码方式的软件都有用,初学者不妨多试试这个断点(通常我也是用这个断点设置,懒嘛^_^,哈哈。。。)。
对于那些需要暴力破解的非注册码方式的软件,通常我们应该拦截对话框(如bpx DialogBox)和消息框(如bpx MessageBox(A))等。不论对于哪一类软件,当我们设置的断点均没有效果时,可是试一下bpx lockmytask,这个断点的作用是拦截任何一个按键的动作,具体常用的一些断点设置请参考"破解常用断点设置"一文。
另外,在注册码的破解中通常需要输入用户名和注册码,一般说来用户名和密码都可以随意输入,但是根据我自己的经验,很多软件对于注册码都会逐位的进行处理,假如输入"78787878"这串数字,那么在跟踪程序的时候我们就无法知道我们当时所看到的"78"倒底是哪一个"78",所以我比较喜欢用"12345678"这样的注册码输入方式,这样的话就就能知道程序是在对注册码的哪一位进行运算,同样的对于那些需要输入较长序列号的软件,输入类似"12345-67890-ABCDEF"这样的序列号较好。
不过有一点大家需要特别的注意:上面讲的注册码输入方式"12345678"是针对拦截WIN32 API函数来说的,假如有些时候直接拦截WIN32 API函数难以找到程序的突破口,而要借助于"S"指令在内存中寻找我们输入的用户名或注册码时,就最好不要采用"12345678"作为注册码,因为内存中很可能有许多的"12345678"字符串,这样我们没有办法知道倒底我们要破解的程序使用的是哪一个"12345678",所以我们应该选择一个不易和内存数据相同的注册码,比如:74747474(本人喜欢用,意思嘛:去死去死。。。哈哈哈^_^),对应的搜索指令为: S 30:0 L FFFFFFFF '74747474' 。当然,以上只是我个人的习惯而已,具体用什么样的输入形式可以根据本人的爱好、习惯来定,不必拘泥于某一固定的模式
8. 关于如何跟踪程序的问题
初学者在开始学习解密的时候往往不知道怎么样去跟踪程序,怎么样找到注册码比较的地方,当面对长长的一堆程序代码时显得不知所措。通常软件的程序内部都会利用一个子程序(即 CALL ********)去验证我们输入的注册码正确与否,对于注册码显式存在的程序,一般都会将所输入的注册码和正确的注册码放进寄存器,然后调用验证子程序进行判断,将结果返回,应用程序根据子程序返回的结果决定是否注册成功,这样的程序经常具有如下的形式:
****:******** MOV EAX,[********] (或 PUSH EAX等形式)
****:******** MOV EDX,[********] (或 PUSH EDX等形式)
****:******** CALL ********
****:******** TEST EAX,EAX (或 TEST AL,AL,或是没有这一句等形式)
****:******** JNZ ******** (或 JZ ********等形式)
其中EAX和EDX指向的内存区域就是我们输入的注册码和正确的注册码,这里的寄存器EAX和 EDX是随意写的,也可以是ECX,EBX,EDI,ESI等等。对于注册码隐式存在的程序,虽然不能直接看到正确的注册码,但是通常也是先将所输入的注册码地址放进某个寄存器,然后调用子程序去验证,破解时就需要进入子程序去分析注册算法。总之,看到子程序(call ********)后面跟着跳转指令(JNZ ********或JZ ********)的地方我们就应该提高警惕,多用 D EAX(或EBX、ECX、EDX、EDI、ESI...等)去看看寄存器指向的内存区域藏着什么东西。
有一点大家要提醒大家:看见程序中使用下面这个函数是要注意,即GetDlgItenInt,这个 API函数的作用是将输入的文本转化为整数,所以这类程序中是不会有显示存在的注册码的,因为注册码被转换为整数了,程序通常会用CMP ECX,EDX 这种类型的指令去验证注册码的正确性,这里ECX和EDX中存的就是所输入注册码和正确注册码的整数形式,此时可以用 ? edx 和 ? ecx 看到其十进制形式,即我们输入的形式。
9. 关于软件的反安装问题
经常我们使用某些软件时都会遇到一个问题,就是共享软件过期之后即使删掉原程序重新安装,程序依然不能用,还是一样提醒你试用期已过请注册;或者是你已经破解了某个软件,但是还想继续研究它,但是因为软件已经注册好,没有了注册选项,这时你即使彻底删掉程序再重新安装软件,结果程序运行后还是注册过的。
遇到这样的情况,其实原因很简单,因为程序将注册或过期信息存在了系统注册表里,所以简单的重新安装软件是无济于事的。解决的办法就是自己删掉注册表中有关的信息,但是因为注册表是WINDOWS系统工作的基础,如果不小心就很可能会损坏它而引起系统异常,所以如果你对注册表不是很熟的话,应该在修改之前备份一下注册表。
不论是修改还是备份注册表都可以使用WINDOWS下的注册表管理工具"REGEDIT"来进行,一种办法是在"开始->运行"下输入"regedit"启动它,也可以直接点击"C:\WINDOWS\regedit.exe"来运行。大部分的应用软件都会将自己的信息存在如下的路径中:HKEY_LOCAL_MACHINE\Software、HKEY_LOCAL_MACHINE \Software\Microsoft、HKEY_CURRENT_USER\Software、HKEY_CURRENT_USER \Software\Microsoft 或 HKEY_USERS\.DEFAULT\Software下,具体是哪个地方依据不同的程序而有所不同,只要按上面的顺序肯定能找到有关应用程序的键,然后将和用户名及注册码有关的键值删掉就搞定了。
10. 关于破解练习的问题
学习破解需要大量的练习,对于破解目标的选择,初学者不宜以大型的、著名的软件为目标,因为这些软件通常加密较为复杂,破解不易,应该选择一些比较不出名的、小型的和早些时候的共享软件来练习,因为加密相对简单的软件有利于初学者快速掌握破解思想和技能。至于习题的来源则很广泛,可以从网上下载。
ping域名显示 Ping request could not find host 但是nslookup能正常解析(转载)
今天公司一台windows xp系统的机器出现这样的问题:
ping www.g.cn
Ping request could not find host www.g.cn. Please check the name and try again.
IE也无法打开网页,但是nslookup
Default Server: a.center-dns.jsinfo.net
Address: 218.2.135.1
> set type=a
> g.cn
Server: a.center-dns.jsinfo.net
Address: 218.2.135.1
Non-authoritative answer:
Name: g.cn
Addresses: 203.208.33.101, 203.208.33.100
却是正常的。
直接输入203.208.33.101可以打开网页。
ping网关正常,ping dns正常,内网网站可以正常访问。在host文件里加入ip 域名对应关系,可以正常访问。怀疑是tcp/ip协议或lsp问题。重装协议,修复lsp,socket仍然无效,在网络上找到一篇文章说是DNS补丁KB951748会导致这种问题。于是卸载KB951748重起机器,系统正常。
ping www.g.cn
Ping request could not find host www.g.cn. Please check the name and try again.
IE也无法打开网页,但是nslookup
Default Server: a.center-dns.jsinfo.net
Address: 218.2.135.1
> set type=a
> g.cn
Server: a.center-dns.jsinfo.net
Address: 218.2.135.1
Non-authoritative answer:
Name: g.cn
Addresses: 203.208.33.101, 203.208.33.100
却是正常的。
直接输入203.208.33.101可以打开网页。
ping网关正常,ping dns正常,内网网站可以正常访问。在host文件里加入ip 域名对应关系,可以正常访问。怀疑是tcp/ip协议或lsp问题。重装协议,修复lsp,socket仍然无效,在网络上找到一篇文章说是DNS补丁KB951748会导致这种问题。于是卸载KB951748重起机器,系统正常。
2009年5月11日星期一
我的师兄黄骁虎
朋友当中印象深刻的往往是玩伴,想起那些玩伴,就会想起很多一块玩耍的美好岁月。想起黄骁虎,就想起和他在一起时玩的许多出色电脑游戏,如元朝秘史(成吉思汗)、Dioblo、大富翁和command and conquer等。
黄骁虎实在是一个电脑天才,破解游戏轻而易举,算得上是中国破解游戏的元老级人物了。自己在读研究生时就开了好几个公司,当我每月拿几百块钱奖学金时,他已能买得起1000多元的衣服了。在复旦大学硕士毕业后,他留校任教,跟我一块师从阮刚教授。我还有幸去参加了他的婚礼。后来他去IBM工作,逐渐淡出了复旦校园,慢慢的我博士毕业后离开上海,从此杳无音信。希望以后通过网络能够再联系上他。
黄骁虎实在是一个电脑天才,破解游戏轻而易举,算得上是中国破解游戏的元老级人物了。自己在读研究生时就开了好几个公司,当我每月拿几百块钱奖学金时,他已能买得起1000多元的衣服了。在复旦大学硕士毕业后,他留校任教,跟我一块师从阮刚教授。我还有幸去参加了他的婚礼。后来他去IBM工作,逐渐淡出了复旦校园,慢慢的我博士毕业后离开上海,从此杳无音信。希望以后通过网络能够再联系上他。
2009年4月23日星期四
Excel技巧大汇总
1、快速删除单元格/行/列
删除单元格/行/列:选中单元格,ctrl+“-”(减号)
插入单元格/行/列:选中单元格,ctrl+shift+“+”(加号)
2、通过一次按间创建一个excel图表
A、选择要绘制的数据
B、按F11(或ALT+F1)
C、选定整个表,点右键-位置-“作为其中的对象插入sheet”
3、实现平方、立方上标:
选定单元格:
平方:ALT+178 立方:ALT+179
4、在excel编辑页面状态下,按着ctrl并滑动鼠标中轮,可快速改变表格的行高度。
5、用CTRL+TAB键可以快速地在几个打开的工作簿之间切换
6、SHIFT+F2,在选中单元格插入批注
7、F8键 选一单元格>>F8键定位>>再选其它单元格>>名称方块>>定义Range名称
8、用OFFICE XP的,在EXCEL的表标签"sheet 1"等上点右键,可以选择标签颜色,以便快速区分。
9、当EXCLE工作表有不止一个SHEET需打印,可按住CTRL+需打印的SHEET?,被选中的SHEET会闪亮,按打印即可打印所需的SHEET,而不需到每个SHEET按打印键。
10、如果在sheet1中制作了一个表头,在sheet2中也想用的话。先选中表头选复制,然后在sheet2中选粘贴,然后选择“保留原列宽”,就可以了。
11、ALT+;选定可见单元格
12、Ctrl+9 隐藏行;Ctrl+0 隐藏列;shift+ctrl+9或0取消隐藏
13、输入自动求和公式时,不用鼠标点按工具栏上的按钮,只需按“Alt+=”即可
14、按住ctr+end去到本工作表的最尾端
15、将单元格复制成图片:1 选择区域 2 按住SHIFT不放,点击编辑/复制图片3 按自己的要求在弹出的对话框里选择4 确定 ;粘贴图片:按住SHIFT不放,点击编辑/粘贴图片
16、在一行中填写数据时,经常要快速移动光标到行首或行尾,可以用HOME、CTRL+->
17、选中需要复制和下面需要粘贴的多个单元格,按下Ctrl+D组合键,就可以将需要复制的内容粘贴到下面多个单元格中
18、按Ctrl +上下左右箭头可快速移动到数据清单的顶端、底部、最左边及最右边。按Ctrl + Shift + 上下左右箭头可快速选定数据清单的各个部份。
19、全选数据区。ctrl+“*”
20、快速输入当天日期:"Ctrl+:"可在单元格中输入系统当前日期。当前时间: crtl + shift + ;
21、选中一个单无格,按shift+F2 键,可以插入批注。
22、选中要向右填充的单元格,按住shift,选中要向右填充的目标单元格,松开shift,再按ctrl+R,可将此单元格的值向右填充。
23、按ALT+向下键,即可得到本列中原有文本的列表
24、ALT+0178 =2 ALT+0179 =3 ALT+0188 =? ALT+0177 =± ALT+0137 =‰
25、Ctrl+D和Ctrl+""(引号)的区别。
A1=25 1/4 用Ctrl+D
1次,A2=25 1/4 (拷贝内容和格式)
2次,A2=25 1/4
3次,A2=25 1/4
A1=25 1/4 用Ctrl+""
1次,A2=25.25(格式有区别)
2次,A2=25.2525.25(不是数字)
3次,A2=25.2525.2525.25 (跟REPT(A1,3)的结果一样)
选中一行内连续的多个单元格,Ctrl+D可以一次向下拷贝,但Ctrl+""不能"
26、CTRL+1,快速打开单元格格式选项
27、F4功能键的妙用:重复上一步操作. 这招在隔行删除、多点复制等方面用起来很爽。ALT+ENTER也有这个功能。
28、1/3应是数值,正确是"0 1/3"
29、最小化窗口:ctrl+f9
最大化和还原窗口:ctrl+f10
删除选定单元格区域的边框:ctrl+shift+_ "
30、在同一单元格内转行:Alt+Enter
31、工具-选项-视图中,在"窗口选项"下去掉"零值"后,余额为0就不显示了。
32、选中开始单元格(如A21),同时按下ctrl+shift+end
33、使用ctrl+PageDown和ctrl+PageUp可以在工作表之间向前向后切换
34、如果要显示当前日期和时间的话可以插入函数 "=now()"
35、Get.Cell(1,Range),可与取得单元格的绝对地址;(以下简略)
5 取得单元格的值;
6 取得单元格的值;
7 取得单元格?母袷剑?
16 取得单元格的宽度;
17 取得单元格的高度;
18 取得单元格的字体;
19 取得单元格的字体大小;
24 取得字体颜色;
38 取得单元格的颜色
  ;32 取得:“[工作簿名]工作表名”。
66 取得: 工作簿名
删除单元格/行/列:选中单元格,ctrl+“-”(减号)
插入单元格/行/列:选中单元格,ctrl+shift+“+”(加号)
2、通过一次按间创建一个excel图表
A、选择要绘制的数据
B、按F11(或ALT+F1)
C、选定整个表,点右键-位置-“作为其中的对象插入sheet”
3、实现平方、立方上标:
选定单元格:
平方:ALT+178 立方:ALT+179
4、在excel编辑页面状态下,按着ctrl并滑动鼠标中轮,可快速改变表格的行高度。
5、用CTRL+TAB键可以快速地在几个打开的工作簿之间切换
6、SHIFT+F2,在选中单元格插入批注
7、F8键 选一单元格>>F8键定位>>再选其它单元格>>名称方块>>定义Range名称
8、用OFFICE XP的,在EXCEL的表标签"sheet 1"等上点右键,可以选择标签颜色,以便快速区分。
9、当EXCLE工作表有不止一个SHEET需打印,可按住CTRL+需打印的SHEET?,被选中的SHEET会闪亮,按打印即可打印所需的SHEET,而不需到每个SHEET按打印键。
10、如果在sheet1中制作了一个表头,在sheet2中也想用的话。先选中表头选复制,然后在sheet2中选粘贴,然后选择“保留原列宽”,就可以了。
11、ALT+;选定可见单元格
12、Ctrl+9 隐藏行;Ctrl+0 隐藏列;shift+ctrl+9或0取消隐藏
13、输入自动求和公式时,不用鼠标点按工具栏上的按钮,只需按“Alt+=”即可
14、按住ctr+end去到本工作表的最尾端
15、将单元格复制成图片:1 选择区域 2 按住SHIFT不放,点击编辑/复制图片3 按自己的要求在弹出的对话框里选择4 确定 ;粘贴图片:按住SHIFT不放,点击编辑/粘贴图片
16、在一行中填写数据时,经常要快速移动光标到行首或行尾,可以用HOME、CTRL+->
17、选中需要复制和下面需要粘贴的多个单元格,按下Ctrl+D组合键,就可以将需要复制的内容粘贴到下面多个单元格中
18、按Ctrl +上下左右箭头可快速移动到数据清单的顶端、底部、最左边及最右边。按Ctrl + Shift + 上下左右箭头可快速选定数据清单的各个部份。
19、全选数据区。ctrl+“*”
20、快速输入当天日期:"Ctrl+:"可在单元格中输入系统当前日期。当前时间: crtl + shift + ;
21、选中一个单无格,按shift+F2 键,可以插入批注。
22、选中要向右填充的单元格,按住shift,选中要向右填充的目标单元格,松开shift,再按ctrl+R,可将此单元格的值向右填充。
23、按ALT+向下键,即可得到本列中原有文本的列表
24、ALT+0178 =2 ALT+0179 =3 ALT+0188 =? ALT+0177 =± ALT+0137 =‰
25、Ctrl+D和Ctrl+""(引号)的区别。
A1=25 1/4 用Ctrl+D
1次,A2=25 1/4 (拷贝内容和格式)
2次,A2=25 1/4
3次,A2=25 1/4
A1=25 1/4 用Ctrl+""
1次,A2=25.25(格式有区别)
2次,A2=25.2525.25(不是数字)
3次,A2=25.2525.2525.25 (跟REPT(A1,3)的结果一样)
选中一行内连续的多个单元格,Ctrl+D可以一次向下拷贝,但Ctrl+""不能"
26、CTRL+1,快速打开单元格格式选项
27、F4功能键的妙用:重复上一步操作. 这招在隔行删除、多点复制等方面用起来很爽。ALT+ENTER也有这个功能。
28、1/3应是数值,正确是"0 1/3"
29、最小化窗口:ctrl+f9
最大化和还原窗口:ctrl+f10
删除选定单元格区域的边框:ctrl+shift+_ "
30、在同一单元格内转行:Alt+Enter
31、工具-选项-视图中,在"窗口选项"下去掉"零值"后,余额为0就不显示了。
32、选中开始单元格(如A21),同时按下ctrl+shift+end
33、使用ctrl+PageDown和ctrl+PageUp可以在工作表之间向前向后切换
34、如果要显示当前日期和时间的话可以插入函数 "=now()"
35、Get.Cell(1,Range),可与取得单元格的绝对地址;(以下简略)
5 取得单元格的值;
6 取得单元格的值;
7 取得单元格?母袷剑?
16 取得单元格的宽度;
17 取得单元格的高度;
18 取得单元格的字体;
19 取得单元格的字体大小;
24 取得字体颜色;
38 取得单元格的颜色
  ;32 取得:“[工作簿名]工作表名”。
66 取得: 工作簿名
2009年4月16日星期四
手工焊接表面元件是个细活。(转贴)
无论你是焊在表贴万能板上还是焊在开好的PCB上,其细致程度不亚于修钟表,甚至不亚于一次外科手术。我甚至认为应该为焊接人评个起码6级工人。
虽然需要比较多的技巧,但毕竟是可以手工操作的,事在人为。
在工具上,最好有热风枪,倒不是在焊接上它有很大帮助,但至少你焊坏了,可以拆下来再焊一次。在助焊剂上,我觉得酒精和松香溶液比较好用,因为它有粘性,可以固定IC。镊子不可少,至于放大镜也是不可少,最好不是那种绿玻璃的放大镜。还有擦烙铁头的海绵,时不时要擦一下。至于擦汗的毛巾就自便了。
不论焊盘是否镀锡,在焊之前,先给焊盘上一层锡,因为这一层锡在焊接好之后是主要接触面焊接面。另外一个焊接面是管脚的末端。上锡的效果要做到薄、均匀、光滑,这样它在放上IC后会方得很平整。可以用烙铁投放平,顺焊盘方向涂抹,然后再分开粘连部分。完成后检查一遍,这很重要,因为如果这时候有粘连的焊盘,到后面都是白做了。每一个步骤后的检查都很重要,因为这是个细活。
然后就是整理管脚了。我用的镊子是圆规上用来蘸墨水画线的那一端的夹子,我还没有发现更好的工具。不论是新片子,旧片子,很多管脚都歪向一侧,主要要整理成间距一致,不然对不上焊盘是很郁闷的一件事。
接下来,把IC放上焊盘,可以把IC管脚底面刷上一层助焊剂,有助于焊接上底面,但这样做过一段时间还没有对准焊盘能把管脚粘在焊盘上。把IC放在焊盘上,逐条边把管脚对齐,这个是体现细活的表现的地方了,你可以按着IC轻轻敲击来微调偏移等等。反正办法是人想的。如果能把管脚对准了,可以焊死对角的的管脚固定IC。然后终于可以歇一口气了--------
接下来是焊接管脚了,焊接管脚前可以刷上助焊剂,稍干时,就可以可以在上面“刷”(横刷竖刷都可以)熔融焊锡了,其实在这个阶段不太容易把管脚粘连上,但如果粘连上了,可以再刷一次助焊剂,再做一次,往往就能把粘连的焊锡带出来。但第二次粘上就不好带出来了。检查时用针拨动管脚,看看是否能拨动,补焊一下。如果顺利的话,焊接能一次成功,但总是不顺利的。
如果焊锡老窝在管脚缝隙里就不肯出来怎么办。正确的做法是:握紧拳头,然后念齐天大圣,也可以把多股铜线剥开,蘸上助焊剂,然后和烙铁头一起加热,融化那些粘连得锡,然后再带出来,掌握住焊锡在变成固体前都有一刻粘稠,那时带出来效果最好。
另外,在焊接时要把握住焊锡的特性,大概多长时间融化,多长时间凝固,不要过分加热焊盘,否则焊盘会脱落的。
怎么取下表贴的IC呢,最好使用热风枪,均匀加热,慢慢翘动,有反映再加力,然后再换个方向再做,直到取下来,不要怕时间长,如果加力撬下来,会把焊盘剥落。
或者采用拉线法,用钢丝(琴弦不错)穿过若干条管脚里面的缝隙,用烙铁加热受力管脚,逐个拉出(是拉出底下的焊锡,不是拉出管脚或者别的什么东西),但不可对拉出的那条管脚再加热,不然又焊上了。
总之细致总是要的。
焊超过100脚的TQFP元件,焊盘先上锡反而会有麻烦。BGA的确可以通过热风枪手工焊接,但是1mm间距以下的还是不要贸然尝试。 焊BGA不算难,主要是有好用的热风枪,不用五分钟就焊好啦。一般手机上的BGA小的话,用烘枪可以,大的BGA就难。用热风枪焊接一般只试用于手机上的BGA.因为手机上的BGA面积比较小.锡球直径一般0.3MM.用热风枪主要把握热风枪枪口平面和BGA平面要尽量平行.这样BGA受热才会均匀.还有在没有经验的情况下要注意BGA锡球的变化.还要控制好热风枪风口的大小.什么样的bga用什么样的分量。而对于大点的bga.一般球的直径在0.5~0.76mm的.一般情况下.用热风枪就不能保证质量了。由于面积大.相对于手机上的BGA温度就不好控制。 热风的温度是直线上升的.一般的温度要求是有温区的.就是温度在某个阶段要维持一段时间.焊这样的bga一般的要用到回流炉和BGA返修设备了。BGA一般要焊之前要烘烤箱在125度的温度下烘烤24小时.这样可以去掉BGA的潮气。防止出项焊接时由于一下子加热,BGA里面潮气膨胀导致BGA表面突起,这种现象术语叫着"刨米花"现象。特别是一起塑封的BGA,比如XPC850、XPC860、赛林斯的大多数Fpga等等。同样PCB板一般也要在烘烤箱中烘烤4小时左右,下面就是机器焊接了。一般的BGA 焊接温度要经过三个阶段.1.预热阶段.主要使PCB均匀受热等等;2.浸润阶段.这一段注焊剂开始挥发;3.回流阶段,这段是最重要的,锡球开始融化。焊接完BGA一般可以用肉眼判断BGA是否短路和虚焊。具体短路看光线能否从BGA锡球纵向和横向串过来,如有短路一般短路的脚之间光线就穿不过来。虚焊主要凭经验和锡球的光泽来判定。BGA焊完就焊阻容和一些IC了。一般是先焊贴片阻容,下来IC,下来才是插脚的。一般能焊接的都能搞定.包括BGA下面飞线.焊过最高1800脚的BGA。
虽然需要比较多的技巧,但毕竟是可以手工操作的,事在人为。
在工具上,最好有热风枪,倒不是在焊接上它有很大帮助,但至少你焊坏了,可以拆下来再焊一次。在助焊剂上,我觉得酒精和松香溶液比较好用,因为它有粘性,可以固定IC。镊子不可少,至于放大镜也是不可少,最好不是那种绿玻璃的放大镜。还有擦烙铁头的海绵,时不时要擦一下。至于擦汗的毛巾就自便了。
不论焊盘是否镀锡,在焊之前,先给焊盘上一层锡,因为这一层锡在焊接好之后是主要接触面焊接面。另外一个焊接面是管脚的末端。上锡的效果要做到薄、均匀、光滑,这样它在放上IC后会方得很平整。可以用烙铁投放平,顺焊盘方向涂抹,然后再分开粘连部分。完成后检查一遍,这很重要,因为如果这时候有粘连的焊盘,到后面都是白做了。每一个步骤后的检查都很重要,因为这是个细活。
然后就是整理管脚了。我用的镊子是圆规上用来蘸墨水画线的那一端的夹子,我还没有发现更好的工具。不论是新片子,旧片子,很多管脚都歪向一侧,主要要整理成间距一致,不然对不上焊盘是很郁闷的一件事。
接下来,把IC放上焊盘,可以把IC管脚底面刷上一层助焊剂,有助于焊接上底面,但这样做过一段时间还没有对准焊盘能把管脚粘在焊盘上。把IC放在焊盘上,逐条边把管脚对齐,这个是体现细活的表现的地方了,你可以按着IC轻轻敲击来微调偏移等等。反正办法是人想的。如果能把管脚对准了,可以焊死对角的的管脚固定IC。然后终于可以歇一口气了--------
接下来是焊接管脚了,焊接管脚前可以刷上助焊剂,稍干时,就可以可以在上面“刷”(横刷竖刷都可以)熔融焊锡了,其实在这个阶段不太容易把管脚粘连上,但如果粘连上了,可以再刷一次助焊剂,再做一次,往往就能把粘连的焊锡带出来。但第二次粘上就不好带出来了。检查时用针拨动管脚,看看是否能拨动,补焊一下。如果顺利的话,焊接能一次成功,但总是不顺利的。
如果焊锡老窝在管脚缝隙里就不肯出来怎么办。正确的做法是:握紧拳头,然后念齐天大圣,也可以把多股铜线剥开,蘸上助焊剂,然后和烙铁头一起加热,融化那些粘连得锡,然后再带出来,掌握住焊锡在变成固体前都有一刻粘稠,那时带出来效果最好。
另外,在焊接时要把握住焊锡的特性,大概多长时间融化,多长时间凝固,不要过分加热焊盘,否则焊盘会脱落的。
怎么取下表贴的IC呢,最好使用热风枪,均匀加热,慢慢翘动,有反映再加力,然后再换个方向再做,直到取下来,不要怕时间长,如果加力撬下来,会把焊盘剥落。
或者采用拉线法,用钢丝(琴弦不错)穿过若干条管脚里面的缝隙,用烙铁加热受力管脚,逐个拉出(是拉出底下的焊锡,不是拉出管脚或者别的什么东西),但不可对拉出的那条管脚再加热,不然又焊上了。
总之细致总是要的。
焊超过100脚的TQFP元件,焊盘先上锡反而会有麻烦。BGA的确可以通过热风枪手工焊接,但是1mm间距以下的还是不要贸然尝试。 焊BGA不算难,主要是有好用的热风枪,不用五分钟就焊好啦。一般手机上的BGA小的话,用烘枪可以,大的BGA就难。用热风枪焊接一般只试用于手机上的BGA.因为手机上的BGA面积比较小.锡球直径一般0.3MM.用热风枪主要把握热风枪枪口平面和BGA平面要尽量平行.这样BGA受热才会均匀.还有在没有经验的情况下要注意BGA锡球的变化.还要控制好热风枪风口的大小.什么样的bga用什么样的分量。而对于大点的bga.一般球的直径在0.5~0.76mm的.一般情况下.用热风枪就不能保证质量了。由于面积大.相对于手机上的BGA温度就不好控制。 热风的温度是直线上升的.一般的温度要求是有温区的.就是温度在某个阶段要维持一段时间.焊这样的bga一般的要用到回流炉和BGA返修设备了。BGA一般要焊之前要烘烤箱在125度的温度下烘烤24小时.这样可以去掉BGA的潮气。防止出项焊接时由于一下子加热,BGA里面潮气膨胀导致BGA表面突起,这种现象术语叫着"刨米花"现象。特别是一起塑封的BGA,比如XPC850、XPC860、赛林斯的大多数Fpga等等。同样PCB板一般也要在烘烤箱中烘烤4小时左右,下面就是机器焊接了。一般的BGA 焊接温度要经过三个阶段.1.预热阶段.主要使PCB均匀受热等等;2.浸润阶段.这一段注焊剂开始挥发;3.回流阶段,这段是最重要的,锡球开始融化。焊接完BGA一般可以用肉眼判断BGA是否短路和虚焊。具体短路看光线能否从BGA锡球纵向和横向串过来,如有短路一般短路的脚之间光线就穿不过来。虚焊主要凭经验和锡球的光泽来判定。BGA焊完就焊阻容和一些IC了。一般是先焊贴片阻容,下来IC,下来才是插脚的。一般能焊接的都能搞定.包括BGA下面飞线.焊过最高1800脚的BGA。
2009年4月3日星期五
美国加州驾照试题(部分)
1、您如何为紧急车辆让路?
A 尽量停靠在道路右侧,然后停下。
B 转入右车道,慢慢驾驶,直到紧急车辆过去。
C 立即停车,即使您是在交叉路口也是如此。
答案A
2、在以下哪种情况下,您应该扩大您的汽车与前车的距离?
A 跟随小轿车。
B 后面的车盯得很紧而拥挤。
C 行车速度低于公布的限速。
答案B
3、“不要行走”信号灯闪亮后,一名行人开始过街。这名行人在街道中间时,您行车方向的交通信号灯变成绿色,您应该:
A 继续驾车,但经过行人时应多加小心。
B 如果行人不在您的车道上,继续驾车。
C 等待,直至行人越过街道。
答案C
4、以下有关盲点的说法哪一个是正确的?
A 您只要换到左边或右边的车道时才需要转过头来从您右肩向后看。
B 装有两个外面的反光镜的车辆没有盲点。
C 在换到右车道时从右肩向后看,在换到左车道时从左肩向后看。
答案C
5、以下哪种做法能帮助您避免被人从后面撞上?
A 在任何时候都打开泊车灯。
B 在转弯前至少100英尺就发出信号。
C 在转弯前至少200英尺就使用您的紧急闪光灯。
答案B
6、您前面的学校公车在闪红灯。您应该怎么办?
A 先停车,然后安全时再前行。
B 仅当您在马路对面时才停车。
C 只要红灯在闪就要停车。
答案C
7、为什么您的乘客应该系安全带?
A 它能帮助防止车祸。
B 这是法律规定。
C 不要求乘客系安全带。
答案 B
8、您正驶向一个十字路口,发现交通信号灯出了故障。您应该怎么办?
A 停车,然后安全时继续行驶。
B 减速,如有必要就停车。
C 如果有其他车辆在场才停车。
答案 A
9、有关其他司机的哪一种说法是正确的?
A 卡车司机是专业人员,他们造成的风险较小。
B 发出转弯信号的司机总是要向所表示的方向转弯。
C 绝不能假设其他司机会给您让路。
答案C
10、您正驶近绿灯,但有车流挡住了交叉路口。您最好应该:
A 将车部分驶进交叉路口,以便确立您的优先权。
B 如果不能通过交叉路口,不要驶进。
C 继续驶进交叉路口,并等候过往车流净空。
答案B
A 尽量停靠在道路右侧,然后停下。
B 转入右车道,慢慢驾驶,直到紧急车辆过去。
C 立即停车,即使您是在交叉路口也是如此。
答案A
2、在以下哪种情况下,您应该扩大您的汽车与前车的距离?
A 跟随小轿车。
B 后面的车盯得很紧而拥挤。
C 行车速度低于公布的限速。
答案B
3、“不要行走”信号灯闪亮后,一名行人开始过街。这名行人在街道中间时,您行车方向的交通信号灯变成绿色,您应该:
A 继续驾车,但经过行人时应多加小心。
B 如果行人不在您的车道上,继续驾车。
C 等待,直至行人越过街道。
答案C
4、以下有关盲点的说法哪一个是正确的?
A 您只要换到左边或右边的车道时才需要转过头来从您右肩向后看。
B 装有两个外面的反光镜的车辆没有盲点。
C 在换到右车道时从右肩向后看,在换到左车道时从左肩向后看。
答案C
5、以下哪种做法能帮助您避免被人从后面撞上?
A 在任何时候都打开泊车灯。
B 在转弯前至少100英尺就发出信号。
C 在转弯前至少200英尺就使用您的紧急闪光灯。
答案B
6、您前面的学校公车在闪红灯。您应该怎么办?
A 先停车,然后安全时再前行。
B 仅当您在马路对面时才停车。
C 只要红灯在闪就要停车。
答案C
7、为什么您的乘客应该系安全带?
A 它能帮助防止车祸。
B 这是法律规定。
C 不要求乘客系安全带。
答案 B
8、您正驶向一个十字路口,发现交通信号灯出了故障。您应该怎么办?
A 停车,然后安全时继续行驶。
B 减速,如有必要就停车。
C 如果有其他车辆在场才停车。
答案 A
9、有关其他司机的哪一种说法是正确的?
A 卡车司机是专业人员,他们造成的风险较小。
B 发出转弯信号的司机总是要向所表示的方向转弯。
C 绝不能假设其他司机会给您让路。
答案C
10、您正驶近绿灯,但有车流挡住了交叉路口。您最好应该:
A 将车部分驶进交叉路口,以便确立您的优先权。
B 如果不能通过交叉路口,不要驶进。
C 继续驶进交叉路口,并等候过往车流净空。
答案B
订阅:
博文 (Atom)