![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
逆向汇编、指令集
文章平均质量分 75
逆向相关的汇编语言、其他语言的指令集
大灬白
没有绝对安全的系统
展开
-
PE文件格式分析
PE文件格式一、MS-DOS头部DOS MZ头看个实例:DOS Stub看个实例:![在这里插入图片描述](https://img-blog.csdnimg.cn/20210317235647921.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L09ubHlvbmVfMTMxNA==,size_16,color_FFFFFF,t_70)二、PE文件头原创 2021-03-18 00:38:55 · 1065 阅读 · 0 评论 -
《逆向工程核心原理》读书笔记——第6章 汇编编写的exe程序入口
第6章一级目录6.1abex' crackme #16.1.1 开始调试6.3 将参数压入栈一级目录6.1abex’ crackme #1 调试前先运行abex’crackme #1这个程序,大致了解一下它。如图6-1所示,双击运行程序后弹出一个消息窗口,显示“Make me think your HD is a CD-Rom"消息。我刚开始并不理解这句英文。图6-1运行程序 消息的最后部分出现了“CD-Rom”这个词,我们只能根据它大致推测出前面的HD为HDD(Hard Disk Dri原创 2021-09-15 16:58:26 · 409 阅读 · 0 评论 -
《逆向工程核心原理》读书笔记——第4章 IA-32寄存器基本讲解
第4章 IA-32寄存器基本讲解4.IA-32寄存器1.通用寄存器2.段寄存器3.程序状态与控制寄存器4.指令指针寄存器4.IA-32寄存器 IA-32是英特尔推出的32位元架构,属于复杂的指令集架构,并且支持多种寄存器。下面列出了IA-32支持的寄存器类型。 以上寄存器列表中,我们先要学习基本程序运行寄存器的相关内容,这是程序调试中最常见的寄存器,是学习程序调试初级技术必须掌握的内容。后面学习中、高级程序调试技术时,我们将继续学习有关控制寄存器(Control registers )、内存管理原创 2021-09-13 16:02:56 · 940 阅读 · 0 评论 -
程序为什么开头总是PUSH EBP(栈帧)
子程序如何存取参数,对堆栈操作的寄存器有 ESP 和 EBP,而 ESP是堆栈指针,无法暂借使用,所以一般使用 EBP 来存取堆栈,假定在一个调用中有两个参数,而且在 push 第一个参数前的堆栈指针 ESP 为 X,那么压入两个参数后的 ESP 为 X-8,程序开始执行 call 指令,call 指令把返回地址压入堆栈,这时候 ESP 为 X-C,这时已经在子程序中了,我们可以开始使用 EBP 来存取参数了,但为了在返回时恢复 EBP 的值,我们还是再需要一句 push ebp 来先保存 EBP 的值,这原创 2020-09-07 10:54:37 · 6232 阅读 · 1 评论 -
第十七章-序列号生成算法分析-Part2
接下来我们分析Canasta 5.0这个CrackMe。Delphi是使用Pascal语言该CrackMe属于那种OK按钮开始不可用,当用户输入的用户名与序列号相匹配的时候才可以单击的例子。我们首先安装程序,然后用OD打开canasta.exe,程序停在:之后运行程序,打开About对话框,之后单击Enter License按钮:提示说只有当用户输入的用户名和序列号组合正确时,OK按钮才会变为可用。这样我们就没办法通过在GetDlgItemTextA等获取用户输入的文本的函数下断点的方式,找原创 2021-08-29 10:56:47 · 434 阅读 · 0 评论 -
第十六章-序列号生成算法分析-Part1
步骤:1、查看CrackMe程序信息2、使用OllyDbg加载CrackMe程序3、GetDlgItemTextA函数设置一个内存断点4、读取输入的序列号的位置5、输入的序列号的值6、输入的序列号计算的值保存在eax寄存器7、程序的计算逻辑8、计算输入的用户名9、验证输入的用户名字符串10、输入的用户名的值11、完整的用户名和序列号的比较逻辑12、用户名和序列号的注册机序列号是基于名称变化的,也就是说我们将讨论序列号生成算法。1、查看CrackMe程序信息先运行一下CrackMe程序:有File、原创 2021-08-26 22:30:41 · 1545 阅读 · 2 评论 -
汇编语言浮点数指令集
汇编语言浮点数指令集;////////////////////////////////////////////////////////////////////////////////;//// 浮点数载入指令;///////////////////////////////////////////////////////////////////////////////; 助记符 操作数 功能fld memory(real) ; 将存储器中的实型压人堆栈fild memory(integer) ;原创 2021-03-22 22:44:27 · 2970 阅读 · 0 评论 -
PE格式的定义头文件winnt.h
PE格式定义的主要地方位于我们的头文件winnt.h,这个头文件中几乎能找到关于PE文件的所有定义。 在很多编译器、调试器中都会带有这个头文件,如VC++6.0、codeblocks、Ollydbg等,在自己的电脑上一搜就有好多个。整个的头文件winnt.h代码太长了,文章放不下来,其中PE文件格式主要定义在image format部分:这部分的代码://// Image Format//#ifndef _MAC#include "pshpack4.h"原创 2021-02-23 19:56:23 · 1083 阅读 · 0 评论 -
Reverse Engineering challenge #87.(GCC编译器汇编代码)
This is one of the hardest ever exercises.What does this code do?Hint: the function has been copypasted from the guts of GCC, but in fact, it is present almost in all modern compilers, though, in different forms, but calculating the same value(s). Its f原创 2021-02-18 16:30:15 · 893 阅读 · 0 评论 -
.NET的MSIL和Java的字节码比较
阅读阅读https://blog.csdn.net/cnhk1225/article/details/53568996 然后回答问题: What does this code do?通过比较输入字符的ASCII码,来确定它是不是字母,如果输入的是字母则程序返回1,否则返回0。这是.NET框架下编译后的MSIL(微软中间语言):Optimizing csc .NET compiler from MSVS 2015 (/o switch), ildasm output: .method pu原创 2021-01-25 16:08:17 · 830 阅读 · 3 评论 -
各标志位含义
各标志位含义:CF(进位标志) =1 算术操作最高位产生了进位或借位 =0 最高位无进位或借位 ;PF(奇偶标bai志) =1 数据最低8位中1的个数为偶数 =0 数据最低8位中1的个数为奇数;AF(辅助进位标志) =1 D3→D4位产生了进位或借位 =0 D3→D4位无进位或借位;ZF(零标志) =1 操作结果为0 =0 结果不为0;SF(符号标志) =1 结果最高位为1 =0 结果最高位为0;OF(溢出标志) =1 此次运算发生了溢出 =0 无溢出。例如8位二进制数相加:1001 11原创 2021-01-20 18:21:52 · 2450 阅读 · 0 评论 -
汇编各种跳转指令
JE指令功能是在ZF标志位等于1时进行跳转,也就是(test等判断指令)结果为0(或者相等)的时候跳转。JNZ指令功能是在ZF标志为0转移,就是结果不为零(或不相等)则转移。汇编指令对应的机器码作用JZ/JE74Z=1,为零/等于则跳转JNZ/JNE75Z=0 ,不为零/不等于则跳转通常上一条指令可能是:sub eax,1在eax=1时,eax-1=0,ZF标志位置1test eax,eax在eax为0时,eax&eax=0,ZF标志位置1cm原创 2021-01-20 16:54:01 · 10310 阅读 · 0 评论 -
汇编语言数据处理长度(X ptr指令解析)
文章目录(1)通过寄存器名指明要处理的数据的尺寸。(2)在没有寄存器名存在的情况下,用操作符 X ptr 指明内存单元的长度,X在汇编指令中可以为byte、word或dword(3) 其他方法8086CPU的指令,可以处理两种尺寸的数据,byte和word。所以在机器指令中要指明,指令进行的是字操作还是字节操作对于这个问题,汇编语言中用一下方法处理。(1)通过寄存器名指明要处理的数据的尺寸。例如:下面的指令中,寄存器ax、bx等指明了指令进行的是字操作:mov ax,1mov bx,ds:[原创 2021-01-14 15:07:33 · 1768 阅读 · 1 评论 -
Microsoft C/C++的固定大小整数类型
文章目录(1)__int8、__int16、__int32、__int64(2)int8_t、uint8_t、int16_t、 uint16_t、int32_t、 uint32_t、int64_t、uint64_t(1)__int8、__int16、__int32、__int64__int8、__int16、__int32、__int64这些是Microsoft 专用,在头文件stdio.h中声明:Microsoft C/C++ 功能支持固定大小整数类型。您可以使用 __intn类型说明符声明 8 位原创 2020-12-25 22:01:00 · 1285 阅读 · 0 评论 -
实践除法函数的汇编代码的返回值
文章目录div函数有返回值的情况div函数没有返回值的情况div函数有返回值的情况先用Visual C++写一个C语言程序:#include<stdio.h>int div(int a , int b){ return a/b;}int main(){ int result = div(10,5); printf("test!\n"); printf("%d\n",result); return 0;}用OD打开动态调试,找到div函数,0x5和0xA先后入栈然后原创 2020-12-02 15:37:21 · 1664 阅读 · 2 评论