飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 36005|回复: 103

[分享] [看学新手入门必读]学习破解——新手入门必读

    [复制链接]

该用户从未签到

发表于 2006-8-9 23:16:26 | 显示全部楼层 |阅读模式
新手入门必读(www.pediy.com)


一. 论坛规则

 看雪技术论坛是一个纯技术论坛,我们欢迎你从技术角度阐述问题。我们的目标是让来这里的每一个人,成为计算机高手!这里不是提供注册码的场所!!不是嬉戏灌水的地方!!

在您发帖之前,请先做以下事情:
    1、如是您第一次发帖,请看  
提问的智慧论坛常见问题 ——这会提高你的帖字的回复率。
    2、先在本站提供资料里找答案,如本站论坛精华3、4等——或许就可以把问题解决,不必苦苦等待了。
    3、用
Google(http://www.google.com/)搜索引擎找找答案——通过他,你会得到许多意想不到的收获。
    4、使用含义丰富,描述准确的标题,切勿用“帮忙呀”,“救命呀”,“菜鸟请教”等几个字的标题,由于主题太简单,不能反映帖子内容,所以这些帖子一般人不愿点击进入回帖的(大家都很忙,只会根据主题选择感兴趣的帖子查看),这样你就得不到大家帮助了。
    5、请不要点将,也不要要求私下答复
    6、问题解决后,加个简短说明
   
    其它事项:如果是学习笔记,请说明目标软件的下载出处,如果能提供注册机源代码我们很欢迎,但请不要提供编译后的注册机程序,否则要删贴的。还有严禁抄袭他人作品,如果是转帖,请注明。

我们欢迎这样的帖子:

    当你遇到问题,并难以解答时,把遇到的详细情况写出来,我们大家集体解答。
    当你小有成绩,并对自己的成果深有感触时,把你的心情写出来,我们大家一起分享快乐
    当你完成一篇学习笔记(特别是第一篇)时,请你公布出来,我们大家共同进步
    当你已经成为大虾,回顾菜鸟时代,酸甜苦辣,请你写一写,鼓舞一下还不能展翅翱翔的菜鸟的士气。
    其中好的帖子我们还会列入精品

我们不欢迎这样的帖子:

    一上来就问**软件如何pj?**外挂的注册码是多少?这种人好*懒*,只会享用他人果实。
    一上来就问怎么盗password,怎么盗QQ,怎么用Trojan。这种人品德不好,说严重点是道*败*。
    一上来就用攻击他人的言语,这里严禁漫骂!!严禁相互攻击!!
    这类帖子的命运将是——


二. 为你指路

      很多人都想学习解密,这东西刚入门时会让人沉迷进去,可以饭不吃、觉不睡。出现这种现像,也许是解密满足了人们的猎奇心里吧。但掌握这方面技术,对自身的提高确实有好处。可以通过跟踪软件,提高自己的调试技能,并且能了解他人程序思路,使自己写出更好的程序。研究解密技术有助于掌握一些系统底层知识,系统底层知识绝对是构造起大型软件的坚实基础。许多程序发展,都经历了这一锻炼过程的。 而大多数人可能认为解密是一门高深的学问。造成这种原因是以前这方面的技术资料缺乏,从而将“解密”这一技能“神”化了。初学者一般不知从何下手,由于没方向,花费了大量时间和精力,走了不少弯路。这里就给对这方面感兴趣的读者指明一个方向。

      讨论前,先了解一下计算机中的程序。高级语言编写的程序,会编译成机器语言在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分析工作,如何编写加壳工具等。

   

      软件的加密与解密是一个迷人的研究领域,它几乎可以与任意一种计算机技术紧密结合——密码学、程序设计语言、操作系统、数据结构。而由于这样或者那样的原因,对于这一领域的关注程度一直还处于低温状态。而这两本书相信会为更多对知识怀有渴望的朋友多开辟一条走向这个领域的道路,并且进而推动这个领域的不断发展。


三. 基础知识


1.调用约定

      在分析汇编代码时总是要遇到无数的Call,对于这些Call,尽量要根据Call之前传递的参数和Call的返回值来判断Call的功能。传递参数的工作必须由函数调用者和函数本身来协调,计算机提供了一种被称为栈的数据结构来支持参数传递。

      当参数个数多于一个时,按照什么顺序把参数压入堆栈。函数调用后,由谁来把堆栈恢复。在高级语言中,通过函数调用约定来说明这两个问题。常见的调用约定有:




【例】按__stdcall约定调用函数test2(Par1, Par2)   


        push par2  ; 参数2
        push par1  ; 参数1
        call test2;
        {
             push ebp                    ; 保护现场原先的EBP指针
             mov  ebp, esp               ; 设置新的EBP指针,指向栈顶
             mov  eax, [ebp+0C]    ; 调用参数2
             mov  ebx, [ebp+08]          ; 调用参数1
             sub  esp, 8           ; 若函数要用局部变量,则要在堆栈中留出点空间
             …
             add  esp, 8                 ; 释放局部变量占用的堆栈
             pop  ebp                    ; 恢复现场的ebp指针
             ret  8                   ; 返回(相当于ret; add esp,8)
        }


其堆栈调用示意图:




2.局部变量

在子程序内部说明的变量称为局部变量,局部变量的作用域是其所在的子程序。从汇编角度来看,局部变量就是一个临时堆栈缓存,用完释放。
例如这个实例:
附件:local.zip

其反汇编代码如下(红体字为局部变量):

00401000 >/$  6A 04         push    4                                ; /Arg2 = 00000004
00401002  |.  6A 03         push    3                                ; |Arg1 = 00000003
00401004  |.  E8 16000000   call    0040101F                         ; \Add.0040101F
00401009  |.  8BD8          mov     ebx, eax
0040100B  |.  6A 00         push    0                                ; /ExitCode = 0
0040100D  \.  FF15 00204000 call    [<&KERNEL32.ExitProcess>]        ; \ExitProcess


0040101F  /$  55            push    ebp                              ;  保护现场原先的EBP指针
00401020  |.  8BEC          mov     ebp, esp                         ;  设置新的EBP指针,指向栈顶
00401022  |.  83EC 04       sub     esp, 4                           ;  分配局部变量所有空间
00401025  |.  8B45 0C       mov     eax, [ebp+C]                     ;  调用参数2
00401028  |.  8B5D 08       mov     ebx, [ebp+8]                     ;  调用参数1
0040102B  |.  895D FC       mov     [ebp-4] , ebx                     ;  参数1放局部变量里
0040102E  |.  0345 FC       add     eax,[ebp-4]                     ;  参数2与局部变量相加
00401031  |.  83C4 04       add     esp, 4                           ;  释放局部变量所有空间
00401034  |.  5D            pop     ebp                              ;  恢复现场的ebp指针
00401035  \.  C2 0800       retn    8


3.返回值

在调试程序时,不要见Call就跟进,在Call之前所做的所有PUSH动作以及对寄存器的操作都可能是在给函数传递参数,而函数的返回值一般都放在EAX里面,当然这个值可能是一个指针,指向一个数据结构。



4.偏移量转换为虚拟地址



具体见:http://]http://bbs.pediy.com/showthread.php?s=&threadid=18022


4.PE格式

不管是不是研究脱壳,最好都要对PE格式有所了解,具体见:
  
ah007翻译的“PE文件格式”1.9版
  
qduwg翻译的PE文件格式   
  
Iczelion's 的PE文件格式
  PE结构各字段偏移参考


5.Olldbg入门教学

OllyDBG 入门系列(一)-认识OllyDBG
OllyDBG 入门系列(二)-字串参考
OllyDBG 入门系列(三)-函数参考
OllyDBG 入门系列(四)-内存断点
OllyDBG 入门系列(五)-消息断点及 RUN 跟踪


--------------------------------------------------------------------------------
四. 工具

    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:什么是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: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根本没有为退出调试器做任何处理。。也就是说。他们的调试器不打算被大家所退出!
( kkkkk  回答)

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
(nOpnOp 回答)



五. 一般技术问题

Q:ZIP和RAR之类密码(Word、execel等都属于这一类)能否用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学一些数论知识是必要的,当然我们不太可能发现某的算法的弱点,但至少可以在,某个高人,发现算法的弱点,并公开时,能看懂人家是如何实现的(这需要涉及很多理论性的东西,会涉及数论的),并能写成代码。
(zmworm 回答)

Q:REPZ MOVSD是什么意思?
A: REPZ:→相同的指令有REPE
当ZF=0,退出重复,否则(CX或ECX)←(CX或ECX)-1,并执行其后的串指令,如MOVSD
MOVSD:→同类指令MOVSB字节传送,MOVSW字传送
以双字为单位的串操作指令,由源字符串向目标字符串移动数据
REPZ MOVSD这条指令是在做数据传送,源字符串DS:SI 目标字符串ES:DI  
( aboil回答)


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
求逆元用扩展欧基里德算法,初等数论书都有讲。
( blowfish 回答)

Q: _lopen("\\\\.\\NTICE",...) 这一句代码,“\\.\NTICE”是驱动模块吗?“\\.”在这里是什么意思?
A: \\.\表示本地计算机,\\servername\表示远程计算机。
   NTICE是softice的驱动程序向Win32应用程序所显露出来的设备的符号名称。每个驱动会创建/管理一个或者多个虚拟的或者物理的设备,每个设备有个设备名,但这个设备名只能在驱动之间引用。需要显露给Win32应用程序的设备除了设备名之外,还要有一个符号名,便于Win32应用程序通过CreateFile/_lopen来引用。在驱动里面是用IoCreateSymbolicLink( )来显露设备符号名的。
( blowfish 回答)

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位运算指令的需要,但转换后的值没变。
( blowfish 回答)

Q:如何跟踪自动弹出IE的程序?
A:用ShellExcuteA 函数设断

Q:用正常的字符串参考,找不到相关字符!
A:很多程序把字符串分散在内存里,譬如“register”它可能做成“r g s e”和“ e i t r”储存在两个不同的单元里;倒过来存放,如reg=ger
,你搜索不到“register”字符串,程序运行中会把它们组合,再调用SetWindowTextA函数来设置控制窗口中的窗口文本。(woow回答)


六. 密码学相关FAQ

资料整理: cnbragon

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

七. 关于目标软件问题


在论坛上不可能避免地要讨论到具体的软件,我们还是建议大家尽可能拿些国外的软件来练习。对于国内软件,只要作者主动提出,论坛是维护作者这方面权益的,禁止相关讨论。目前下述软件不要在论坛公开讨论:
1. 国华软件
2. 英语精灵
3. 完美卸载
4. 网络U盘
5. FlexCell表格控件



由 kanxue 于 2006-07-31 09:18 最后编辑

签名暂时禁用_____________________________@
PYG19周年生日快乐!

该用户从未签到

发表于 2006-8-10 09:24:03 | 显示全部楼层
已经看过了   还是要支持以下'
PYG19周年生日快乐!

该用户从未签到

发表于 2006-8-10 12:43:50 | 显示全部楼层
偶在看雪看过了,~~非常经典的帖子!推荐长期置顶!!
PYG19周年生日快乐!

该用户从未签到

发表于 2006-8-10 18:12:36 | 显示全部楼层
菜鸟来学习。。。。
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-5-6 16:27
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2006-8-10 20:51:11 | 显示全部楼层
    太多内容,得慢慢看,细心体会。

    谢谢nisy的转帖。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-8-11 14:19:07 | 显示全部楼层
    很不错!!
    值得学习
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-8-12 16:35:24 | 显示全部楼层
    不错。。经典。。可惜啊。太多东西学了。真的是太累了点。。。。:$
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-9-13 00:22:43 | 显示全部楼层
    把这个做成电子书吧。。不错。。谢谢
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-10-12 11:21:43 | 显示全部楼层
    努力学习,谢谢LZ的介绍了,我要学好基础。
    PYG19周年生日快乐!
    wang72175 该用户已被删除
    发表于 2006-10-12 14:45:57 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表