简介:  内容简介 本书以加密与解密为切入点,讲述了软件安全领域许多基础知识和技能,如调试技能、逆向分析、加密保护、外壳开发、虚拟机设计等。读者在掌握本书的内容,很容易在漏洞分析、安全编程、病毒分析、软件保护等领域扩展,这些知识点都是相互的,彼此联系。国内高校对软件安全这块领域教育重视程度还不够,许多方面还是空白,而近年来许多企业对软件安全技术人才需求量越来越大。从就业角度来说,掌握这方面技术,可以提高自身的竞争能力;从个人成长角度来说,研究软件安全技术有助于掌握一些系统底层知识,是提升职业技能的重要途径。作为一名合格的程序员,除了掌握需求分析、设计模式等外,如能掌握一些系统底层知识,熟悉整个系统的底层结构,对自己的工作必将获益良多。 本书可以作为学校或培训机构的软件安全辅助教材,是安全技术爱好者、调试人员、程序开发人员不可多得的一本好书。 内容截图
 勘误表 Lm 表示第m 行,L-n 表示倒数第n 行 ,Dn 表示第n次印刷(D1表示2008年7月第一次印刷,D2表示2008年7月第二次印刷) PⅤ L-10 D1/D2 反馈者:shoooo 原文:看雪资深版主。看雪论坛ID为linhansh 更正:看雪资深版主。看雪论坛ID为linhanshi PⅤ L9 D1 反馈者: ddstrg 原文: 我并不是读书感兴趣 更正: 我并不是读书不感兴趣 Ⅹ L-20 D1/D2 反馈者:家有睡神 原文:调试SHE 更正:调试SEH PⅪ L12 D1/D2 反馈者:shoooo 原文:北极星2003、笨雄、rackabcer、nbragon、inhanshi 更正:北极星2003、笨笨雄、crackabcer、cnbragon、linhanshi PⅣ L-17 D1/D2 反馈者:shoooo 原文:13.9.2 Themidia的SDK分析 更正:13.9.2 Themida的SDK分析 PⅪ L12 D1/D2 反馈者:shoooo 原文:感谢linhansh在工具方面提供的帮助! 更正:感谢linhanshi在工具方面提供的帮助! PⅪ L6 D1/D2 反馈者:shoooo 原文:特别感谢盛大网络发展有限公司徐海侠 更正:特别感谢盛大网络发展有限公司徐海峡 P5 L-1 D1/D2 反馈者:清风 原文:用此,函数设置 更正:用此函数设置 P4 L18 D1/D2/D3/D4 原文: 现在称做 Win32 更正: 现在称作 Win32 P5 L-12 D1/D2 反馈者:senhuxi 原文:hmemcpy函数的注释排版有问题 更正:三行注释均下移一行 P5 L-1,L-2 D1/D2 反馈者:kmlch 原文:Memcpy 更正:memcpy P11 L9 D1/D2 反馈者:未秋叶已落 原文:和这个程序执行不无关的东西 更正:和这个程序执行无关的东西 P21 L-9 D1/D2 反馈者:kmlch 原文: 模块加载/卸载、线程创建结束等事件的处理 更正: 模块加载/卸载、线程创建/结束等事件的处理 P22 L12 D1/D2 反馈者:kmlch 原文: 遇到CALL跳过,不跟进 更正: 遇到CALL路过,不跟进 说明: 文中下面多次用到路过,还要用步过的,建议统一表述为其中的三个中的一个。 P22 L13 D1/D2 反馈者:usufu 原文:直到出现RET指定时中断(表2-1) 更正:直到出现RET指令时中断 P23 L2,D1 反馈者:yangjt 原文:会返回到4013FA这句 更正:会返回到4013FF这句 P27 L7,D1 反馈者:yangjt 原文:单击一次ZF的值取反 更正:双击一次ZF的值取反 P32 L1 D1/D2 反馈者:senhuxi 原文:其中的一个设置为44013AA 更正:其中的一个设置为4013AA P36 L-11,L-8 D1/D2 反馈者:青枫 原文:40147C 更正:401476 (附图2.36光条应该停在401476这行) P37 L2,D1 反馈者:yangjt 原文:弹出时从堆栈窗口中看到的 更正:中断时从堆栈窗口中看到的 P37 L6,D1 反馈者:yangjt 原文:要得到第一个参数的值 更正:要得到第一个参数的内存地址 P43 L-17,D2 反馈者:XLSDG 原文:OllDbg出会现假死现像 更正:OllDbg会出现假死现象 P44 L4,D1 反馈者:yangjt 原文:这类语言的编译后程序 更正:这类语言编译后的程序 P45 L-2 D1 反馈者:hdy981 原文:intel 更正:Intel P46 L3 D1/D2 反馈者:hdy981 原文:OllyDdg 更正:OllyDbg P50 L1 D1 反馈者:senhuxi 原文:WindProc 更正:图3.10 内容为"WindProc",而相对应的图3.11却为"WindClass" P60 L-1 D1 反馈者:嗜血狂君 原文:功能就是将40011AB到4011C3之间的 更正:功能就是将401060到401074之间的 P62 L15 D1/D2 反馈者:青枫 原文:在DA\SIG目录中 更正:在IDA\SIG目录中 P78 L-8 D1/D2 反馈者:pathletboy 原文:pascal程序实体不合适。 更正:(更正暂时留着,修正的代码以后放出) P79 L9 D1/D2/D3/D4 反馈者:AsmDebuger 原文:mov eax, [ebp-4] ; 将局部变量指针返回到eax 更正:mov eax, [ebp-4] ; 将局部变量返回到eax P80 L4,D1 反馈者:yangjt 原文:将参数b的值 更正:将参数a的值 P81 L13 D1 反馈者:Gruuuuubby 原文:0040101B puash ecx 更正:0040101B push ecx P83 L5,D1 反馈者:yangjt 原文:基址加上某变量 更正:基址加变址寻址 P99 L14 D1/D2/D3/D4 反馈者:jerrysun 原文: inc cx Loop B20 更正: inc bx Loop B20 P106 L18 D1/D2 反馈者:Xacs 原文:进入子程序(keymakep设置第一次中断地址) 更正:进入子程序(keymake里设置第一次中断地址) P107 L-23 D1/D2/D3/D4 反馈者:keagan 原文:将 序列号 1212 更正:将 序列号 1234 P113 L9 D1/D2 反馈者:littlewisp 原文:1.使用SetTime()函数 更正:1.使用SetTimer()函数 P115 L7 D1/D2 反馈者:senhuxi 原文:来到地址4010C6,输入修改指令"jmp 4010C6" 更正:来到地址4010C6,输入修改指令"jmp 4010D6" P135 L1 D1/D2 反馈者:kan 原文:“push ecx,ecx”中即为 更正:“push ecx”,ecx中即为 P136 L16 D1/D2 反馈者:lizaixue 原文:其设计时基于和MD4相同的原理 更正:其设计是基于和MD4相同的原理 P202 L-11 D1/D2/D3/D4 反馈者:keagan 原文:correct=pediy 更正:correct="pediy" P264 L-14 D1 反馈者:usufu 原文:在32位Windows系统中,以为不存在共享地址空间,所以已用程序无需加以区别。 更正:在32位Windows系统中,已经不存在共享地址空间,所以已用程序无需加以区别。 P266 L-3 D1 反馈者:junxiong 原文:MAGE_NT_SIGNATURE 更正:IMAGE_NT_SIGNATURE P266 L-20 D1/D2/D3/D4 反馈者:keagan 原文:图10.3 查看PE文件 MD-DOS 头部 更正:图10.3 查看PE文件 MS-DOS 头部 P268 L3 D1/D2/D3/D4 反馈者:雨中的鱼 原文:DLL这个字段的值一般是0210h。 更正:DLL这个字段的值一般是210Eh。 P277 L-3 D1/D2 反馈者:kangaroo 原文:k=1800h,故 ……4020D2h - 400000h – 1800h = 8D2h 更正:k=1A00h,故 ……4020D2h - 400000h – 1A00h = 6D2h p285 L26 D1/D2/D3/D4 反馈者:manbug 原文:数据目录表(DataDirectory)的第11个成员指向绑定输入。 更正:数据目录表(DataDirectory)的第12个成员指向绑定输入。 P288 L-2 D1 反馈者:senhuxi 原文:文件偏移0C00h处是输出表内容,具体如图10.21所示。 更正:(这句话没问题,是图10.21有问题)图10.21“Offset"用的是10进制表示 P288 L-9 D1 反馈者:usufu 原文:即输入表在内存中偏移4000h的地方。 更正:即输出表在内存中偏移4000h的地方。 P296 L5 D1/D2/D3/D4 反馈者:雨中的鱼 原文:NumberOfNamedEntries为0,NumberOfIdEntries为1。 更正:NumberOfNamedEntries为1,NumberOfIdEntries为0。 P307 L-6 D1/D2/D3/D4 反馈者:未秋叶落 原文: 可以选择“关闭”或者最后将其附加到调试器上的“调试”按钮。 更正: 可以选择“确定”或者最后将其附加到调试器上的“取消”按钮。 P320 L-4 D1/D2/D3/D4 反馈者:hdy981 原文:擅用SDK 更正:善用SDK P325 L-17 D1/D2 反馈者:hdy981 原文:被映像到 更正:被映射到 P326 L-7 D1 反馈者:hdy981 原文:决大多数 更正:绝大多数 P332 L-7 D1/D2/D3/D4 反馈者:isiah 原文:其是把内存指定地址的映像文件读取出来 更正:其实是把内存指定地址的映像文件读取出来 P335 L-4 D1 反馈者:hdy981 原文:就可以Dump内存境像了 更正:就可以Dump内存镜像了 P337 L-1 D1/D2/D3/D4 反馈者:obaby 原文:大小为450B8h-405000h=B8h。 更正:大小为4050B8h-405000h=B8h。 P367 L9 D1/D2 原文:13.9.2 Themidia的SDK分析 更正:13.9.2 Themida的SDK分析 P388 L15 D1 反馈者:轩辕小聪 原文:callloc_next 更正:call loc_next P432 L5 D1 反馈者:smartsl 原文:这段代码恢复了Rizng 3级对ntdll.dll 更正:这段代码恢复了Ring 3级对ntdll.dll P462 L-2 D1 反馈者:hdy981 原文:在后面会用Getmulehandle取基地址 更正:在后面会用GetModuleHandle 取基地址 P467 L15 D1/D2/D3/D4 反馈者:hdy981 原文: S_FileIsDll DD 0 ;存放原始是事为DLL的标志 更正: S_FileIsDll DD 0 ;存放原始程序为DLL的标志 P474 L-275 反馈者:kangaroo 原文:VBegin代码所有的:add esp,4 更正: 更正为:add ebp,4 注:光盘源码正确。 P516 L-9 D1 反馈者:junxiong 原文:执行这句后,ebp=401005h 更正:执行这句后,edx=401005h P516 L-10 D1 反馈者:junxiong 原文:执行这句后,ebp=401005h 更正:执行这句后,edx=401000h P525 L-7 D1/D2 反馈者:Fido 原文:创建DLL文件 更正:调用DLL函数 P538 L-1 D1/D2/D3/D4 反馈者:yangjt 原文:MOV ESP,EBP 更正:MOV EBP,ESP 参考文献 L-8 D1 反馈者:usufu 原文:扬季文.80X86汇编语言程序设计教程 更正:杨季文.80X86汇编语言程序设计教程 [b]光盘映像文件勘误[b] 18.2.2 Debug API机制 和 18.2.3 利用调试寄存器机制 目录下的源码: 搜索:ContinueDebugEvent(pi.dwProcessId, pi.dwThreadId, dwState) ; 替换:ContinueDebugEvent(DBEvent.dwProcessId, DBEvent.dwThreadId, dwState) ;
|