看了两周半,最后的逆向分析技术应用+异常处理看了整整一周半。
建议读者看这本书时,有什么C++概念不清楚参考C++经典书,比如《C++程序设计语言》。书中代码与谭浩强的《C语言程序设计》有的一拼。C++概念有些地方也阐述的不到位。比如P269值得吐槽的太多了,挑倒数第二段吐下槽。记得当初学C++的时候,老师教我们父类和子类的关系是"是",比如手表是表的子类的话,那么手表是表。书中以张三与张三他爹比喻子类和父类实例,以像不像来说明父类和子类的关系。我只问一句儿子是老爸吗?难道儿子是老爸生的,儿子就是子类,老爸就是父类?要真这么想的话,那才"可能会给你的社会交际带来潜在的危险"(书中原话)。
缺少某些汇编指令的讲解,比如
• test
• setnz
...
第一章 熟悉工作环境和相关工具
自己制作SIG文件,让IDA可以识别第三方提供的库函数,这功能不错,更方便调试和学习。举了一个实际应用例子,很简略。后面用到了的操作再临时提出来。我喜欢,有虎头之风。
第二章 基本数据类型的表现形式
介绍了各类基本数据类型的汇编。作者对本章的定位"是学习后面内容的基础,读者应重点掌握"。没细看,一扫而过。
第三章 认识启动函数,找到用户人口
以前看过《程序员的自我修养---链接、装载和库》,重温了这部分知识。
第四章 观察各种表达式的求值过程
够深度,不仅介绍了篇幅不少的数学理论,还介绍了Release版本与Debug版本的不同以及编译器优化技巧。比较深的跳过,回头用到了再看。
例子先来一段源码,然后源码和汇编对比。这样比较浪费篇幅,要么只保留源码和汇编对比,要么一段源码,一段汇编。
P85 表4-1 条件跳转指令表
第五章 流程控制语句的识别
看了switch一节,终于确定作者对于效率异乎寻常的兴趣。效率与主题关系不大,但是由于作者的兴趣,效率相关的篇幅很大。有序线性跳转表、索引表与判定树跳过,有空时再看。
P394 分析OD删除硬件断点例子用到了switch跳转表
实在不欣赏使用goto语句模拟do循环(代码清单5-21)。
P140 "while 循环结构中使用了两次跳转指令完成循环,由于多使用了一次跳转指令,因此while循环要比do循环效率低一些。"结论很容易误导别人。while循环和do循环两者效率不可比,从功能上讲两者是不可替换的。效率之说也唯有可以替换的情况下才能谈吧,不然的话从何谈起?
第九章 结构体和类
P225 异常处理是动态运行时的代码吗?
理解
• 浅拷贝
第十二章 从内存角度看继承和多重继承
P269值得吐槽的太多了,挑个吐下槽
倒数第二段。记得当初学C++的时候,老师教我们父类和子类的关系是"是",比如手表是表的子类的话,那么手表是表。书中以张三与张三他爹比喻子类和父类实例,以像不像来说明父类和子类的关系。我只问一句儿子是老爸吗?难道儿子是老爸生的,儿子就是子类,老爸就是父类?要真这么想的话,那才"可能会给你的社会交际带来潜在的危险"(书中原话)。
建议读者看这本书时,有什么C++概念不清楚参考C++经典书,比如《C++程序设计语言》。
第十六章 调试器OllyDBG的工作原理分析
OllyDBG的逆向分析很成熟,或许应该看看OllyDBG的逆向分析,从而学习逆向分析?
延伸课题:制作自己的OD。有点冲动,先看看别人怎么做的。
P396 汇编mov ecx, DebugEvent.dwProcessId解释获取异常类型,应为获取异常进程ID
第十七章 反汇编代码的重建与编译
重建反汇编代码很实用,我利用书中的ToUpper例子重新编译制作了DLL。
刚看完,尚未整理。有心再看一遍,等那时候再整理吧。
读书笔记(慢慢整理吧)
• 补码
• 栈底栈顶
补码
负数在内存中都是以补码存在的
取反加一得到,0-x=x(反)+1
推导过程
因为 x + x(反) = 0xFFFFFFFF
所以 x + x(反) + 1 = 0
从而得到 0 - x = x(反) + 1
栈底栈顶
esp 栈顶寄存器
ebp 栈底寄存器
典型的进入函数开始代码
push ebp
mov ebp,esp
sub esp,40h
栈顶与栈底这段空间为栈空间,存放临时变量(参考堆栈相关知识)
函数参数在栈底+4连续内存中。栈底0存放返回地址。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)