首页
论坛
课程
招聘
[注意]《加密与解密(第4版)》勘误收集
2018-10-23 10:34 13430

[注意]《加密与解密(第4版)》勘误收集

2018-10-23 10:34
13430
我们很希望本书尽量完美,但总难免会有些问题和错误,故恳请广大读者批评指正。
本帖将收集 《加密与解密(第4版)》所有勘误,希望您发现问题和错误不吝指正,对于相应错误的第一位反馈者,会将你论坛ID放进n年后第5版的致谢名单中(以此帖汇总的为准)。

反馈错误的方法,一些小错误,请直接回此主题帖,谢谢!

勘误表


Px表示第x页,Lm 表示第m 行,L-n 表示倒数第n 行 ,Dn 表示第n次印刷(D1表示2018年10月第一次印刷)


示例:
P4   L18  D1
原文: xx
更正: yy

P51 L-6 D1

反馈者:eaglezy

原文:pa $ra

更正:pa @$ra


P52 L-5 D1

反馈者:Cirn09

原文: 多了一个8,代表4字节访问。

更正: 多了一个8,代表8字节访问


P66 L10  D1
反馈者:rescuo

原文:将“Kernel option1”中的“Make final analysis pass”选项关闭是一个很好的方法。

更正:将“Kernel option2”中的“Make final analysis pass”选项关闭是一个很好的方法。


P91 L13 D1

原文:将被调试的目标文件ReverseMe.exe复制到本机中,同时将win32_remote.exe复制到调试器服务端的Windows XP中,执行该文件。

更正: 将被调试的目标文件ReverseMe.exe和win32_remote.exe复制到调试器服务端的Windows XP中,执行 win32_remote.exe 。


P100 L3 D1

原文:“Supermermedickhead”改为pediy ,将其虚拟地址设为00403000h 。

更正: “Supremedickhead”改为“pediy”,其虚拟地址为00403000h。


P125   L6  D1

反馈者:pentagram

原文: 这个跳转是由低地址向高地址区域走的

更正: 这个跳转是由高地址向低地址区域走的


P139 L12 D1

反馈者:明丶大

原文:000000014000103E      edx, [rsp+30h] ;参数2:edx=pt.x1

更正:000000014000103E     mov    edx, [rsp+30h]     ;参数2:edx=pt.x1


P140 L8 D1

反馈者:abcteeny

原文;局部变量pt.x2=4

更正;局部变量pt.y2=4


P143  L-12 D1

反馈者:丿feng

原文:0000000140001037      mov     ecx,  cs:140009154 ;ecc=g_nNum1,140009154h为全局变量

更正:0000000140001037      mov     ecx,  cs:140009154 ;ecx=g_nNum1,140009154h为全局变量


P150   L-14  D1

反馈者:pentagram

原文: 一维数组寻址公式,从cast表中获取case语句块的代码偏移

更正: 一维数组寻址公式,从case表中获取case语句块的代码偏移



P151  L-17 D1

反馈者:chkds

原文:编译器会采用case表的方式实现siwtch语句

更正:编译器会采用case表的方式实现switch语句


P165 L-6

原文:

0000000140001046      shr     rdx, 2 ;参数2:丢弃rax

                                                                                ;等价于rdx=argc*MAGIC_ NUMBER>>64>>2

更正:

0000000140001046      shr     rdx, 2 ;参数2:丢弃rax

                                                                                ;等价于rdx=nNum*MAGIC_ NUMBER>>64>>2


P167  L13 D1

反馈者:geine

原文:优化公式2:如果x≥0,则x%2ⁿ = x&(2ⁿ - 1);如果x<0,则x%2ⁿ = (x + (2ⁿ - 1)&(2ⁿ - 1)) - (2ⁿ -1),示例如下。

更正:优化公式2:如果x≥0,则x%2ⁿ = x&(2ⁿ - 1);如果x<0,则x%2ⁿ = ((x + (2ⁿ - 1)) & (2ⁿ - 1)) - (2ⁿ -1),示例如下。


P175 L32 D1

反馈者:abcteeny

原文 :

 0000000140001240       mov     rax, [rsp+30h];设置返回值为this

 0000000140001249       pop     rdi

000000014000124A       retn


更正:

0000000140001240          mov     rax, [rsp+28h+arg_0]

0000000140001245          add     rsp, 20h

0000000140001249          pop     rdi

000000014000124A          retn


P187 L 12 D1

反馈者:wx_clay

原文:mov rax,[rsp+40h] ;rcx=this

更正:mov rax,[rsp+40h] ;rax=this


P200  L-9

反馈者:_ 嘲

原文:k1+=(ch>'Z')?(ch-32):ch;

更正:k1+=(ch>= 'Z')?(ch-32):ch


