一. 为你指路
很多人都想学习解密,这东西刚入门时会让人沉迷进去,可以饭不吃、觉不睡。出现这种现像,也许是解密满足了人们的猎奇心里吧。但掌握这方面技术,对自身的提高确实有好处。可以通过跟踪软件,提高自己的调试技能,并且能了解他人程序思路,使自己写出更好的程序。研究解密技术有助于掌握一些系统底层知识,系统底层知识绝对是构造起大型软件的坚实基础。许多程序发展,都经历了这一锻炼过程的。 而大多数人可能认为解密是一门高深的学问。造成这种原因是以前这方面的技术资料缺乏,从而将“解密”这一技能“神”化了。初学者一般不知从何下手,由于没方向,花费了大量时间和精力,走了不少弯路。这里就给对这方面感兴趣的读者指明一个方向。
讨论前,先了解一下计算机中的程序。高级语言编写的程序,会编译成机器语言在CPU中执行,如Visual C++等。由于机器语言与汇编语言是一一对应的,因此就可将机器语言转化成汇编语言,这个过程称之为反汇编。而汇编语言可能读性是比较好的,这样就可分析程序流程,解析其功能了,这个过程就是解密(俗称破解)。也就是说,解密的基础是建立在汇编语言级别上的,因此想涉足这一领域的朋友,汇编语言一定得学好。汇编语言是大学计算机的必修课,这方面的书籍品种很多,虽然大多书本是以DOS汇编为讲解平台,但对理解汇编指令功能是没影响的。
等汇编学好了,建议再掌握Win32编程。Win32程序设计就是API方式的Windows编程,学习Windows API将使您更深入地了解 Windows工作方式。此类书籍有Charles Petzold著的《Windows程序设计》(以VC来讲解)。另一本是罗云彬著的《Windows环境下32位汇编语言程序设计》,它以MASM汇编为讲解平台。
有了上面这些基础,你就可以参考《 加密与解密(第二版) 》这本书入门了。
学习解密其实很累的,需花费大量的时间,而且经常会碰壁,三五天毫无进展是极为平常的事情。这时你可能有点想退却,其实你不要着急,只要你认真学习,成功就在眼前。没有人是生来就什么都会的,如果你有问题,就大胆的去问你周围的人。学解密的秘诀就是勤奋+执着!记住并能做到这两点,你会变得很优秀的。
等你解密入门后,建议再看看Matt Pietrek、Jeffrey Ritcher等大师的专著,这些书是每个程序员都应该阅读的:《Windows 95 System Programming Secrets》(中文译名《Windows 95 系統程式设计大奧秘》),《windows高级编程指南》,《Windows2000编程技术内幕》,《Win32系统编程—Windows 2000应用程序开发指南》等。这样,你就对系统底层有一定的了解了。到了这个水平后,就可朝软件加密这块发展了,例如编写自己的加壳软件等。
这时,可以阅读本站推出的《 软件加密技术内幕 》这本新书了,这本书可以让你了解PE的格式,教你如何编写PE分析工作,如何编写加壳工具等。
软件的加密与解密是一个迷人的研究领域,它几乎可以与任意一种计算机技术紧密结合——密码学、程序设计语言、操作系统、数据结构。而由于这样或者那样的原因,对于这一领域的关注程度一直还处于低温状态。而这两本书相信会为更多对知识怀有渴望的朋友多开辟一条走向这个领域的道路,并且进而推动这个领域的不断发展。
--------------------------------------------------------------------------------
二. 工具
SoftICE是一款经典的调试工具,运行在Ring0级,可以调试驱动。但平时调试的程序都是Ring3级,因此推荐大家用OllyDBG(简称OD),这款工具上手容易,功能十分强大,现在论坛上的文章基本都是用OllyDBG来讲解的。
Q:从哪儿得到 OllyDBG、IDA等加解密工具?
A: http://www.pediy.com/tools.htm 另外,由于版权,本站不提供SoftICE、IDA等商业软件下载,需要的可以用Google搜索或时常关注论坛。
Q:W32Dasm中的“Ord:0109h”是什么?
A:是Hint,本函数在其所驻留DLL的导出表中的索引号
( firstrose 回答)
Q:谁能介绍一下sig文件的制造方法?
A:How to create .sig file from .cpp?
1. Compile the CPP files (remember, compile ONLY, do not link)
2. See the resulting .OBJ files?
3. Run the IDA FLIRT utilities on the .OBJ files
4. Voila! Instant .SIG files
5. Copy those .SIG files to the SIG folder of IDA
6. Disassemble the app in IDA
7. Open the "APPLY SIGNATURE" box
8. Select your signatures and apply
--------------------------------------------------------------------------------
Olldbg常见问题
Q: OD中如何运行到光标所在处?
A: 将光标移到目标位置,按F4.(SoftICE等价功能键是F7)
Q: 如何用OD修改可执行程序?
A:直接在反汇编代码区更改,这时可以使用汇编代码更改,然后选中修改后的汇编代码,右击-->复制到可执行文件-->保存文件.
Q:使用OD,从内存区复制内存数据的时候,有时候无法将所有的数据都复制到剪贴板
A:ALT + o 打开调试选项,选择“字符串”标签,里面有个“无法打印的ASCII字符转存为圆点”,选中就可以了。或用OD修改版,可以主页工具下载栏目下。
(nbw回答)
Q:OD为什么删除了断点,重新加载的时候,这些断点都会重新出现
A:设置ollydbg.ini,将配制文件里改成如下:Backup UDD files=1
(kanxue)
Q:如何还原到OD到分析前的状态?
A:右键 分析/从模块中删除扫描
Q:如果已经知道某一CALL的具体作用,能否把后面所有相同的CALL都改成函数名形式?
A:比如 CALL 110000 此中已经知道110000是一个核心计算
则如下操作,让光标停在CALL 110000 这个语句上,按回车键
会跳到110000的地址上去显示,之后让光标停在110000上,按
shift 和; (分号) 其实就是完成一个:(冒号)的动作,输入
名称,这回所有的调用110000处,都会显示CALL 你刚才输入的
名称了.(nig回答)
Q:OD现在有一个毛病,一旦修改了调试的程序并保存后,重新载入后OD就会重分析程序,原来保存的Udd文件就失效,给调试带来很大不便。
A:问题在这:Olly Advaced 插件,附加选项Ⅱ /忽略被修改的断点处内存(4st0ne回答)
Q:什么是UDD?
A:OllyDbg 把所有程序或模块相关的信息保存至单独的文件中,并在模块重新加载时继续使用。这些信息包括了标签、注释、断点、监视、分析数据、条件等等
Q:OD的数据窗口显示一个下划线,是什么意思?
A:重定位加下划线[Underline fixups],几乎所有的DLL和一部分程序都包含重定位,这样就可以在内存中的不同基地址加载模块了。当该项开启时,CPU反汇编窗口或CPU数据窗口中的重定位地址都将添加下划线。(xing_xsz)
Q:用OD调试一些加壳程序,如Themida等,可能你会发现下断后(包括硬件断点),程序跑到断点时,OD会出现假死现像。
A:打开OD配置文件ollydbg.ini,你会发现:Restore windows= 123346 //这个Restore windows可能会是一个很大的值
现在只需要将Restore windows=0,重新用OD调试程序,假死问题就消失了。 (kanxue)
Q:请问“bmsg 30A12 wm_gettext”这个命令OD中怎么写?(OD中如何下消息断点?)
A:
http://bbs.pediy.com/showthread.php...;threadid=17671
还有:
SoftIce 能够跟踪应用程序的消息,那么OllyDbg呢?
by FuZzYBiT
OllyDbg也是可以的,那是一个非常"隐蔽的功能"。它是如此的有用。
1. 打开程序
2. 名字窗口[ 在CPU窗口中按CTRL+N ]
3. 查找 User32.TranslateMessage API
4. 右击/FindReferences(查找参考)
5. 下条件断点 [SHIFT+F4]
6. 表达式: MSG
7. 记录函数参数:永远
如果你不能找到它,试试右击鼠标,然后搜索全部模块中的名称。
但是如果我想要捕捉一个特定的消息如WM_COMMAND呢?
只对WM_COMMAND记录
用这个方法做:
1. 打开一个程序
2. 名字窗口[ 在CPU窗口中按CTRL+N ]
3. 查找 User32.TranslateMessage API
4. 右击/FindReferences(查找参考)
5. 下条件断点 [SHIFT+F4]
6. 条件框:MSG==WM_COMMAND
7. 记录函数参数: 条件满足时
Q:一些修改版的OD无法源码级调试程序
A:OD默认是用DBGHELP.dll,如果目录下没有这个,OD会到系统目录下找DBGHELP.dll。
而修改版OllyICE,为了防止一些程序检测DBGHELP.dll模块,故将其改名了,所以必须在当前目录下保留ICEHELP.DLL这个文件。
--------------------------------------------------------------------------------
SoftIC和TRW2000常见问题
Q:哪种调试工具支持USB键盘与鼠标?
A:目前只有DriverStudio V2.6以上版本内置的SoftICE支持。因此如你想用TRW2000调试工具请再接一个串口或PS/2接口的鼠标。
Q:哪种Softice支持WindowsXP?
A:只有DriverStudio V2.7以上版本支持。
Q:哪个版本的SoftIce能运行在WinME系统?
A:SoftIce 4.05以上版本就可,然后再安装Winice Loader工具就可,安装说明。
Q:我的Windows 2000用SoftICE 4.05老有问题
A:强烈建议Windows 2000用户不要用SoftICE 4.05,因为或多或少会出现许多不能解释的问题,建议直接用更新更强大的DriverStudio系列。
Q:为什么SoftICE或TRW再运行一些软件时会中断跳出?
A:用命令FAULTS off关闭错误跟踪功能。
Q:F11与F12区别?
A:F11对应的命令是:G@ss:sp,假如你目前正中断在程序中,下这个指令会在堆栈的返回地址设个暂时断点并执行到此断点。
F12对应的命令是:P RET 。SoftICE或TRW将一直单步执行直到它找到一条返回语句(RET、RETF),也就是说让SoftICE一直执行代码,直到出现 RET (XXXX) 命令,再跳出来拦截,这时,当前 IP(EIP) 会是停在 RET (XXXX) 后的某一条语句上,通常是在某一个CALL XXXXXXXX 后面。
说明:F11功能键在SoftICE中有效,在TRW中可以用pmodule命令代替F11或F12,可瞬间回到到前程序领空。
Q:SoftICE与TRW2000的断点有什么不同?
A:在这里以G命令来解释,如对G 401000命令,大家都知道是执行到401000停下,但SoftICE认为是到当前段的401000停下(也就是说在当前应用程序领空),而TRW200却不管段址如何,只要EIP是401000便停下。 这样一般跟踪一软件只要G 401000便解决。这个功能看起来简单,却极为有用。有了这条命令,只要把当前跟踪到的EIP记下,下一次一G便到。而在SoftICE下,一般先用其Symbol Loader装载程序,先来到当前应用程序的领空,然后再G 401000才能到达指定地址处。其它断点命令,如bpx原理与此类似。
Q:IceExt0.70插件不能使用
A:从0.70开始,IceExt由自己的装载器而不再是系统服务管理器负责载入。
运行IceExt需要满足的条件
[CheckSoftICEConfig() in IceExt.c v0.70]
I.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTice下有键值,
名为KDExtensions,类型为REG_SZ。
II.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTice下有键值,
名为KDHeapSize,类型为REG_DWORD,值大于或等于0x00008000。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTice下有键值,
名为KDStackSize,类型为REG_DWORD,值大于或等于0x00008000。
(tnttools回答)
Q:Icedump装不成功
A:首先要确定IceDump版本要与SOFTICE的一至,如相同还不成功则把winice.dat中:
;EXP=c:windowssystemkernel32.dll
;EXP=c:windowssystemuser32.dll
2句前的‘;’去掉重起即可。
在Windows NT/2000/XP系统上类似的工具是NticeDump,具体安装参考此文。
由于Nitecdump最高只支持DS 2.7,因此再高版本的softice就可用IceExt工具代替Nicedump了。它扩展了SoftICE在Win NT/2K/XP下的命令功能。
Q:trw怎么抓图?
A:下命令ver keep,然后按Print Screen即将图抓取到剪帖板内,剩下的事就是找下图像处理软件粘贴上去即可。
Q:如何抓取TRW2000中的汇编代码?
A:在TRW2000下:u 401000,402000 >myfile或 u 401000 L 100 >myfile
Q:如何抓取SOFTICE中的汇编代码?
A:第一步运行SOFTICE的symbol loader快捷方式,打开菜单的“SoftICE initialisation settings”选项。将历史缓冲区(history buffer)调大些(默认为256,不能放足够多的缓冲数据)。然后切换到SOFTICE调试画面下,来到你要抓取的地方,反汇编这些代码,如:U CS:EIP L 1000 ,立即按CTRL+D返回到windows环境,再次来到symbol loader程序,选择File/Save SoftICE History As ... 。
或在SOFTICE基础下,装载icedump,用命令 ScreenDump更加方便灵活。
Q:DriverStudio3.0Beta2系统启动时蓝屏.我的系统为Windows2000 Professional + SP4.
A:得打个补丁:http://www.pediy.com/tools/Debugger...atch/numega.htm
Q:我使用XP SP1或2000SP3,安装了DriverStudio或DriverSuite 2.7 ,我设置的断点不起作用。我该怎么办?
A: 首先,下载下面链接的OSINFO.DAT文件,替换系统目录原有的。
ftp://ftp.compuware.com/pub/drivers...Info/OSINFO.DAT
如果问题是由于安装HOTFIX后出现的,这样操作可以减少HOTFIX的影响。
步骤如下:
1. 建立正确的针对NTOSKRNL的NMS文件,参照 "Translating system files" 中的内容(略)
2. 在Winice.dat中加入独立的一行内容:NTSYMBOLS=ON
3. 将开始时,就将Symbols加入到symbol列表中
这样就能解决你的问题了。
Q:softice如何在Windows 退出 ?
A:不能退出SOFTICE,他钩住了大量的内核函数!
内核调试器可以实现不关闭计算机停止调试器。
嚣张事情是SOFTICE根本没有为退出调试器做任何处理。。也就是说。他们的调试器不打算被大家所退出!
Q:Driver studio为3.1(1722),安装IceExt0.66后,net start IceExt时提示“系统发生 1450 错误。系统资源不足,无法完成请求的服务。”导致IceExt无法启动,有人遇到过这种情况吗?请问如何解决
A:修改注册表:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTice下的下列键,把值改大一点:
KDHeapSize = 0x9000
KDStackSize = 0x8000
三. 一般技术问题
Q:ZIP和RAR之类密码能否用SOFTICE或TRW动态跟踪破解?
A:不能,WinZip和WinRAR是通过与CRC结合的方式进行加密,它们在解压的时候会不管3721先把带上用户输入的密码的CRC放进解压流程中,先解出来再说,最后才进行原始的CRC判定,如果最后得到的CRC与原来的不一样,那就是解压失败。因为CRC是不可逆推的,所以也没办法得到原始的密码,同时也因为把对比的过程放在了最后,所以才没办法用SoftICE等工具进行破解,只能穷举(目前来说)。
Q:为什么在WinNT/2000/XP系统,bpx hmemcpy断点无效?
A:hmemcpy是16 bits windows里的一个函数,全名Huge MEMory CoPY,俗称万能断点,但在一般的编程书籍上很少提到,原因它是底层的东西,没有特殊需要,一般不直接调用。它的操作很简单,只是将内存中的一块数据拷贝到另一个地方,Win9x系统里很频繁地调用它处理数据。在Win NT/2K系统上相关的函数是memcpy,但在Win NT/2K上不同于Windows 9x上,很少再调用memcpy来处理数据了,用此函数设断基本上什么也拦不住。
Q:为何同一函数有几种形式,如MessageBoxA(W)?
A:MessageBoxA(W)是MessageBoxA,MessageBoxW两种形式缩写,Windows函数是区分字符集的:A表示ANSI, W表示Wide,即Unicode (Wide character-set),前者就是通常使用的单字节方式,而后者是双字节方式,方便处理双字节字符。Win98基本是使用ANSI字符串来进行内部操作的,但它仍可处理少数Unicode字串符函数,如MessageBoxW、 MessageBoxExW等。而Win2000/XP所有核心函数都是Unicode字串符。
Q:有一汇编指令:cmp dword [ebp-10],byte +01, 请问dword在这里的作用是什么呢?在这里dword [ebp-10]和[ebp-10]有什么不一样吗? 请问byte +01是一种怎么样的寻址呢?
A:在16位指令中,缺省的类型是字Word,在32位指令中,缺省的类型是双字Dword。byte +01表示方法是TRW2000中特有的,就是数字1,一个字节长。
Q:请问ASCII扩展字符(即ASCII值在080-0ff)如何输入?
A:输入时按住Alt键,然后输入ASCII的十进制码(001~255)。
Q:某一软件,用FI看到有 Win GUI *CRYPTED* 的字样
A:Win GUI只是指Windows图形应用程序,有*CRYPTED* 的字样,是FI认为该软件己加密,但不能识别出加密的类型。
Q:Delphi、C++ Builder编译的软件用getwindowtext等断点拦不住?
A:这是因为Delphi通过向Edit发送WM_GETTEXT(直接调用WNDProc,而没有使用消息函数)消息来获得Text的内容的,整个过程没有调用过任何Win32 API函数。所以常用的Hmemcpy、GetDlgItemTextA、GetWindowTextA等断点失效是当然的。
那么如何才能将用户输入的字符串拷贝到软件的缓冲区中时使SoftICE中断呢?办法有多种,例如用DeDe反编译得到该事件的地址,对此地址设断拦截。
Q:今后采用密码学方面的软件会越来越多,对于一个CRACKER是否有必要因此学习大量的数论知识?
A:首先我们要明确,加密算法在软件保护中的作用是什么?
加密算法在软件保护中的作用,是防写注册机。而对其他pj方式防护能力较差。
加密算法,在很多情况下是可知的,网络安全中,可以通过阅读通信协议,来了解算法;而软件中,算法往往嵌入在程序代码中。所以基于算法保密上的安全永远是不可靠的。于是人们通过密钥 来解决这个问题。目前所有流行的算法的安全性,都是基于密钥的保密。
而对于软件来说,对称密钥算法,没有什么意义。因为密钥必须嵌入软件中。所以公开密钥(不对称密钥)算法,成为软件加密的理想选择。
对于一个普通的CRACKER包括普通的程序员,是没有必要学习大量的数论知识。因为现在现成算法函数接口很多,随便拿来用就可以,不必自己去一行一行的去写代码,只要搞清算法的加密流程就可以了。一个普通的CRACKER只要跟某段代码时,能够感觉到他大概是什么算法,然后用算法验证软件(我常用 cryptool),检查一下,就可以了;而且pj软件的方法很多,比如做补丁,并不是写注册机这一种方法。理论上,软件可以在机器上正常运行所有功能一次,就是可以pj的。
当然,对于想往更高层次发展的Cracker学一些数论知识是必要的,当然我们不太可能发现某的算法的弱点,但至少可以在,某个高人,发现算法的弱点,并公开时,能看懂人家是如何实现的(这需要涉及很多理论性的东西,会涉及数论的),并能写成代码。
Q:REPZ MOVSD是什么意思?
A: REPZ:→相同的指令有REPE
当ZF=0,退出重复,否则(CX或ECX)←(CX或ECX)-1,并执行其后的串指令,如MOVSD
MOVSD:→同类指令MOVSB字节传送,MOVSW字传送
以双字为单位的串操作指令,由源字符串向目标字符串移动数据
REPZ MOVSD这条指令是在做数据传送,源字符串DS:SI 目标字符串ES:DI
Q:RSA 算法中的MOD运算疑问?
A:mod是求余运算符。
如果x与y的积除以z所得的余数为1,即xy = 1 (mod z),则称x和y对于模数z来说互为逆元,这种互为逆元的关系用符号表示为:
x = y的-1次方 (mod z)
x的-1次方 = y (mod z)
其中,-1次方只是个逆元的表示记号而已,是仿照以前的“倒数”的表示法,并非真的就是-1次方。
17 * 593 mod (37-1)(41-1) = 1
17 * 593 mod 1440 = 1
求逆元用扩展欧基里德算法,初等数论书都有讲。
Q: _lopen("\\\\.\\NTICE",...) 这一句代码,“\\.\NTICE”是驱动模块吗?“\\.”在这里是什么意思?
A: \\.\表示本地计算机,\\servername\表示远程计算机。
NTICE是softice的驱动程序向Win32应用程序所显露出来的设备的符号名称。每个驱动会创建/管理一个或者多个虚拟的或者物理的设备,每个设备有个设备名,但这个设备名只能在驱动之间引用。需要显露给Win32应用程序的设备除了设备名之外,还要有一个符号名,便于Win32应用程序通过CreateFile/_lopen来引用。在驱动里面是用IoCreateSymbolicLink( )来显露设备符号名的。
Q:bmsg与bpmsg有什么不同?
A:bmsg与bpmsg皆为中断消息用的,不同之处是bpmsg可预设条件.设法见说明书.
硬件中断为利用CPU自身的标志寄存器设断.软件中断是软件模拟硬件产生中断.
I/O中断与硬件中断是完全不同的两个概念.I/O中断用于系统与端口通讯时.一般在硬狗时用
Q:CDQ是什么指令?
A:CDQ是符号扩展指令
D是dword(4字节),Q是qword(8字节)
CDQ把EAX寄存器中的数视为有符号的数,将其符号位(即EAX的最高位)扩展到EDX寄存器,即若EAX的最高位是1,则执行后EDX的每个位都是 1,结果EDX = FFFFFFFF;若EAX的最高位是0,则执行后EDX的每个位都是0,结果EDX = 00000000。这样就把EAX中的 32位带符号的数变成了EDX:EAX中的64位带符号的数,以满足64位运算指令的需要,但转换后的值没变。
Q:如何跟踪自动弹出IE的程序?
A:用ShellExcuteA 函数设断
Q:用正常的字符串参考,找不到相关字符!
A:很多程序把字符串分散在内存里,譬如“register”它可能做成“r g s e”和“ e i t r”储存在两个不同的单元里;倒过来存放,如reg=ger
,你搜索不到“register”字符串,程序运行中会把它们组合,再调用SetWindowTextA函数来设置控制窗口中的窗口文本。
Q:安装WKTVBDE时的问题
A:XP下的Msvbvm60.dll是2004年的,找了一个以前版本的Msvbvm60.dll替换,即可。
Q:如何让driver停在入口?
A:改入口为CC,再用PEID的插件搞定改好的SYS的checksum就可以加载了,这时不论你用什么R0调试器都可以拦到,改回代码之后就可以正常调试了,很方便.
Q:怎样拦截wsock32.dll中的send?
A:wsock32没有send,但是wsock32有recv,ws2_32中也有recv,如果单独
bp recv默认是拦截ws2_32中的recv,但是如果用bp wsock32.recv会拦截到wsok32中的recv,如果在OD内存窗口查看就会看到模块是wsock32
Q:我在用IDA反汇编一个程序时,其中出现了很多的Lock Xadd [ebx],edx的指令,请教高手是什么意思
A:
LOCK
这是一个指令前缀,在所对应的指令操作期间使此指令的目标操作数指定的存储区域锁定,以得到保护。
XADD
先交换两个操作数的值,再进行算术加法操作。多处理器安全,在80486及以上CPU中支持。
Q:请问ADD如何转换成SUB?转换方法是怎么样的?请教大家!
例:ADD EAX,264891F1=SUB EAX,?
A:
=SUB EAX,D9B76E0F
转换方法:
对264891F1求补码。
即先求反码再加1,具体如下:
NOT(264891F1)+1
Q:INT 2E 这个命令是什么命令?
A:调用OS核心功能.有些系统是sysenter或syscall指令.
系统服务调用ring3->ring0,转向调用ntoskernel中的函数
Q:rol ror用C/++怎么表示?
A:
ROL:
int rol = 18;
int cnt = rol%32;
int Result = (eax <<>> (32-cnt);
ROR:
int ror = 9;
int cnt = ror%32;
int Result = ((eax >> cnt) | (eax << (32-cnt));
四. 密码学相关FAQ
Q:DES加密算法介绍。
A:DES是一种对称加密算法。密钥56位。其解密算法和加密算法一样,只是把子密钥的顺序倒过来即可。
对于DES算法,Bruce Schneier所著的"Applied Cryptography"一书(中文叫<<应用密码学>> )中有很详细的说明.
这里是一篇关于Triple DES (3DES)的帖子
http://bbs.pediy.com/showthread.php...p;threadid=3254
Q:RSA源程序。
A:本分论坛已有类似的主题:
请看:http://bbs.pediy.com/showthread.php...p;threadid=8568
Q:请问有哪些好的计算hash的工具?
A: 计算hash的工具有很多,比如 yyxzz[CCG]的hashcalc, damn的calculator
Q:密码学中的最常用的几种算法
A:目前大家最常用也是经常接触到的加密算法有:MD5,SHA(包括SHA160,SHA384,SHA512),DES(包括3DES),
Blowfish,AES(Rijndael),RSA,DSA,Elgamal(包括ECC-Elgamal),ECC.
这里有一篇加密算法概述
http://bbs.pediy.com/showthread.php...p;threadid=3590
Q:比较好的加密算法库
A:加密算法库有商业的和免费的。比如:miracl,freelib,cryptlib,crypto++,libmtocrypt,openssl,biglib,FGint等等。
如果想实现public key cryptography,推荐使用miracl.
cryptlib的核心代码几乎都是用asm所写,所以速度很快,效率很高。
crypto++功能很强大,但上手很慢。
libTomcrypt使用简单,功能也很强大。
关于这些库的详细说明,请参考每个库所带的手册,请在使用前仔细阅读。
下面是其中几个库的官方网站:
miracl: http://indigo.ie/~mscott/
crypto++: http://www.eskimo.com/~weidai/cryptlib.html
cryptlib: http://www.cs.auckland.ac.nz/~pgut001/cryptlib/
libTomcrypt: http://libtomcrypt.org/
FGint: http://triade.studentenweb.org/GInt/gint.html
Q:一些好的关于密码学的网站
A:请看声声慢的帖子:
关于密码学的一些link
密码学链接
Q:ECC算法介绍
A:请参考zmworm的 ECC算法入门介绍 一文,绝对精典,看雪论坛精华6中有.
另外,这儿有几个精典的关于ECC的网站
Elliptic Curve Cryptography: http://cnscenter.future.co.kr/crypto/algorithm/ecc.html
Online Elliptic Curve Cryptography Tutorial: http://www.certicom.com/index.php?a...c_tutorial,home
C++/Java ECC lib:http://dragongate-technologies.com/products.html
如果你想实现ECC,推荐使用miracl
Q:如何知道一个软件使用了哪些加密算法
A:在分析一个软件的时候,先用PEiD查一下,PEiD中有一个kanal插件,它目前至少支持25种常见的加密算法,
可以用这个插件来分析一下,大部分常见算法都可查出,如果查不出来,要么是没有使用任何常见的加密算法,
要么就是使用了如RSA,Elgamal,ECC等公钥算法!
此类工具还有Cryptosearcher(作者是一个韩国的cryptoguy,x3chun),还有Cryptotool.
Q:如何用常见的密码学算法来保护我的软件
A:首先,要熟悉一些常见的密码学算法。可以参考看雪编著的<<加密与解密>> 第二版中的第6章!
其中介绍了常见的密码学算法在软件保护中的应用,而且有相关的破解分析,很值得一看。
其次就是使用如上介绍的加密算法库,这些库中都有不少的用于软件保护的例子
具体问题,可以提出来,大家共同讨论
Q:关于blowfish加密算法的文章
A:请看这里
http://bbs.pediy.com/showthread.php...p;threadid=2975
Q:关于PGP
A:请看这里
http://bbs.pediy.com/showthread.php...p;threadid=3164
Q:RSATool的使用方法
A:请看这里
http://bbs.pediy.com/showthread.php...p;threadid=3556
另外,对于DSA,Elgamal,ECC分别有DSATool,Elgamal Generator, Ecc Builder等工具
Q:密码学工具下载地址
A:这里有一些http://www.pediy.com/tools/Cryptography.htm
没有评论:
发表评论