01 2023 档案
摘要:
###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,就可以打开本机模式调试目标软件了。也如同以前讲的,还有另外一种调试方式,就是
阅读全文

摘要:
##FLIRT 这是一项用于库文件快速识别与鉴定技术。可以使IDA在一系列编译器的标准库文件中自动找出调用的函数。 ###1.应用FLIRT签名 一般反汇编软件对于各种开发库无能为力,只能给反汇编结果,无法给出库函数名称。而FLIRT可以在反汇编结果正确标示调用的库函数名称。同样许多反汇编器都有类似
阅读全文

摘要:
##数组 IDA有较强的数组聚合能力,可以将一串数据声明变成一个反汇编行,按数组的形式显示。例子如下 其中407030h指向一个数组,以下是未识别的数组。 我们可以通过打开数组排列调整窗口,来调整显示。 设置1*3后如下。 ##结构体 ###1.创建结构体 对于一些常见的文件类型,ida会自动加载其
阅读全文

摘要:
###4.提示窗口 下方提示窗口是ida的输出控制台,主要反馈各种信息。 ###5.字符串窗口 view-》opensubviews-》strings打开字符串窗口,显示的是从二进制文件中提取的一组字符串,双击窗口中的字符串,将会跳转到字符串所在地址。字符串窗口与交叉引用结合使用,就可以快速定位程序
阅读全文

摘要:
##AsmJit 一个以C++封装的完整的JIT汇编器和编译器,生成兼容x86和x64架构的原生汇编指令。 它与之前的开源库并不一样,他只是一个汇编器,与别的汇编方式也不同,有个例子。 可以见得指令都被封装成了类成员函数,通过调用函数的方式来编码。参数可以使用寄存器,内存操作数,也可以用占位符变量,
阅读全文

摘要:
这一章是静态分析技术。高级语言编写的程序一般有两种形式,一种是被编译成机器语言在CPU上执行,例如C++,机器语言与汇编语言相对应。因此可以将机器语言转化成汇编语言,这个就叫反汇编。另一种是一边解释一边执行,我们称之为解释性语言,例如visual basic3.0/4.0,java。这类语言变异的程
阅读全文

摘要:
###2.别名 执行的时候直接用内容替换原始操作数。别名有一种固定别名,另一种是自定义别名。 有10个固定别名,为 u9.在定义固定别名时要用r命令,同时要在字母u前面加一个. 用于自定义别名的命令有3个,分别是as,ad和al。as命令可以为内存中的一些字符串定义别名,ad用于删除别名,a
阅读全文

摘要:
##调试过程 WDG支持多种调试模式,既可以以打开,附加的方式调试应用,也可以分析Dump文件,还可以进行远程调试,内核调试。内核调试分为NET,USB,1394,COM和本地调试,前四种是双机调试,名称指明了双机间的连接方式。附加进程时的非入侵模式调试,Dump文件调试,本地内核调试都是非实时调试
阅读全文

摘要:
##表达式 调试中也经常需要查看内存地址或者反汇编地址,这些地址一般通过一些表达式参与计算来获得。其中复杂表达式由基本元素与“(”“)”“】”“【”“+”“——”“^”“|”等符号组合。MDG支持的表达式如下 ##调试 MDG支持多种调试,有之前学的启动一个进程,有附加到一个进程,还有调试DLL模块
阅读全文

摘要:
##加载程序 OllyDbg有两种方式加载目标程序调试,一种是通过CreatProcess创建进程,另一种是利用DebugActiveProcess函数将调试器捆绑到一个正在运行的进程上。 ###1.利用CreatProcess创建进程 直接按Open打开一个用于调试的进程。 也支持带参数的调试程序
阅读全文

摘要:
2.1OllyDbg调试器 OllyDbg界面 C窗口是最重要的窗口,绝大部分都要在这个窗口进行,有五个面板窗口,分别是反汇编面板,寄存器面板,信息面板,数据面板和栈面板。 1.反汇编面板窗口 从左到右分别是地址,十六进制的机器码,反汇编代码和注释。 2.信息面板窗口 在进行动态分析时,这个面板会显
阅读全文

摘要:
1.2文本字符 具体已经在王爽老师《汇编语言》中学习过。 本节主要介绍字符集和字节存储顺序。 ASC2与Unicode字符集 罗列了用十六进制数(Hex)和十进制(Dec)表示的部分常用的asc2值。 然后介绍了Unicode:是Asc2码的一个拓展,在windows中使用二字节进行编码,称为宽字符
阅读全文