P201 L28 D1 D2

反馈者:找到组织了

原文:因此,可以将F2函数的功能看成将输入的十进制数转换成十六进制数。

更正:因此,可以将F2函数的功能看成将输入的十进制数变换处理后,以十六进制数输出。


P214   L-19  D1

反馈者:pentagram 

原文: 写一个本地服务端模来拟服务器。

更正: 写一个本地服务端来模拟服务器。


P221  L-4    D1

反馈者:achillis 

原文:if GetLastError<>ERROR_ALREADY_EXISTS

更正: if (GetLastError() != ERROR_ALREADY_EXIST)


P228 L5 D1,D2

原文:B^C^D        0≤t≤39

更正: B^C^D        20≤t≤39


P251 L5

反馈者:starrQWQ 

原文:密钥扩展算法通过对用户输入的128 位、192 位或者256 位的密钥进行处理,共生成Nb(Nr+1)

更正:密钥扩展算法通过对用户输入的128 位、192 位或者256 位的密钥进行处理,共生成Nb(NK+1)


P291 L-3

原文:x64内存理论上支持最大2^64KB的寻址空间

更正:x64内存理论上支持最大2^64B的寻址空间


P295 L6 D1

反馈者:abcteeny 

原文:如图7.6所示,在运行kb命令之后的调用栈中,当应用层的应用程序调用Createfile() 函数创建或打开一个文件的时候,从下到上列出了从R3到R0的函数调用关系,如图7.8所示,其他函数从R3到R0的调用过程与此类似。


更正:如图7.8所示,在windbg的命令窗口运行kb命令,会显示函数的调用栈,该调用栈列出了当R3的应用程序调用CreateFile() 函数创建或打开一个文件的时候,从R3到R0的函数调用关系,其他函数从R3到R0的调用过程与此类似。


P295  L-6  D1

反馈者:achillis

原文:符号链接名分别是“\??\C:\”  “\??\D:\”   “\??\E:\” 

更正: 符号链接名分别是“\??\C:”  “\??\D:”   “\??\E:”


P299  L8    D1
反馈者:achillis

原文:WaitForMultiple Objects()函数

更正:WaitForMultipleObjects()函数


P301 L-6

原文:对应SSDT 函数地址和SSDT 表基地址的偏移量×16(即左移4 位)的值,因此计算公式变为:

修正:对应SSDT 函数地址和SSDT 表基地址的偏移量×16 (即左移4 位) 的值,因为存取的时候将偏移左移了4位,所以读取的时候需要右移4位恢复其真实的偏移值。因此计算公式变为:


P304  L-19    D1

反馈者:achillis 

原文:mov eax, dword ptr fs:[30]      ;fs:[30]里存放的即为PEB地址

更正:mov eax, dword ptr fs:[30h]     ;fs:[30h]里存放的即为PEB地址


P312  L8    D1
反馈者:achillis 

原文:因为System进程一般不会加载win32k.sys

更正: System进程和smss.exe进程不会加载win32k.sys,其它进程均可


P367 L18 D1

反馈者:那里有阳光 

原文:线程异常回调函数的调用约定是 _cdecel

更正:线程异常回调函数的调用约定是_cdecl


P408 L-3 D1

反馈者:jgs

原文:ASCII码字符是“PE00”,

更正:ASCII码字符是“PE\0\0”,


P431   L-3 

反馈者:CalvinMcCain

原文:即输入表在内存中偏移4000h

更正:即输出表在内存中偏移4000h


P543 L-9

反馈者:email123

原文:

00000000`77668aa9 6844332211          push    55667788h

00000000`77668aae c744240488776655  mov     dword ptr [rsp+4],11223344h


更正:

0000000077668aa9 6888776655            push  55667788h

0000000077668aae c744240444332211      mov  dword ptr [rsp+4], 11223344h


P501 L15 D1

反馈者:wx_我有酒 

原文:PrintfChar(&ch2);

更正:PrintfChar(pChar);


P557 L-8 D1 D2

原文: 

movesi, dword ptr [ebx+3Ch] //e_lfanew

movesi, dword ptr [esi+ebx+78h]//EATAddr


更正: 

movesi, dword ptr [ebx+3Ch] //e_lfanew

movesi, dword ptr [esi+ebx+78h]//EATAddr,ebx为kernel32基址

 


562  L-2  D1

反馈者:achillis 

原文:push6e6fh

          push6d6c7275h

更正:push     6e6fh

          push     6d6c7275h


P797  L-1  D1/D2

反馈者:我是EIP

原文:要使进程在Single Step模式下运行,需要利用Intel CPU的EFLAGS中的一个Single Step标志位。

更正:要使进程在Single Step模式下运行,需要利用Intel CPU的EFLAGS中的一个单步调试的标志位TF(TRAP FLAG)。


