精华内容
下载资源
问答
  • C51智能反编译器 将HEX 文件 反编译成 C 语言 有时候用得到的哦 ,备份着吧! C51智能反编译器 将HEX 文件 反编译成 C 语言 有时候用得到的哦 ,备份着吧!
  • 51内核单片机智能反编译软件,可反编STC,做的比较好,基本上反编译后可i汇编和原来一样HEX机器码的
  • 51单片机下载工具,适用于stc个股型号单片机程序下载。
  • MCS-51智能反编译器 v1.0中文版(51单片机反编译工具)zip,MCS-51智能反编译器。可将51单片机的bin或hex文件反编译为汇编码。在写进了MCU的程序中,都是二进制的文件,如ROM和BIN文件,都是经过编译后生成的二进制可...
  • 单片机(WINDOWS版)反编译工具 单片机(WINDOWS版)反编译工具
  • hex文件反编译程序

    热门讨论 2010-07-21 10:58:08
    很好用的反编译软件!可以将hex文件进行反编译
  • 21ic下载_STC51单片机程序汇编查看器.zip
  • 单片机反编译工具.7z

    2021-07-20 14:05:51
    烧录档的汇编软件,有几个工具,简单的程序分析可以使用
  • C51智能编译器(破解单片机程序用) MCS-51 LINKER / LOCATER L51 V1.03 DATE 01/04/2005 MCS-51 LINKER / LOCATER L51 V1.03, INVOKED BY: L51 EXEC061.OBJ TO EXEC061.OMF RAMSIZE(128) INPUT MODULES ...
  • 这个程序没有实际用途,用来测试标号填写 在WINDOWS的命令行方式,也就是在DOS中运行 显示 Main Menu Assemble Dassemble Quit 键入a ,汇编 显示 ASM file: 键入文件名 xxx.asm 得到 xxx.hex文件 键入d ,...
  • 反编译的是STM32单片机的hex文件,请教几个问题 1、反编译后我怎么确认我原先C代码的主函数在哪儿? 2、我想查看调用打印信息的函数,发现没有函数调用过打印,只找到打印信息的字符串的地址? 3、反编译后这个...
  • 这里介绍一些使用 gcc + vscode 开发单片机程序的经验。(这里不解释 gcc 是什么) 环境准备 不好意思,我要开始砸 [传资源收费(币)] 的人饭碗了。 gcc 1. ARM 开发者官网Home – Arm DeveloperArm’s ...

    STM32单片机非常强大,大多数教程都是使用 keil 编译器,keil 是收费的而 gcc 是开源免费的。这里介绍一些使用 gcc + vscode 开发单片机程序的经验。(这里不解释 gcc 是什么)

    环境准备

    不好意思,我要开始砸 [传资源收费(币)] 的人饭碗了。

    gcc

    1. ARM 开发者官网 Home – Arm DeveloperArm’s developer website includes documentation, tutorials, support resources and downloads for products and technologies.https://developer.arm.com/

    ​ 

    ​ 

    ​ 

    ​ 

     

     我有个习惯:尽量使用免安装版软件,直接解压到软件安装目录中,添加环境变量即可使用,这样即使重装系统也不必重装软件。

    把 arm-none-eabi-gcc 的 bin/ 目录添加到环境变量 Path 中就算安装完成了。打开命令行执行

    arm-none-eabi-gcc -v

    显示出版本信息就说明 arm-none-eabi-gcc 可以使用了。

    make

    我使用的 make 是从 mingw-w64 中复制出来的。

    Mingw-w64 - GCC for Windows 64 & 32 bits [mingw-w64]http://mingw-w64.yaxm.org/doku.php方便单独下载 make:https://download.csdn.net/download/qq_33523299/33634450https://download.csdn.net/download/qq_33523299/33634450下载的 make 工具同样添加到环境变量 Path 中即可使用。

    vscode

    vscode 仅仅是个文本编辑器,没有它也能开发(txt 写代码,命令行编译)。

    Visual Studio Code - Code Editing. Redefinedhttps://code.visualstudio.com/#alt-downloads又是免安装版:

     

    软件目录下新建文件夹 data/ 可以使 vscode 完全不使用 C 盘空间,所有的缓存文件都会生成在 data/ 内。附我使用的 Vscode:

    https://download.csdn.net/download/qq_33523299/33635971https://download.csdn.net/download/qq_33523299/33635971

    已经安装了以下扩展程序:

    编译链接过程

     无话可说……

    创建空工程

     一个 ".vscode" 文件夹装一些配置,"boot" 装启动单片机的汇编文件,"cmsis" 装官方提供的源文件,"inc" 装头文件,"src" 装源文件,"output" 装输出文件,再来一个 makefile 一个链接脚本就完成了。完全没有多余的东西(txt 写代码,命令行编译的话可以删掉".vscode")。

    在 makefile 所在的目录执行 "make" 就编译好了。

    GitHub - bfuxd/stm32f103EmptyProject: stm32f103空工程实例stm32f103空工程实例. Contribute to bfuxd/stm32f103EmptyProject development by creating an account on GitHub.https://github.com/bfuxd/stm32f103EmptyProject这是完整工程(去掉了空文件夹,去掉了输出目录),其中的 makefile 支持 windows 和 linux 。

    GitHub - bfuxd/stm32f1Template: gcc 开发 stm32 单片机程序模板gcc 开发 stm32 单片机程序模板. Contribute to bfuxd/stm32f1Template development by creating an account on GitHub.https://github.com/bfuxd/stm32f1Template是模板工程,添加了一些基本功能。

    J-Link烧录和调试

    .vscode/launch.json 里写入

    {
    	// 使用 IntelliSense 了解相关属性。 
    	// 悬停以查看现有属性的描述。
    	// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    	"version": "0.2.0",
    	"configurations": [
    		{
    			"name": "Cortex Debug",
    			"type": "cortex-debug",
    			"cwd": "${workspaceRoot}",
    			"executable": "${workspaceFolder}\\output\\template.elf",
    			"request": "launch",
    			"servertype": "jlink",
    			"device": "STM32F103ZE",
    			"interface": "swd",
    			"preLaunchTask": "Compile"
    		}
    	],
    }

    .vscode/tasks.json 里写入

    {
        "version": "2.0.0",
        //每次执行都不启动一个新的控制台
        "presentation": {
            "reveal": "always",
            "panel": "shared", //"new",
            "echo": true
        },
        //设置环境变量
        "options": {
            "env": {
                //"Path": "%Path%;D:\\ProgramFiles\\MinGW64\\bin",
                "LOCAL_SRC_HOME": "${workspaceRoot}"
            }
        },
        //任务列表
        "tasks": [
            {
                "label": "Compile",
                "command": "make",
                "args": [],
                "group": {
                    "kind": "build",
                    "isDefault": true
                }
            }
        ]
    }

    安装 J-Link 驱动后,把 J-Link 添加到环境变量 Path 中,点击 F5 就能仿真了。

    还可以监视指定内存、变量、寄存器,反汇编指定函数 ……

    彻底告别 keil。

    展开全文
  •  应用区ROM_3: 针对单片机资源少的问题,在满足前面3个ROM分配后,剩余的空间才是应用程序真正能够使用的,因此系统架构师在前期设计的时候需要统筹定义好系统资源,以免系统存储资源冲突,当然为了系统能够平台化...

           单片机常规分为底层、驱动、应用,一般三层结构即可满足需求,下面捋一捋之间的定义和关系:

    一、底层:所谓底层,即和硬件打交道的,比如温度采集,DA输出,UART,CAN,以太网,LCD等等,都属于硬件操作范畴,行业统称为“板级支持包”(BSP),往往分工较细的公司这部份任务属于硬件组的工作,所需做到的就是"不用别人管里面怎么回事,你拿到接口就完了,硬件不关你啥事";

    二、驱动层:即Driver,驱动起到呈上启下的桥梁作用,对上为应用层提供有效数据,对下完成硬件初始化配置,有效数据提取等,这块工作一般由驱动工程师完成;

    三、应用层:即APP,例如跑个花样流水灯,显示一个处理过的图片,完成一些算法工作等,大部分逻辑性、策略性、业务性的内容往往都会体现再应用层里面。

           OK!单片机的三层定义介绍完毕,讲讲今天的重点,怎么把这些模块实现空间上的独立?

           我遇到过很多工程师,往往一个人把以上工作全部搞定,不可谓不强悍。But,这种模式遇到新项目将会面临重新再搞一遍,涉及驱动调整,底层调整,应用毫无疑问也需要调整,那么整个调整下来等于重新开发了,即使项目复用性很强,小小的动一个变量,一个函数,可能面临整个项目重新编译,时间上真的很浪费,更何况工程师的工资都不低,浪费的时间等于浪费了金钱

    展开全文
  • AVR反编译软件01

    热门讨论 2011-08-22 21:44:47
    如果能从AVR单片机中读出代码,这是个不错的反编译软件!
  • (5)目标代码及其地址是以注释的形式标注在每条指令后面,文件内容排列也非常整齐,既便于对程序的分析,又不影响直接将汇编所得到的汇编程序用于编译。 2. 缺点: (1)对于数据块的识别还不够真正智能,使用时...
  • 基于Unique ID的单片机程序加密系统 单片机唯一ID程序加密 单片机一般作为一个产品的逻辑中心,工作时一直在进行着逻辑判断与执行操作,相当于人类的大脑。单片机可以通过修改程序来控制外围电路的工作状态,从而...





    文章原始地址:http://feotech.com/?p=25




    基于Unique ID的单片机程序加密系统 单片机唯一ID程序加密

    单片机一般作为一个产品的逻辑中心,工作时一直在进行着逻辑判断与执行操作,相当于人类的大脑。单片机可以通过修改程序来控制外围电路的工作状态,从而改变产品的功能。如果一个产品具有单片机,那么它往往是这个产品的核心。而开发一款功能复杂且成熟的产品所需要的费用不低并且研发周期较长,一些个人为了某些原因,为了快速仿造竞争对手的产品,一般就原样照抄对方的硬件电路,但由于单片机内部有针对产品功能单独设计的程序,不能直接再市面上购买,所以就只能想办法通过特殊的解密方法将单片机内部的程序读取出来。将解密后读取出来的程序烧录在新的芯片中从而完成产品功能的抄袭。通过专用的设备和工具,利用单片机芯片设计上的硬件漏洞或软件缺陷,通过多种技术手段获取单片机内程序这叫做单片机解密或单片机破解。以不正当方式获得其他公司或个人的商业秘密,是一种常见的不正当竞争行为。单片机加密技术是对产品知识产权保护的一种技术手段。

    Unique ID加密原理

    当前市面上的单片机资源中大多数具有Unique ID,即每一个芯片内部均具有唯一的芯片ID号。不同的芯片厂家实现该功能的方式不同,一些用生产线的流水号,另一些是用晶圆的特性来生成ID。 利用Unique ID加密的方法流程如下:

    单片机一般作为一个产品的逻辑中心,工作时一直在进行着逻辑判断与执行操作,相当于人类的大脑。单片机可以通过修改程序来控制外围电路的工作状态,从而改变产品的功能。如果一个产品具有单片机,那么它往往是这个产品的核心。而开发一款功能复杂且成熟的产品所需要的费用不低并且研发周期较长,一些个人为了某些原因,为了快速仿造竞争对手的产品,一般就原样照抄对方的硬件电路,但由于单片机内部有针对产品功能单独设计的程序,不能直接再市面上购买,所以就只能想办法通过特殊的解密方法将单片机内部的程序读取出来。将解密后读取出来的程序烧录在新的芯片中从而完成产品功能的抄袭。通过专用的设备和工具,利用单片机芯片设计上的硬件漏洞或软件缺陷,通过多种技术手段获取单片机内程序这叫做单片机解密或单片机破解。以不正当方式获得其他公司或个人的商业秘密,是一种常见的不正当竞争行为。单片机加密技术是对产品知识产权保护的一种技术手段。

    Unique ID加密原理
    当前市面上的单片机资源中大多数具有Unique ID,即每一个芯片内部均具有唯一的芯片ID号。不同的芯片厂家实现该功能的方式不同,一些用生产线的流水号,另一些是用晶圆的特性来生成ID。 利用Unique ID加密的方法流程如下:

    A. 将单片机烧录程序A后上电运行程序,完成加密操作。
    B. 将单片机烧录程序最终程序B,该程序包含ID识别部分。 加密流程图如下:
    这里写图片描述

    • 程序A负责读取芯片内部的Unique ID,并进行加密运算。将运算的结果写入芯片内部的EEPROM。
    • 程序B是实现产品最终功能的程序,该程序其中加入了产品身份识别功能。该程序首次上电后将首先读取EEPROM数据,并进行与加密算法相同的逆向算法,将加密后的数据进行解密获得芯片Unique ID。将解密后的ID与当前芯片的ID进行比对,如果数据不同则判断为非法程序。

    加密算法

    为了防止破解者通过仿真的方式找到芯片ID信息,一般不宜直接存放ID号。而是经过相应的加密处理后写入存储器中。校验方式也不宜采用常见、简单的校验规则,应尽可能采用某些特殊的检验方式,使破解者不能迅速确定校验算法。
    加密的算法类似数学公式 Y=F(X) 其中Y为加密以后的数据,X为原始数据,而F则为加密算法。
    加密算法有很多种,本实验中采用简单的位移后取反的方式来进行数据加密。

    这里写图片描述
    最后将加密的数据存入EEPROM中,由于芯片的ID厂家不允许更改,这大大增加了破解难度,加强了对产品的保护。

    详细设计过程
    使用Unique ID对单片机程序加密功能的实现需要以下几点功能:
    ① 实验板1用于对程序加密实验。
    ② 将从实验板1中读取到的数据烧录到实验板2中,通过实验板上的LED状态验证程序加密是否成功。
    基于Unique ID的单片机程序加密分为2个程序,这2个程序是不同的。
    程序A:用于读取芯片硬件ID并进行算法处理,将处理后的数据保存到EEPROM中。
    程序B:用于将EEPROM中的数据读取出来并使用与加密相同的算法进行解密获得芯片ID,将解密后获得的ID与芯片本身的ID进行比较。比较结果只有2种可能,即为相同与不同,程序根据结果从而执行不同的操作如图所示;

    这里写图片描述
    实验中使用STM8S单片机作为硬件载体

    软件设计

    系统初始化函数选择了内部16MHz时钟源,1分频后系统总线时钟频率为16MHz。
    将GPIO与EEPROM擦写均进行了初始化配置。 函数代码如下:

    void SystemInit(void)
    {
        CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);    //总时钟源 使用内部时钟源1分频 16M/1分频 =16MHz
        Gpio_Init(); //单片机系统GPIO初始化 FLASH_DeInit();//存储数据的EEPROM初始化
        FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);// 默认的EEPROM写入时间
    }
    

    LED驱动程序

    根据硬件的电路原理图可以看出,LED连接到PE5引脚。采用灌电流驱动,当引脚为低电平时LED点亮,引脚为高电平时LED熄灭。上电后LED默认为熄灭状态,所以引脚初始化配置为高速输出模式高电平。函数代码如下:

    /*描述:MCU外围GPIO初始化*/
    /*输入:无*/
    void Gpio_Init(vod)
    {
        //功能引脚上电初始化,引脚初始化状态根据外部功能而定义//
        GPIO_Init(GPIOE, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST); //LED
    }
    

    LED的状态采用宏定义方式,直接控制IO管脚电平状态。 操作代码如下:

    /*LED操作宏定义*/
    #define LED_ON GPIO_WriteLow(GPIOE, GPIO_PIN_5); //点亮LED
    #define LED_OFF GPIO_WriteHigh(GPIOE, GPIO_PIN_5); //熄灭LED
    

    获取Unique ID程序

    STM8S105K4T6数据手册显示该芯片具有96bit Unique ID,96bit/8=12byte。存放ID的起始地址为0x48CD,从该地址读取12次,将芯片ID获取并存入数组。 函数代码如下:

    /*描述:获取芯片ID*/
    /*输入:存放芯片ID的数组*/
    /*输出:无*/
    /*参数:无*/
    void Get_ChipID(unsigned char *p)//Get chip ID
    {
        unsigned char i=0; for(i=0; i<12; i++) //读取12次
        {
            *p = *(u8*)(0X48CD+i); //将数据读出后进行存放
            p++;
        }
    

    获取Unique ID程序

    STM8S105K4T6数据手册显示该芯片具有96bit Unique ID,96bit/8=12byte。存放ID的起始地址为0x48CD,从该地址读取12次,将芯片ID获取并存入数组。
    函数代码如下:

    /*描述:获取芯片ID*/
    /*输入:存放芯片ID的数组*/
    /*输出:无*/
    /*参数:无*/
    void Get_ChipID(unsigned char *p)//Get chip ID
    {
        unsigned char i=0;
        for(i=0; i<12; i++) //读取12次
        {
            *p = *(u8*)(0X48CD+i); //将数据读出后进行存放
            p++;
        }
    }
    

    加密算法程序

    编码函数执行对Unique ID进行数据算法处理。实验中采用的算法为将存放Unique ID的数组进行左移三个元素后逐位取反。将编码后的数据存入另一个数组。
    编码函数代码如下:

    /*描述:对芯片ID进行编码处理*/
    /*输入:存放芯片ID的数组;存放芯片ID编码后的数组*/
    /*输出:无*/ /*参数:对输入数组左移三次后逐位取反*/
    void Encode(unsigned char *DataIn,unsigned char *DataOut)//对数据进行编码加密
    {
        unsigned char i;//数组数据左移次数 unsigned char j;//数据位移临时局部变量
        unsigned char DataSwap;//搬运数据用的临时变量
        unsigned char TempData[12];//数据处理交换变量数组
        for(i=0;i<12;i++)//数据数组交换
        {
            TempData[i] = *DataIn; DataIn++;
        }
        for(i=0;i<3;i++)
        {
            //数组元素左移操作
            DataSwap = TempData[0];
            for(j=0;j<11;j++) //数组左移搬运
            {
                TempData[j] = TempData[j+1]; } TempData[11] = DataSwap;
            }
        for(i=0;i<12;i++)
        {
            TempData[i] = ~ TempData[i] ; //对数组数据进行按位取反
            *DataOut = TempData[i] ; DataOut++;
        }
    }
    

    解密算法程序

    解码函数负责对从EEPROM中读取的数据进行解码,是编码函数的一个逆向算法处理。算法为将输入的数组(EEPROM数据)进行右移三个元素后按位取反。示意图如下:
    这里写图片描述
    函数如下

    /*描述:对从EEPROM读出的数据进行解码*/
    /*输入:存放编码数据的数组,存放解码数据的数组*/
    /*输出:无*/
    /*参数:数据右移三位后按位取反(算法)*/
    void Decode(unsigned char *DataIn,unsigned char *DataOut)
    {
      unsigned char i;//数组数据左移次数
      unsigned char j;//数据位移临时局部变量
      unsigned char DataSwap;//搬运数据用的临时变量
      unsigned char TempData[12];//数据处理交换变量数组
      for(i=0;i<12;i++)//数据数组交换
      {
        TempData[i] = *DataIn; DataIn++;
      }
      for(i=0;i<3;i++)//数据右移三次
      {
        //数组元素右移操作
        DataSwap = TempData[11]; 
        for(j=10;j>0;j--)//数组右移搬运
        {
          TempData[j+1] = TempData[j];
        }
        TempData[1] = TempData[0];
        TempData[0] = DataSwap;//最后一次搬运
      }
      for(i=0;i<12;i++)//对数组数据进行诸位取反
      {
        TempData[i] = ~ TempData[i] ;
        *DataOut = TempData[i];
        DataOut ++;
      }
    }
    

    数据写入EEPROM程序

    将编码处理后的数据写入EEPROM,存储器起始地址为0x000040A0,通过单字节写入。将12个字节全部写入EEPROM。函数代码如下:

    /*描述:EEPROM数据写入*/
    /*输入:数据源的数组*/
    /*输出:无*/
    /*参数:无*/
    void EEPROMWrite(unsigned char *p)
    {
      unsigned char i;//数据交换用局部临时变量
      FLASH_Unlock(FLASH_MEMTYPE_DATA); //解锁EEPROM,允许写入数据
      while( !(FLASH_GetFlagStatus(FLASH_FLAG_DUL)) );//等待EEPROM解锁完成
      for(i=0;i<12;i++)
      {
        FLASH_ProgramByte(0x000040A0+i, *p);//将数据写入EEPROM,写入存储起始地址为0x000040A0
        while( !( FLASH_GetFlagStatus(FLASH_FLAG_EOP)) );//等待EEPROM单次写入完成
        p++;
      }
      FLASH_Lock(FLASH_MEMTYPE_DATA); //锁定EEPROM
    }
    

    从EEPROM读出数据程序

    程序首先需要从EEPROM中读取加密后的数据,将数据保存到数组EncodeData中。程序代码如下:

    /*描述:读取芯片EEPROM数据*/
    /*输入:用于存放EEPROM的数组*/
    /*输出:无*/
    /*参数:*/
    void Get_EEPROMData(unsigned char *p)
    {
      unsigned char i=0; for(i=0; i<12; i++)
      {
        *p = FLASH_ReadByte(0x40A0 + i);//从EEPROM读取数据
        p++;
      }
    }
    

    数据比对程序

    数据比对函数负责将解密后数据与Unique ID两个数组的数据进行比对。该函数只有两个返回结果,数据完全相同与不同,返回不同的值。根据不同的返回值从而判断程序是否合法。函数代码如下:

    /*描述:将两个数据进行比对*/
    /*输入:要比对的数据A,要比对的数据B*/
    /*输出:比对结果 1:数据相同 0:数据不同*/
    /*参数:对数组进行按字节比对*/
    unsigned char IDCheck(unsigned char *a,unsigned char *b)
    {
      unsigned char i; unsigned char Flag;//比对结果标志 1:数据相同 0:数据不同
      Flag = 1; for(i=0;i<12;i++)
      {
        if( (*a) != (*b) ) { Flag = 0; } a++; b++;
      }
      return Flag;//返回值:比对结果标志 1:数据相同 0:数据不同
    }
    

    数据数组
    使用数组的存储芯片ID与编码加密后的数据。代码如下:

    /*数组定义*/
    unsigned char Chip_IDData[12]; //存放芯片
    Unique ID unsigned char EnCodeData[12]; //对芯片Unique ID编码加密后的数据
    unsigned char DecodeData[12]; //对芯片EEPROM解密后的数据
    

    A程序主函数代码
    本程序主要作用是将数据进行加密编码处理并将结果写入EEPROM, 程序的主函数调用上方的单元功能函数。

    /*描述:主函数*/
    /*输入:无*/
    /*输出:无*/
    /*参数:无*/
    void main(void)
    {
      SystemInit(); //系统初始化
      Get_ChipID(Chip_IDData); //获取芯片 ID并存储在数组
      Encode(Chip_IDData,EnCodeData); //编码运算处理
      EEPROMWrite(EnCodeData); //将编码数据写入
      EEPROM LED_ON; //写入完成后点亮LED
      while(1); //软件循环
    }
    

    运行该程序后,将读取到的芯片ID数据存入数组。通过内部编码算法函数将ID进行处理并写入EEPROM。程序运行流程图如图所示:
    这里写图片描述

    B程序主函数代码
    程序B作用为对EEPROM数据读取并进行解码处理后判断程序合法性。主函数代码如下:

    /*描述:Main主函数*/
    /*输入:无*/
    /*输出:无*/
    /*参数:无*/
    void main(void)
    {
      SystemInit(); //系统初始化
      Get_ChipID(Chip_IDData);//获取芯片自身ID Get_EEPROMData(EncodeData);
    
      //从EEPROM读取编码后的数据 
      Decode(EncodeData,DecodeData);//将编码数据进行解码 //将解码后的数据与当前芯片ID进行比对
      if(IDCheck(Chip_IDData,DecodeData))
      {
        //返回1 比对通过,芯片与ID身份识别通过
        LED_ON; //点亮LED
      }
      else
      {//比对失败 程序非法
        LED_OFF; //熄灭LED
        While(1); //死循环
      }
      while(1)
      {
        ; //程序正常执行循环
      }
    }
    

    解码程序为最终烧录到芯片中的程序,产品功能也是在次此结构下开发的。程序执行后会读取当前芯片自身的Unique ID与存储在EEPROM中的数据。将EEPROM中的数据进行解码后与Unique ID进行比对,当数据完全相同时判断程序合法并执行正常程序功能,当数据比对不相同后判断程序非法并执行相应操作。解码程序运行流程图如图所示:
    这里写图片描述
    系统测试
    这里写图片描述

    将运行B程序后的实验板1通过通过仿真器与电脑连接,将STVP切换到“Program Memory”选项卡后点击“Read curren tab of active sectors”按钮后读取数据。在菜单File->save中选择保存程序B。(模拟程序被解密)

    将读取的程序B烧录到实验板2中,观察LED的现象。
    烧录程序B后实验板1测试LED亮起,实验板2测试LED未亮起。
    这里写图片描述
    测试结果
    从实验中可以看到,实验板二虽然烧录了程序B,但是之前并没有运行过程序A的加密算法,所以程序识别出EEPROM解密后数据与芯片自身ID不匹配从而熄灭LED。
    本文所设计的系统已经通过上述过程的测试,可以满足对单片机程序加密的功能需求。

    当前加密系统中需要完善的部分
    程序中仅仅有1处判断程序合法性,一旦遭到反编译后容易被破解
    程序被判断为非法后没有保护操作,应加入强制擦除 Flash进行保护
    程序需要烧录2次来完成整个加密系统的流程. 应在程序中加入启动加密条件,实现一次程序烧录即可完成加

    展开全文
  • IDApro汇编程序教程

    2018-06-26 21:43:35
    IDApro汇编程序教程,详细介绍了IDApro工具汇编源代码的使用教程
  • 基于AVR MEGA64测量温度系统的全部源代码
  • 【工程化系列】逆向工程(反编译)

    千次阅读 2018-12-28 21:16:56
    DATE: 2018.12.28 文章目录1、参考2、反编译的概念3、常用的反编译软件 1、参考 https://blog.csdn.net/kakukemeit/article/details/12946079 ...2、反编译的概念 计算机软件反向工程(Reverse engineering)也称为...

    DATE: 2018.12.28



    1、参考

    https://blog.csdn.net/kakukemeit/article/details/12946079
    https://baike.baidu.com/item/%E5%8F%8D%E5%90%91%E7%BC%96%E8%AF%91/9932384?fr=aladdin

    2、反编译的概念

    计算机软件反向工程(Reverse engineering)也称为计算机软件还原工程,是指通过对他人软件的目标程序(比如可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,某些特定情况下可能推导出源代码。反编译作为自己开发软件时的参考,或者直接用于自己的软件产品中。
    反编译:机器码(汇编语言) -----> 高级编程语言
    但是通常不能把可执行文件变成高级语言源代码。

    3、常用的反编译软件

    • IDA PRO: https://blog.csdn.net/SoaringLee_fighting/article/details/82748617

    • Java反编译器 Java Decompiler

    • 逆向工程平台 radare2

    • 单片机反汇编 vAVRdisasm

    ---------------------------------------------THE END!-----------------------------------------------------------

    展开全文
  • Linux下51单片机编译烧录平台搭建…

    千次阅读 2017-04-21 10:48:23
    软件相关网站: SDCC - Small ...在linux下开发51单片机的简单方法 其次(附带IDE的环境): Linux下构建stc51单片机开发环境 安装:apt-get install mcu8051ide(文件很大,网速很慢,安装过程还
  • 用c51命令行编译HEX单片机文件

    千次阅读 2018-11-01 15:15:56
    刚开始学STC51单片机的开发,用Keil uVision4进行编辑和编译。Keil的IDE是使用工程方式组织,对于小弟初学并不是很方便。 每次做个试验都要建立一个工程,而且会出现一堆文件。 虽然电脑还可以,感觉启动IED比较慢...
  • 单片机的机器码的反编译

    千次阅读 2007-12-04 18:43:00
    应一个做硬件的同事的要求,他利用其他软件可以得到十六进制的机器码,希望做一个简单的软件,可以将机器码反编译成汇编指令。本来网上应该有很多这方面的软件。但他说这个很特别,找不到,于是给他做了一个小软件 ...
  • STC单片机程序下载原理与自动下载

    千次阅读 2020-04-10 18:39:28
    STC单片机程序下载原理和自动下载 一.stc单片机下载程序的原理 在stc单片机中有两个程序区:用户程序区和ISP监控程序区。 这是STC89C52单片机数据手册中的内容。 根据数据手册,我们可以知道,当冷启动或者对ISP_...
  • 控制脉冲形成的代码电平取过程中含有相应的延时二控制脉冲持续时间的代码持 续的时间时候常常和音乐的拍子有相关性。 最后在主程序中运行子程序通过读rom里面的数组来达到连续播放各种不同音调的音 ...
  • Cortex-M3 汇编器

    2016-09-26 06:38:05
    Cortex-M3汇编器,在STM32F10x系列上大量验证通过,VC2010自主编写的工具。生成的汇编代码使用IAR编译验证通过。
  • 1、聊一聊 今天推荐的歌曲没有其他理由,仅仅是因为好听! 本文主要跟大家分享一个简单逆向stm32固件程序的实例,为了让大家在一款成熟的产品中去考虑加密这一块的技术,不然...
  • IDA反编译的几个注意和技巧

    千次阅读 2020-04-08 10:32:55
    IDA逆向程序的经验总结关于F5汇编代码不能转成c的伪代码的几个问题总结关于一些类型转换以及指针和地址的总结最可以拿来当教训的应该是 hide cast 功能1.jmpout的问题功能快捷键合理的创建标题,有助于目录的生成...
  • 51单片机C语言程序100例

    万次阅读 多人点赞 2018-04-13 13:08:30
    :用单片机控制一个灯闪烁:认识单片机的工作频率 .................................4 实例 5 :将 P1 口状态分别送入 P0 、 P2 、 P3 口:认识 I/O 口的引脚功能 ............ 5 实例 6 :使用 P3 口流水点亮 8 位...
  • 毫无技术可言 如果你的程序是debug编译的附带调试信息,那么可以通过ltrace命令来调出你的库函数使用情况 如: 可以看到依然破解了。 所以非常不安全。 其次,第二个方法,我们可以通过gdb的方式来破解 gdb我用的是...
  • 义隆反编译工具 V1.01

    2014-03-25 11:02:52
    义隆反编译工具 V1.01,适合13位ROM的义隆单片机。支持BANK、PAGE、LJMP、LCALL、CONTW、CONTR、SLEP、INT、TBL等几乎所有的义隆单片机指令. 可显示单片机型号和配置信息,每行代码有地址注释,方便阅读程序。使用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,328
精华内容 1,331
关键字:

反编译单片机程序