随笔分类 - 【读书笔记】
摘要:##IDS文件 使用.ids文件扩展它函数方面的知识。.ids文件通过列举共享库当中包含的每一个导出函数。 ##创建IDS文件 idsutils使用工具用于创建.isd文件。这些实用工具包括两个库解析器。 #使用loadint扩充预定义注释 如果开启了自动注释,就会有 使用loadint使用工具可以
阅读全文
摘要:##Winodows控制台 Windows控制台版本-idaw.exe GUI版本-idag.exe 64位版本idaw64.exe和idag64.exe ##Liunx控制台 叫做idal。基本导航与Windows控制台版本类似。使用Linux终端程序时面临的最大挑战在于如何将所有热键原封不动的保
阅读全文
摘要:#IDA TIL文件 IDA当中所有数据类型和函数原型信息都存储在TIL文件中。 ##加载新的TIL文件 在types中按下insert,选择要加载的til文件,该文件包含的所有结构体定义都被添加到标准结构体列表当中。 ##共享TIL文件 前面提过,idb实际上是一个归档文件用于保存不使用的数据库组
阅读全文
摘要:##数据与代码转换 在自动分析阶段,数据字节可能被错误分析为代码字节,反之也是。 对反汇编代码重新格式化:删除当前的格式(代码和数据),右击希望取消定义的项目,在结果上下文菜单中选择undefine,就可以取消函数代码数据的定义。就会如下 然后开始重新反汇编,只需要右击第一个字节在上下文菜单中选择c
阅读全文
摘要:##基本ida导航 跳转到地址 jump to address对话框 导航历史记录 jump-jump to previous position可以跳转到前一个位置 jump to next position跳转到后一个位置 栈帧 栈帧是在程序运行时栈中分配的内存块,专门用于特定的函数调用。也通过栈
阅读全文
摘要:很喜欢这本书第一页上的一句话“站在巨人的肩上”,确实要好好读读这些本好书,不限于实用的工具书,还包括别的读物。 不扯了,今天开始也会写一些这本书的读书笔记,不会像就【加密与解密】那样分章节,而是有什么想写的就会写出来,内容多了就发一篇。 再认识一下这个开始界面吧 New引导选择一个新文件,Go不选文
阅读全文
摘要:
应用层进程通过系统调用进入内核,由系统底层完成相应地功能,这个时候内核执行出在该进程的上下文空间中。内核一指系统内核本身,二指第三方软件以内核模块方式加载的驱动文件。 #内核理论基础 ##权限级别 系统内核层,又称零环,ring0,简称R0,与此对应的应用层叫3环即ring3.实际上是CPU的四个运
阅读全文

摘要:
##加密算法在软件保护中的作用 我们需要把软件保护的概念和范围扩大一些,不仅包括软件的注册激活系统、软件的防逆向和防破解机制,还包括对一个软件或应用所涉及的所有数据的安全保护。 软件保护方案非常多,技术上的实现方法更是多种多样,有的是软件作者自己设计的,有的采用商业软件保护方案。一个成熟、健壮、安全
阅读全文

摘要:
####4.攻击RSA保护 一般先通过跟踪分析得到n,再将n因式分解,求出私钥d。 ###ElGamal公钥算法 安全性依赖于在有限域上计算离散对数的困难性。 ####1.算法原理 ####2.算法在加密上的应用 ###DSA数字签名算法 尽管对DSA算法的工具还在继续,但一直没有充分的证据证明其安
阅读全文

摘要:
###BlowFish算法 这是一个64位分组及可变秘钥长度的分组密码算法,非专利。 ####1.算法原理 给予feistal网络(替换/置换网络的典型代表),加密函数迭代执行16轮。分组长度为64位。秘钥长度可32到448位。算法由两部分组成,分别是秘钥扩展部分和数据加密部分。每一轮由一个秘钥相关
阅读全文