P798  L1  D1/D2

原文:图22.2中的SF标志位处就是Single Step标志。

修正:图22.2中的TF标志位处就是Single Step标志。


P808 L23 D1

反馈者:jgs

原文:

else if (dwReason == DLL_PROCESS_DETACH)

{

Free();

UnHookAPI();

}

 

更正:

else if (dwReason == DLL_PROCESS_DETACH)

{

Free();

}



[公告] 2021 KCTF 春季赛 防守方征题火热进行中!

最后于 2019-10-27 11:47 被kanxue编辑 ,原因:
收藏
点赞0
打赏
分享
最新回复 (81)
雪    币: 3
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sojrs 活跃值 2018-10-23 22:06
2
0
p557 L-8 d1

原文: mov esi ,dword ptr [esi+ebx+78h]
更正: mov esi ,dword ptr [esi + 78h]
书中说PE文件头的78H偏移处是函数导出表的地址,而这里的esi已经是PE文件头的地址,因此无需再加ebx

另外下面一行的push esi少空格了


ebx是DLL基址,不能忽略。

mov esi, dword ptr [ebx+3Ch] //e_lfanew

mov esi, dword ptr [esi+ebx+78h] //EATAddr,ebx为DLL基址


by kanxue答复

最后于 2019-10-23 14:00 被kanxue编辑 ,原因:
雪    币: 2004
活跃值: 活跃值 (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rescuo 活跃值 2018-10-24 20:49
3
0
P6 L12 D1
原文:将“Kernel option1”中的“Make final analysis pass”选项关闭是一个很好的方法。
更正:将“Kernel option2”中的“Make final analysis pass”选项关闭是一个很好的方法。

“Make final analysis pass”不是“Kernel option1”选项中的
雪    币: 2
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chzwww 活跃值 2018-10-28 00:29
4
0
错了这么多 以后能换吗
雪    币: 202
活跃值: 活跃值 (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
abcteeny 活跃值 2018-10-29 18:46
5
0
P140 L8 D1
原文;局部变量pt.x2=4
更正;局部变量pt.y2=4

P175 L32 D1
原文 :mov    rax, [rsp+30]
更正:mov     rax,[rsp+30]
           add      rsp,20h
雪    币: 1231
活跃值: 活跃值 (61)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
明丶大 活跃值 2018-10-29 21:35
6
2
P139 L12 D1

原文: edx , [rsp+30]   ;参数2:edx=pt.x1
更正: mov edx , [rsp+30]  ;参数2:edx=pt.x1
雪    币: 202
活跃值: 活跃值 (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
abcteeny 活跃值 2018-10-30 14:31
7
0
P295 L6 D1
原文:如图7.6所示
更正:如图7.8所示
最后于 2018-10-30 14:32 被abcteeny编辑 ,原因:
雪    币: 1620
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
chkds 活跃值 2018-11-1 22:13
8
0
P151  L-17 D1
原文:编译器会采用case表的方式实现siwtch语句
更正:编译器会采用case表的方式实现switch语句
最后于 2018-11-1 22:17 被chkds编辑 ,原因:
雪    币: 1044
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
eaglezy 活跃值 2018-11-3 09:40
9
0
P51 L-6 D1
原文:pa $ra
更正:pa @$ra

P104 表4.1
原文:stdcall允许使用VARARG
更正:不允许
最后于 2018-11-21 17:57 被eaglezy编辑 ,原因:
雪    币: 3629
活跃值: 活跃值 (322)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
email123 活跃值 2018-11-3 10:21
10
0
P543  L9-L10 D1
原文:0000000077668aa9 6844332211   push  55667788h
           0000000077668aae c744240488776655 mov  dword ptr [rsp+4], 11223344h
更正:0000000077668aa9 6844332211   push  11223344h
           0000000077668aae c744240488776655 mov  dword ptr [rsp+4], 55667788h
雪    币: 7503
活跃值: 活跃值 (146)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2018-11-5 12:33
11
1
email123 P543 L9-L10 D1 原文:0000000077668aa9 6844332211 push 55667788h 0000000077668aae c7442 ...
你好,我是第13章“Hook技术”的作者,感谢指出问题!
这里确实存在错误,机器码与汇编指令不一致,但错的不是汇编指令,而是机器码。
这是当时在Windbg里手写的汇编指令然后复制出来的,后来改了汇编指令,忘了改对应的机器码。
所以,正确的更正结果应该是这样的:

更正:0000000077668aa9 6888776655   push  55667788h
           0000000077668aae c744240444332211 mov  dword ptr [rsp+4], 11223344h

雪    币: 7503
活跃值: 活跃值 (146)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2018-11-5 12:43
12
0
P559 D1 图14.14 捆绑
原文:获取文件句柄   GetFileSize
更正:根据图中左右的对应关系,要么是“ 获取文件句柄   CreateFileA ”,要么是“ 获取文件大小   GetFileSize ”

原文:设置文件指针  SetFilePoint
更正: 设置文件指针  SetFilePointer
最后于 2018-11-5 12:44 被achillis编辑 ,原因:
雪    币: 7503
活跃值: 活跃值 (146)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2018-11-5 12:46
13
0
P562  L-2  D1
push后面缺少空格
原文:push6e6fh
          push6d6c7275h
更正:push        6e6fh
          push         6d6c7275h
雪    币: 7503
活跃值: 活跃值 (146)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2018-11-5 12:50
14
0
P563  L21  D1
缺少右中括号
原文:call dword ptr [ebp+04h                 //kernel32.VirtualAlloc
更正:call dword ptr [ebp+04h]                //kernel32.VirtualAlloc

另,P563页至P564页的汇编代码中,出现"dword ptr[ebp+xxx]"这样指令的,ptr后面普遍缺少空格
雪    币: 7503
活跃值: 活跃值 (146)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2018-11-5 12:55
15
0
P295  L6  D1
函数名大小写问题
原文:应用程序调用Createfile()函数
更正:应用程序调用CreateFile()函数
雪    币: 7503
活跃值: 活跃值 (146)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2018-11-5 12:59
16
0
P295  L-6  D1
原文:符号链接名分别是“\??\C:\”  “\??\D:\”   “\??\E:\”
更正: 符号链接名分别是“\??\C:”  “\??\D:”   “\??\E:”


雪    币: 7503
活跃值: 活跃值 (146)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2018-11-5 13:02
17
0
P295  L-14    D1
函数名大小写问题
原文:HAL:硬件抽象层。“HAL”是
更正:Hal:硬件抽象层。“Hal”是

P295  L-12    D1
函数名大小写问题
原文:MM:内存管理。“MM”是
更正:Mm:内存管理。“Mm”是
雪    币: 7503
活跃值: 活跃值 (146)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2018-11-5 13:04
18
0
P299  L8    D1
函数名多一个空格
原文:WaitForMultiple Objects()函数
更正:WaitForMultipleObjects()函数
雪    币: 7503
活跃值: 活跃值 (146)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2018-11-5 13:07
19
0
P304  L-19    D1
指令中16进制表示问题
原文:mov eax, dword ptr fs:[30]     ;fs:[30]里存放的即为PEB地址
更正:mov eax, dword ptr fs:[30h]     ;fs:[30h]里存放的即为PEB地址
雪    币: 7503
活跃值: 活跃值 (146)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2018-11-5 13:11
20
0
P312  L8    D1
原文:因为System进程一般不会加载win32k.sys
更正: System进程和smss.exe进程不会加载win32k.sys,其它进程均可


雪    币: 7503
活跃值: 活跃值 (146)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2018-11-5 13:19
21
0
P221  L-4    D1
原文:if GetLastError<>ERROR_ALREADY_EXISTS
更正: if GetLastError() != ERROR_ALREADY_EXISTS

C风格的伪代码突然出现一个VB的<>符号,感觉有点怪异。。。
雪    币: 7503
活跃值: 活跃值 (146)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2018-11-5 13:29
22
0
P222  小节5.9 常用断点设置技巧的表格  D1
这里有几个疑问:
1.字符串类里的函数GetWindowWord似乎与字符串并没有关系?
2.很多函数都有A/W两个版本,有的写出来了,有的没有写出来,比如GetDriveType、GetSystemDirectory,建议统一
3.很多函数还有带Ex的版本,比如SetFilePointerEx、RegCreateKeyEx、RegQueryValueEx,这里没有列出来
雪    币: 7503
活跃值: 活跃值 (146)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2018-11-5 13:36
23
0
P345 图8.12和图8.13    D1
原文图片是彩色的,适合电子屏幕观看,但是印刷为黑白版面后显得颜色过深,不利于阅读
最后于 2018-11-5 13:36 被achillis编辑 ,原因:
雪    币: 922
活跃值: 活跃值 (25)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
Cirn09 活跃值 2018-11-8 15:20
24
0
P52 L-5 D1

原文: 多了一个8,代表4字节访问。
更正: 多了一个8,代表8字节访问。(或“代表四字访问”)
雪    币: 7074
活跃值: 活跃值 (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wacwcc 活跃值 2018-11-9 11:22
25
0
P244 L-7 D1
注册码是32字节
原文: 1234567890ABCDEFFEDCBA987654321
更正: 01234567890ABCDEFFEDCBA9876543210
游客
登录 | 注册 方可回帖
返回