精华内容
下载资源
问答
  • Relyze汉化版是一款功能强大二进制编程软件,是一个交互式软件分析,Relyze能够让你更加充分地了解一个二进制文件的组成和利用丰富的元数据分析!这里提供Relyze最新版以及汉化补丁下载,需要的朋友可下载试试! ps...
  • 初识二进制软件破解

    千次阅读 2020-04-03 09:52:51
    通过此次实验可以大体了解软件破解的一些步骤,为二进制漏洞的学习打下基础认知。 环境和工具 系统环境:windows 10 工具:IDA、OllyDBG、LordPE、uedit64 知识铺垫 实验 1.首先编写一个简单的密码验证的可执行文件...

    简介

    实验的思路来自《0day安全:软件漏洞技术分析》第一章。此次实验的内容为如何破解一个简单的密码验证功能的exe文件。通过此次实验可以大体了解软件破解的一些步骤,为二进制漏洞的学习打下基础认知。

    环境和工具

    1.系统环境:windows 10
    2.工具:IDA、OllyDBG、LordPE、uedit64
    工具和实验源码下载:
    链接:https://pan.baidu.com/s/1qh91yRkWP4oWW7QBe-2QGQ
    提取码:rgo7

    知识铺垫

    想了一下,还是觉得把相关的知识点嵌入在实验环节里比较好,单独写在这翻来翻去也是比较麻烦的。

    实验

    1.首先编写一个简单的密码验证的可执行文件。语言为C++(其他语言也可以,只要能生成exe)。

    #include <stdio.h>
    #include <string.h>
    
    #define PASSWORD "123456"
    
    int verify_password(char *p){
    	int flag;
    	flag = strcmp(p,PASSWORD);
    	return flag;
    }
    
    int main(){
    	char password[10];
    	while(1){
    		printf("input your password:\n");
    		scanf("%s",password);
    		if (verify_password(password)==0){
    			printf("TRUE\n");
    		}else{
    			printf("FALSE\n");
    		}
    	}
    	return 0;
    }

    之后生成pwn.exe文件,点击运行测试。

    exe
    当输入123456时返回TRUE表示密码正确,其他字符返回FALSE

    2.使用IDA对exe文件进行反编译。File->open->选择exe。之后点击确定,结果如下图,会看到一串汇编代码。

    IDA
    在左侧一栏里找到_main函数。(因为在本例中,判断密码是否正确的条件在main函数中,所以要先找_main,如果判断语句写在了verify_password方法中,则先找_verify_password,_verify_password就在_main上面)点击空格键,可以跳转到类似流程图的模式。

    在这里插入图片描述

    即使不懂汇编语言也不影响理解,可以看到在jnz short loc_4014CD下面有两个分支,分别对应着判断为truefalse的操作。而jnz的意思为jump if not zero,非零跳转,与其相反的是jzjumb if zero,零即跳转。而是0还是1是由前面的test eax, eax来计算得出的,后面会讨论这个问题。

    3.我们使用IDA的目的一是要找到判断语句的跳转代码,二是要找到这个判断语句所在的虚拟内存地址(VA)。按空格返回汇编代码模式,可以看到jnz short loc_4014CD的虚拟内存为0x004014BD(如下图)。
    要注意的是,这个地址是虚拟内存内的地址,如果只是在内存里将jnz short loc_4014CD改为jz short loc_4014CD,则仅仅是运行的进程被更改,存在硬盘的程序是没有发生变化的。(操作系统知识点:当一个程序运行时,会创建一个进程,并将自身的代码放进程内然后在内存中运行。)
    DIA

    4.接下来就分别演示通过修改内存和修改硬盘内程序两种方式达到实验目的。(如果仅仅是想到的密码的话,直接查看exe内的字符串就能看到123456,但这不是我们学习的目的。)
    先来尝试内存破解。要使用到OllyDBG工具。打开,file->open->pwn.exe文件。此时也打开了pwn.exe文件控制台,不要关闭,关闭则pwn.exe进程结束。

    OLL

    按ctrl+G键,输入之前我们得到的jnz short loc_4014CD的VA地址,即0x004014BD

    OLL

    按F2添加断点,之后按F9运行,在控制台输入错误的密码,回车。此时在右上角一栏可以看到如下(前提是你的环境和代码跟本例是一样的,即使不一样其实思路也是一样):
    OLL
    回到我们之前提到的test eax, eax,eax就是一个寄存器,此时它存的值为00000001,test的意思就是逻辑与操作,并将结果存在ZF(零标志位)中,即00000001&00000001=1,运算结果为1,非零,那么ZF=0,而后面的jnz是结果不为0则跳转,因为ZF=0表示运算结果不为0,所以跳转。好吧,我承认写这篇文章整理思路的时候绕进去了╭(╯^╰)╮,如果只是为了好理解可以理解成test运算后结果不为0,所以jnz跳转,这样也是可以,但总有种歪打正着的感觉。(你可能想到了第二层,但是我却已经第五层了,就是这种感觉。)

    补充:如果你一步一步执行,会发现 EAX寄存器的值一开始是我们输入的‘asd’这个错误密码,后来在_strcmp方法中被置为了00000001。_strcmp就是代码里的 strcmp()方法。

    现在我们已经知道接下来要发生的事情了,jnz跳转到FALSE的语句上。其实在OllyDBG已经有相关的提示了。如图左下角Jump is taken,下面是跳转的地址,为pwn进程的0x004014CD的VA地址。

    在这里插入图片描述
    此时我们继续按F9放行,查看控制台。控制台返回了FALSE,我们的目的是要返回TRUE。
    在这里插入图片描述

    首先。将jnz改成jz,会发现系统将jz改成了je,但是不影响,因为两个方法功能上是一样的。如下图,要注意前面的74 0E是对应的16进制机器语言。改完之后,在控制台输入和之前一样的密码即asd,再次按F9放行程序。

    在这里插入图片描述
    结果显示此次为TRUE。
    在这里插入图片描述

    5.上面那个是内存修改的方式,这次是直接修改exe文件内的机器语言来实现我们的目的。在这之前,我们需要计算jnz这个操作命令在exe的位置。之前我们已经得到了运行时它的进程在内存的虚拟地址,即0x004014CD。下面要补充一些知识点,对PE文件格式在硬盘和内存比较熟悉的同学可以直接跳过。

    如下图,windows 10操作系统下,内存块是以0x00001000为单位分割的,而硬盘是以0x00000400为单位进行分割的。而且代码是存放在exe文件中.text段内,也就是说我们所需要的 jnz就存放在.text中。现在已知 jnz在虚拟内存的地址为0x004014CD,而exe文件的虚拟地址基址均为0x00400000,如果要计算出在硬盘的格式,应为0x004014CD-0x00400000-虚拟内存地址文件头大小 +硬盘地址文件头大小

    PE

    现在我们需要虚拟内存地址文件头的大小和硬盘地址文件头的大小,我们可以用LordPE工具来查看。PE Editor -> Sections。如图可以看到我们所需要的两个数据。第一个是虚拟内存的,第二个是硬盘的。

    LordPE

    于是就可以计算出硬盘内的jnz地址。

    0x004014CD-0x00400000-0x00001000+0x00000400=0x000008BD

    得出地址为0x000008BD,接下来使用uedit64工具进行16进制编辑,按Ctrl+G,输入刚刚算出的地址。
    uedit64
    根据之前的测试,我们知道jnz short loc_4014CD的16进制机器语言对应的是75 0E,再看看上图,说明我们的计算没有错误,将75改为74(74就是jz),保存。

    测试一下,成功。

    test

    总结

    1.了解了IDA、OllyDBG、LordPE、uedit64工具的简单实用
    2.初步认识了软解破解技术的思路。
    3.掌握了PE文件格式在内存和硬盘的计算方法。

    展开全文
  • 计算机容量和二进制以及编程语言

    千次阅读 2019-07-02 10:29:36
    计算机的容量单位中最基本的是位,而在计算机中位一般是用“0”和“1”来表示位的,也就是我们所说的二进制数,但是最小的存储容量单位是字节(一字节等于八位),下面是关于计算存储容量单位的介绍: 1位 = 1 bit 8...

    1.计算机容量。

    计算机的容量单位中最基本的是位,而在计算机中位一般是用“0”和“1”来表示位的,也就是我们所说的二进制数,但是最小的存储容量单位是字节(一字节等于八位),下面是关于计算存储容量单位的介绍:

    1位 = 1 bit

    8bit = 1byte = 1字节

    1024bytes = 1kbytes = 1kb

    1024KB = 1 Million Bytes = 1MB = 1兆

    1024MB = 1 Giga Bytes

    1024GB = 1TB

    1024TB = 1PB

    2.二进制。

    是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要以补码的形式存储的。

              512            256             128               64              32              16              8                 4              2               1

                 1                1                 1                  1                1                1               1                1              1                1

    规则:①第n位的数  =   2^(n-1);②第n位数 = 前(n-1)位之和 + 1

    注:可以用烽火狼烟进行说明。

    3.编程语言的介绍。

    (1)什么是编程语言。

           定义好一套与计算机交互的语法规则,这套规则就可称为一门编程语言。

           我们听不懂日语是因为不懂日语的语法规则。

            学编程  ===  学语法规则

           编程能干什么:一堆指令的组合 ==》软件

    (2)比较流行的语言介绍。

    约有600多种编程语言与计算机交互:

          C = 各个操作系统的开发语言 1973

          C++ = C++是C语言的加强版   ,1983年,贝尔实验室的Bjarne Stroustrup在C语言基础上推出了C++[1]  。 C++进一步扩充和完善了C语言,是一种面向对象的程序设计语言。

           java = 1995 由sun 公司开发出来,java 虚拟机 支持跨平台 

           php = 1994, 纯web开发语言, 1994 Netscape 浏览器诞生了

           python =  1989年诞生, 刚开始被做为脚本语言, 开发小任务, 跟linux同年诞生,89,1991,苏联解体, 1991年正式版本

           C# = c sharpe =C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司 .NET windows网络框架的主角。

           ruby = Ruby, 一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 语言。由 Ruby 语言本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的 Ruby 语言替代品。Ruby的作者于1993年2月24日开始编写Ruby,直至1995年12月才正式公开发布于fj(新闻组)。因为Perl发音与6月诞生石pearl(珍珠)相同,因此Ruby以7月诞生石ruby(红宝石)命名。
                                Ruby on rails web框架 

            perl = Unix平台上开发出来的语言,做文字处理非常强大, 可以写出没人能看懂的代码

            shell = 脚本语言, 简单易学,基于unix,linux, 做一些简单的系统管理任务, 运维人员必学

            scalar = Scala是一门多范式的编程语言,一种类似java的编程语言[1] ,大数据开发

            erlang = 是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信,函数式编程

            go ===Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。

            javascript = 是当下使用最为广泛的语言,主要写前端的语言,
                                                nodejs =后端 全栈式的语言

            vb = 微软的脚本语言,bat脚本

            lua = nginx 的脚本语言, ngnix 是时下最nb web服务器

    (3)编程语言的分类。

           ①机器语言:直接用二进制编写程序,直接操作硬件。

                           优点:执行效率高。

                           缺点:开发效率低。

           ②汇编语言:用英文标签取代二进制指令,本质还是在直接操作硬件

                            优点:相对于机器语言的开发效率要高。

                            缺点:执行相对于机器语言要低。

           ③高级语言:直接用人能理解的语言跟语法风格来编写程序,程序员无需再去考虑复杂的硬件操作问题是我们用高级                                         语言编写的程序归根结底还是要给计算机去执行,这就涉及到一个翻译的过程要把人用高级语言编写的                                         程序翻译成计算机所能理解的二进制指令才执行,按照翻译方式的不同,高级语言又分为两大类:

                    编译型:C

                            优点:执行效率比解释型快。

                            缺点:开发效率不如解释型。

                     解释型:Python

                            优点:开发效率比编译型高

                            缺点:执行效率比编译型慢

    执行效率再快也要受限于网速,于是我们现阶段需要优先考虑开发效率。

                                      

                                   

    展开全文
  • 二进制加、减法编程实验

    千次阅读 2018-09-21 20:53:57
    上机实验03 二进制加、减法编程实验 一、实验要求和目的   1.熟悉汇编语言二进制多字节加法基本指令的使用方法;  2.熟悉汇编语言二进制多字节减法基本指令的使用方法;  3.掌握汇编语言编程的一般结构。...

    上机实验03 二进制加、减法编程实验

    一、实验要求和目的

            

    1.熟悉汇编语言二进制多字节加法基本指令的使用方法;

             2.熟悉汇编语言二进制多字节减法基本指令的使用方法;

             3.掌握汇编语言编程的一般结构。

     

    二、软硬件环境

     

             1.硬件环境:微机CPU 486以上,500MB以上硬盘,32M以上内存;

             2.软件环境:装有MASM 5.0、DEBUG、LINK和EDIT等应用程序。

     

    三、实验涉及的主要知识单元

             1、二进制加法基本指令

    (1)ADD指令

    格式:ADD DST,SRC

    该指令把源操作数(SRC)指向的数据与目的操作数(DST)相加后,将结果放到目的操作数(DST)中,所执行的操作:(DST)ß(SRC)+(DST)

    SRC和DST不能同时为存储器操作数和段寄存器,同时SRC和DST的数据类型要匹配,要同是字节或字。受影响的标志位有:OF,SF,ZF,AF,PF,CF。

    (2)ADC指令

    格式:ADC DST,SRC

    所执行的操作:(DST)ß(SRC)+(DST)+CF     了解清楚进位是怎样加的

    该指令把两个操作数(SRC和DST)相加以后,再加上进位标志CF,将结果放到目的操作数(DST)中。受影响的标志位有:OF,SF,ZF,AF,PF,CF。ADC指令多用于多精度数据相加。

    2、二进制减法基本指令

    (1)SUB指令

    格式:SUB DST,SRC

    所执行的操作:(DST)ß (DST)-(SRC)

    该指令把源操作数(SRC)指向的数据与目的操作数(DST)相减后,将结果放到目的操作数(DST)中,SRC和DST不能同时为存储器操作数和段寄存器(,同时SRC和DST的数据类型要匹配,要同是字节或字。受影响的标志位有:OF,SF,ZF,AF,PF,CF。

    (2)SBB指令

    格式:SBB DST,SRC

    (DST)ß (DST)-(SRC)-CF     了解清楚进位是怎样减的

    该指令把两个操作数(SRC和DST)相减以后,再减去CF,将结果放到目的操作数(DST)中。受影响的标志位有:OF,SF,ZF,AF,PF,CF。SBB指令多用于多精度数据相加。

     

    3、多精度数相加程序设计示例

    将两个双字长度的数分别相加并将结果存放在result中。

    首先进行题目分析:

    (1)如何存放多精度数?

    多精度数的存放有两种方式,高地址优先(如1234H,5678H表示56781234H)和低地址优先(如1234H,5678H表示12345678H),具体的存放方式由用户根据自己的习惯选择。在这里我们使用了高地址优先的存储方式。

    (2)分析程序设计

    由于汇编语言的ADD,ADC,SUB,SBB指令都不支持两个操作数都是存储器操作数的情况,因此将一个操作数的低字放到寄存器AX中,高字放到寄存器DX中分别完成高字部分的加法,高字部分的带进位加法。

    (3)具体程序设计

    DATA SEGMENT
    
    DATA1       DW          5311H,8A13H  ;表示数据8A135311H
    
    DATA2       DW  4783H,9526H   ;表示数据95264783H
    
    RESULT     DW    2 DUP(?)        ;存放多字节加法的结果
    
    DATA ENDS
    
    
    
    CODE SEGMENT
    
      ASSUME CS:CODE,DS:DATA
    
    START:
    
        MOV AX,DATA
    
        MOV DS,AX
    
        MOV AX,DATA1
    
        MOV DX,DATA1+2
    
        ADD AX,DATA2   ;低字部分相加
    
        ADC DX,DATA2+2      ;高字部分带进位相加
    
        MOV RESULT,AX       ;存放低字部分相加结果
    
        MOV RESULT+2,DX  ;存放高字部分相加结果  
    
    CODE ENDS

      END START单步运行调试上面的程序,理解上面程序是如何实现长度为2字的两个数据相加的。改变DATA1DATA2的值再单步运行,观察程序运行的过程以及对标志位的影响。理解该程序后,试绘制出该程序对应的流程图,并完成下面的内容。

     

     

    四、实验内容与步骤

    1、实验内容

    (1)编写程序,实现长度为2字的两个多精度数相减。

    (2)编写程序,实现一个长度为3字的多精度数和一个长度为2字的多精度数相加减。

    2、实验步骤

    (1)预习多精度数加减法基本知识,根据实验内容,画出流程图;

    (2)利用EDIT或其他编辑软件,编写汇编源程序,取名为“ch2ex1.ASM”、“ch2ex2.ASM”。

    (3)汇编、连接该源程序,产生“ch2ex1.EXE”、“ch2ex2.EXE”文件;

    (4)对“ch2ex1.EXE”和“ch2ex2.EXE”文件进行调试运行:利用DEBUG的T命令或G命令和D命令查看数据区的加减法结果是否正确。

    五、实验要求与提示

    1. 实验要求

        (1)画出各程序流程图;

        (2)列出程序清单,加上适量注释;

        (3)回答思考问题;

    (4)记录实验结果。

     

     

    六、作业提交

    把绘制的流程图、编写的源代码(两个:(1)实现长度为2字的两个多精度数相减;

    (2)实现一个长度为3字的多精度数和一个长度为2字的多精度数相加减)放在word文档里,并提交到教育在线系统。

     

     

    展开全文
  • 编程修改BIN等二进制文件

    千次阅读 2009-12-02 23:39:00
    这些都是利用编程的手段访问解析二进制文件.都是对二进制文件进行操作.我们获得的手机或者其他嵌入式设备的软件,常常都是一些扩展名为BIN的文件,这些文件就是二进制文件.对这类二进制文件的写操作需要慎之又慎,一着...

    在此之前,我曾经写过,把铃声,图片等资源转化为数组数据,也曾经写过把数组数据转为图片和声音.在某篇文章中,也曾经写了从BIN文件中提取图片等信息.这些都是利用编程的手段访问解析二进制文件.都是对二进制文件进行操作.

    我们获得的手机或者其他嵌入式设备的软件,常常都是一些扩展名为BIN的文件,这些文件就是二进制文件.对这类二进制文件的写操作需要慎之又慎,一着出错,就可能导致BIN文件再也无法使用.

    我曾经写了一个修改软件版本号的工具,主要用来修改MTK软件的版本号.一般来说,为了软件管理和维护方便,我们每次修改发布新软件,都应该相应的升级软件版本号,有时软件版本号忘记了升级,往往需要重新NEW一个软件,费时又费力.还有就是有一些客户,软件相同,也使用相同的SP,只是客户USERID不同,这时也可以使用版本管理工具根据原始软件修改替换ID生成新的客户软件.所以研究BIN,修改BIN,提高工作效率,对于现阶段减轻软件工程师负担还是一些意义的.

    闲话就不说了,主要算法就是:

    1.把BIN文件读入内存数组中主要使用CFILE类的read方法

    2.查找需要替换的字串,主要使用memcmp

    3.替换新的字串,主要使用memcpy

    4.把替换后的数组写入文件,主要使用CFILE类的write方法

     

    CFile的方法直接调用,不再赘述.

    查找替换字串的函数如下,由于二进制数据操作,无法使用strlen获取长度,所以必须提供长度,由于BIN文件有对齐处理,如果使用不同长度字串替换时如果不考虑对齐会导致BIN文件失效,所以限制OLD和NEW串必须长度一样,当然如果要使用长度不等的字串互相替换也是可以的,一是考虑位的对齐,二是考虑替换后不超出14M:
    int StrReplace(char *basestr, int basestrlen, char *oldstr, int oldstrlen, char *newstr, int newstrlen)
    {
    int count = 0;

    char *p=basestr;
    if (oldstrlen != newstrlen)
    {
    return -1;
    }
    if(basestrlen < oldstrlen)
    {
    return -2;
    }

    while(basestrlen-- > 0)
    {
    if(memcmp(p,oldstr,oldstrlen) != 0)
    {
    p++;
    }
    else
    {
    memcpy(p,newstr,newstrlen);
    p += newstrlen;
    count ++;
    }
    }
    return count>0?0:1;
    }

    为该程序创建一个对话框,包括三个EDIT控件,第一个EDIT显示文件名字,第二个显示要替换的字串,第三个显示新的字串,分别绑定三个CString变量,m_FileName , m_OldStr, m_NewStr,三个按钮,分别对事件打开OnOK(), 替换OnOk2(),和退出按钮:

    按钮事件分别为:

     //打开文件

     void CModifyBINDlg::OnOK()
    {
    // TODO: Add extra validation here
    static char BASED_CODE szFilter[] = "All Files(*.*)|*.*|Bitmap Files (*.bmp)|*.bmp||";
    CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilter, NULL);

    CString strPath,strText; //声明变量
    if(dlg.DoModal() == IDOK) //判断是否按下"打开"按钮
    {
    strPath = dlg.GetPathName(); //获得文件路径
    CModifyBINDlg::SetWindowText(strPath); //显示文件路径
    UpdateData(TRUE);
    m_FileName = strPath;
    UpdateData(FALSE);
    }

    //CDialog::OnOK();
    }

     //替换字串并生成新文件

    void CModifyBINDlg::OnOk2()
    {
    // TODO: Add your control notification handler code here
    CString olds, news;
    unsigned char *buffer;
    long filelen;
    CString newfilename;

    UpdateData(TRUE);
    olds = m_OldStr;
    news = m_NewStr;
    UpdateData(FALSE);

    CFile file(m_FileName,CFile::modeRead|CFile::typeBinary); //打开文件
    filelen = file.GetLength();

    buffer = (unsigned char *)malloc((filelen+1)*sizeof(char));

    file.Read(buffer,file.GetLength());
    file.Close(); //关闭文件
    if (olds.GetLength() != news.GetLength())
    {
    AfxMessageBox("查找字串与新字串长度不等");
    }
    if (StrReplace((char *)buffer, filelen, (char *)(LPCTSTR)olds, olds.GetLength(),
    (char *)(LPCTSTR)news, news.GetLength()) != 0)
    {
    free(buffer);
    AfxMessageBox("没找到替换字串");
    return;
    }
    CFile file2;
    file2.Open(GetPath(m_FileName)+"new_"+GetFileName(m_FileName),
    CFile::modeWrite|CFile::modeCreate|CFile::typeBinary);
    file2.Seek(0,CFile::begin);
    file2.Write(buffer,filelen);
    file2.Close();
    AfxMessageBox("替换完成");
    free(buffer);
    }

     在替换生成新BIN时,调用了两个解析路径获得文件名和目录的函数:

    //从路径中分离文件名:

    CString GetFileName(CString pathname)
    {
    for( int i=pathname.GetLength()-1; i>=0; i-- )
    {
    if( pathname[i]=='//' )
    {
    //这里倒着查,查到倒数第一个反斜框,退出
    break;
    }
    }
    return pathname.Mid( i+1 );
    }
    //从路径中分离路径名(去除文件名):

    CString GetPath(CString pathname)
    {
    int i = 0, j;
    while( i<pathname.GetLength() )
    {
    if( pathname[i]=='//' )
    {
    //这里偷一下懒,反正咱的机子速度快,从第一个反斜杠找到最后一个,且取最后一个
    j = i;
    }
    i++;
    }
    return pathname.Left( j+1 );
    }

     

    展开全文
  • 想让软件工程师去接受二进制,算是勉勉强强,如果让他去接受十六进制,可能就有些为难他了。因为大部分软件工程师平时根本就不接触二进制和十六进制,他们唯一的进制就是十进制。 但是,硬件是底层的玩意,偏偏只...
  • 二进制需要哪些书籍

    千次阅读 2018-03-27 21:53:23
    中文版》《Python核心编程》 《Python灰帽子-黑客与逆向工程的python编程之道》《Python自动化运维:技术与最佳实践》《精通黑客脚本》学二进制没有一点系统知识真的好嘛?《深入理解Linux内核》《Linux内核源代码情....
  • 1. 文本文件与二进制文件的定义 大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上差异。 简单来说,文本文件是基于字符...
  • 二进制运算

    2016-09-01 20:49:13
    一:二进制运算   1.二进制的第一位数为0,则为正数,反之为负数 2.补数:取反+1 3.0没有补码 4.负数位表示的范围比正数+1 5.左移一位*2,左移两位2^2..... 6.首位为0:右移1位/2,右移二位/2^2....;首位为...
  • 二进制文件读写本人收集了一些技巧供大家参考,希望斑竹能多放一些时间。按字母或数字顺序排列列表框中的列表项. 将以下代码加入到你的程序中.
  • 摘要:关于极性器的变压,计算机中据都进制性端同极,正确的描述是,产生,线圈入时极性流从两个当电的同端流是指。西京张衡》中着重描写么以京赋压倒了什《东长安,编码表示宫殿礼制地势富庶。形态也是其他文化联系...
  • 二进制基本介绍 一、二进制基本描述 二进制就是一种数学进制,它里面只有0 和 1 二个基数。现在被大量的应用于计算机当中。【 计算机底层里用到的进制是二进制。 】 二、计算机为什么可以识别二进制 现代计算机都是...
  • 系统级编程lab6 第六次实验 四川大学软件学院 二进制炸弹
  • 二进制入门

    2021-01-17 16:42:11
    二进制安全是一种主要用于字符串操作函数相关的计算机编程术语。一个二进制安全功能(函数),其本质上将操作输入作为原始的、无任何特殊格式意义的数据流。对于每个字符都公平对待,不特殊处理某一个字符。 二. 为...
  • 1、十进制转换二进制十进制对2整除,得到的余数的倒序即为转换而成的二进制(十进制转换二进制示意图)转换函数#include#include#include#include#includeusing namespace std;void convert_10_to_2(int num){ vector&...
  • 例如,输入进制选择为“十进制”,而输出进制选择为“二进制”,则它就能完成十进制数到二进制数的自动转换。【基本要求】系统至少具有如下功能:(1) 至少支持十、二、八、十六进制之间的相互转换。(2) 与用户的交互...
  • 基于GTK的画图软件-输出到二进制文件中,基于GTK的画图软件-输出到二进制文件中
  • Linux 二进制分析

    千次阅读 2018-11-06 11:55:21
    二进制分析属于信息安全业界逆向工程中的一种技术,通过利用可执行的机器代码(二进制)来分析应用程序的控制结构和运行方式,助于信息安全从业人员更好地分析各种漏洞、病毒以及恶意软件,从而找到相应的解决方案...
  • 本系列文章用来记录我教刚上五年级的儿子编程相关课程的教学实录。
  • 编程软件开发 必须要掌握的一个知识点就是各不同进制之间的转换,特此记录下,加深印象。 二进制:由0和1组成的 八进制:0、1、2、3、4、5、6、7 十进制:0、1、2、3、4、5、6、7、8、9 十六进制:0、1、2、3、4、5、...
  • 软件编程的时候,会要用到进制转换,那么二进制怎么转换成八进制呢?接下来就为大家详细讲解一下,一起来看看吧!二进制转换为八进制方法:1、取三合一法,即从二进制的小数点为分界点,向左(向右)每三位取成一位...
  • 二进制文件比较工具

    热门讨论 2012-02-29 02:20:37
    软件可以作为分析帧封装的工具,比较两个文件二进制文件的区别。
  • 二进制安全学习路线

    千次阅读 多人点赞 2019-08-14 23:35:17
    本文作者:rkvir(二进制小组组长) 转自某推文,链接找不到了。...提起逆向工程也许还有人可以联想到软件破解,如果提起的是二进制安全,那么知道的人就真的是寥寥无几了。实际上二进制安全技术在20世纪...
  • linux二进制文件分析 “这个世界上十​​种人:懂二进制的人和不懂二进制的人。” Linux提供了丰富的工具集,可轻松进行二进制分析! 无论您的工作角色是什么,如果您在Linux上工作,了解有关这些工具的基础知识...
  • 二进制文件合并工具

    2018-12-26 01:31:39
    二进制文件合并工具,用于合并hex,bin文件,flash编程使用。
  • 常见的进制有二进制,八进制,十进制,十六进制,其转换方式如下: 二进制,逢二进一 十进制,逢十进一 八进制,逢八进一 十六进制,逢十六进一 二进制符号数的三种表示方式:原码、反码、补码 原码:在...
  • quartus软件设计实现8位二进制乘法器电路

    万次阅读 多人点赞 2018-03-25 10:40:29
    一、选题目的1、学会使用quartus软件设计电路及对其进行仿真,设计实现8位二进制乘法器电路。2、学习并掌握8位二进制乘法器的原理、设计、分析和测试方法。二、设计目标采用移位相加的方法实现8位二进制乘法器电路。...
  • 今天维护一个软件,发现如下的代码: private byte[] readDataBin(string filename) { FileStream fs= new FileStream(filename, FileMode.Open, FileAccess.Read); byte[] bytesToRead = new byte[fs.Length]; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 136,583
精华内容 54,633
关键字:

二进制编程的软件有哪些