摘要:
现有的系列号加密算法大都是软件开发者自行设计的,大部分都相当简单。此外还有很多成熟的算法可以使用,例如密码学中一些强度比较高的算法。 ##单向散列算法 单向散列算法也称hash(哈希)算法,是一种将任意长度的消息压缩到某一固定长度的函数,其过程不可逆。Hash函数可用于数字签名,消息的完整性测试,消
阅读全文

摘要:
前面几天过年去了,直接他妈摆了小半个月,要死,最近继续之前的进度。 ##警告窗口 Nag的意思是烦人。Nag窗口是软件设计者用来不时提醒用户购买正式版本的窗口。 去除Nag窗口常用的办法有三个:1.修改程序的资源2.静态分析3.动态分析 使用资源修改工具去除窗口是不错的方法。可以通过将可执行文件中警
阅读全文

摘要:
#序列号保护方式 ##序列号保护机制 软件验证序列号,其实就是验证用户名和序列号之间的数学映射关系。 ###1.将用户名等信息作为自变量,通过函数F变换之后得到注册码 这是非常不安全的,因为无论F有多么复杂,只要解密者把他从软件中提取出来就可以编制一个通用的计算注册码程序了。 ###2.注册码验证用
阅读全文

摘要:
####3.多重继承虚表 多重继承是指一个类同时继承多个父类。多重继承与单重继承相比,可以有多个父类。 可以看出main函数与单重继承无区别。在cderived构造函数中,首先按继承顺序调用两个基类的构造函数,然后执行自己的构造函数代码。 因为两个基类都有虚函数,在这种情况下编译器会为派生类生成两个
阅读全文

摘要:
###4.整数的取模 取模运算可以通过除法指令实现。一般的优化做法是将其转换成等价的位运算或者除法运算,再由除法运算进行优化。 ##虚函数 C++的三大核心机制是封装,继承,多态,而虚函数就是多态的一种体现。软件逆向中,难免遇到使用面向对象思想设计的软件,而虚函数就是在实际软件逆向过程中的一种还原面
阅读全文

摘要:
##数据结构 主要是对局部变量,全局变量,数组等的识别。 ###1.局部变量 局部变量是函数内定义的变量,存放的内存区域称之为栈区。生命周期就是从函数进入到返回释放。 函数在入口处申请了预留栈空间和局部变量空间,也就是sub rsp,30h。局部变量空间在高地址。在应用程序被编译成release版本
阅读全文

摘要:
###4.条件指令设置 条件指令的形式是SETcc r/m8,其中r/M8是表示8位寄存器或者单字节内存单元。 条件设置指令格局处理器定义的16种条件测试一些标志位。把结果记录到操作数当中。条件满足时,目标操作数为1,否则为0. 这里有一段代码。 如果运用条件设置指令 ###5.纯算法实现逻辑判断
阅读全文

摘要:
通过分析汇编代码来理解其代码功能,然后用高级语言重新描述这段代码,逆向分析原始软件的思路,这就是逆向工程。 #32位软件逆向技术 ##启动函数 首先被执行的是启动函数的相关代码,这段代码是由编译器生成的。启动函数就是对该运行库进行一个初始化。当所有的初始化操作结束后,启动函数会调用应用程序的进入点函
阅读全文

摘要:
##其他功能 ###1.图形化功能 这种模式比文本模式的可视性更好,用户更容易看清函数的代码流程。通过空格切换文本模式或者图形化模式。 ###2.修改可执行文件 使用IDA可以直接修改二进制内容。edit-patch program打开菜单再change byte和changeword菜单项以十六进
阅读全文

摘要:
##IDA调试器 IDA支持调试器功能,弥补了静态分析能力的不足。 ###1.加载目标文件 在Debugger-select debugger中可以根据当前文件类型选择调试器类型,如图所示 选择win32 debugger,就可以打开本机模式调试目标软件了。也如同以前讲的,还有另外一种调试方式,就是
阅读全文
