怎么把STM32W的库反汇编数据库密码

用IDA反汇编个STM32小程序
本帖最后由yjmwxwx于00:12编辑想仿制别人的一款产品,但是只有固件没有源码无法修改程序,于是研究了一下反汇编。下面把过程贴出来,方法对错我也不知道,我小学文化不懂英文操作这款软件有困难。目标某开发的一个LED小程序把HEX文件转为BIN文件
& 果果文库所有资源均来源于互联网,仅供网友学习交流,若侵犯了您的权益,请联系我们予以删除。
4407&&人浏览
7593&&人浏览
2615&&人浏览
3930&&人浏览
14659&&人浏览
11867&&人浏览
11372&&人浏览
5499&&人浏览
1259&&人浏览
9863&&人浏览
18267&&人浏览
4963&&人浏览
14174&&人浏览
3987&&人浏览
19285&&人浏览
本文标题:用IDA反汇编个STM32小程序 链接地址:
copyright@ 2013- Inc. All Rights Reserved 果果文库 版权所有 联系站长: ; 经营许可证编号:浙ICP备号1 ;RCC寄存器地址映像
2 RCC_BASE
(RCC_BASE + 0x00)
4 RCC_CFGR
(RCC_BASE + 0x04)
(RCC_BASE + 0x08)
6 RCC_APB2RSTR
(RCC_BASE + 0x0C)
7 RCC_APB1RSTR
(RCC_BASE + 0x10)
8 RCC_AHBENR
(RCC_BASE + 0x14)
9 RCC_APB2ENR
(RCC_BASE + 0x18)
10 RCC_APB1ENR
(RCC_BASE + 0x1C)
11 RCC_BDCR
(RCC_BASE + 0x20)
12 RCC_CSR
(RCC_BASE + 0x24)
13 ;GPIO寄存器地址映像
14 GPIOC_BASE
15 GPIOC_CRL
(GPIOC_BASE + 0x00)
16 GPIOC_CRH
(GPIOC_BASE + 0x04)
17 GPIOC_IDR
(GPIOC_BASE + 0x08)
18 GPIOC_ODR
(GPIOC_BASE + 0x0C)
19 GPIOC_BSRR
(GPIOC_BASE + 0x10)
20 GPIOC_BRR
(GPIOC_BASE + 0x14)
21 GPIOC_LCKR
(GPIOC_BASE + 0x18)
22 ;AFIO寄存器地址映像
23 AFIO_BASE
24 AFIO_EVCR
(AFIO_BASE + 0x00)
25 AFIO_MAPR
(AFIO_BASE + 0x04)
26 AFIO_EXTICR1
(AFIO_BASE + 0x08)
27 AFIO_EXTICR2
(AFIO_BASE + 0x0C)
28 AFIO_EXTICR3
(AFIO_BASE + 0x10)
29 AFIO_EXTICR4
(AFIO_BASE + 0x14)
30 ;NVIC寄存器地址映像
31 NVIC_BASE
0xE000E000
32 NVIC_SETEN
(NVIC_BASE + 0x0010)
;SETENA寄存器阵列的起始地址
33 NVIC_IRQPRI
(NVIC_BASE + 0x0400)
;中断优先级寄存器阵列的起始地址
34 NVIC_VECTTBL
(NVIC_BASE + 0x0D08)
;向量表偏移寄存器的地址
35 NVIC_AIRCR
(NVIC_BASE + 0x0D0C)
;应用程序中断及复位控制寄存器的地址
37 SETENA0
0xE000E100
38 SETENA1
0xE000E104
39 ;SysTick寄存器地址映像
40 SysTick_BASE
0xE000E010
41 SYSTICKCSR
(SysTick_BASE + 0x00)
42 SYSTICKRVR
(SysTick_BASE + 0x04)
43 ;;FLASH缓冲寄存器地址映像
44 FLASH_ACR
46 ;SCB_BASE
(SCS_BASE + 0x0D00)
47 ;-----------------
48 MSP_TOP
;主堆栈起始值
49 PSP_TOP
0x20004E00
;进程堆栈起始值
51 BitAlias_BASE
;位带别名区起始地址
(BitAlias_BASE + (0x200*32) + (0*4))
(BitAlias_BASE + (0x200*32) + (1*4))
0x2000020C
60 ;常数定义---------
93 ;向量表*********************************************************************************
RESET, DATA, READONLY
;初始化主堆栈
NMI_Handler
;NMI Handler
HardFault_Handler
;Hard Fault Handler
SysTick_Handler
; SysTick Handler
113 ;***************************************************************************************
|.text|, CODE, READONLY
115 ;主程序开始
;指示程序从这里开始执行
118 ;时钟系统设置
;启动外部8M晶振
r0,=RCC_CR
;FLASH缓冲器
r0,=FLASH_ACR
;设置PLL锁相环倍率为7,HSE输入不分频
r0,=RCC_CFGR
r1,#Bit18 | Bit19 | Bit20 | Bit16 | Bit14
;启动PLL锁相环
r0,=RCC_CR
;选择PLL时钟作为系统时钟
r0,=RCC_CFGR
r1,#Bit18 | Bit19 | Bit20 | Bit16 | Bit14
;其它RCC相关设置
r0,=RCC_APB2ENR
161 ;IO端口设置
r0,=GPIOC_CRL
r1,#Bit16 | Bit17
;PC.4输出模式,最大速度50MHz
r1,#~Bit18 & ~Bit19
;PC.4通用推挽输出模式
167 ;AFIO 参数设置
169 ;Systick 参数设置
r0,=SYSTICKRVR
;Systick装初值
r0,=SYSTICKCSR
;设定、启动Systick
r0,=SETENA0
r0,=SETENA1
183 ;切换成用户级线程序模式
r0,=PSP_TOP
;初始化线程堆栈
control,r0
188 ;初始化SRAM、寄存器
r0,=SysTim
200 ;主循环=================================================================================
;SysTick产生0.5s
;主程序0.5s走一次
;位带操作清零0.5s标志
211 ;子程序**********************************************************************************
212 LedFlas
r0,=b_flas
;PC.4输出1
r0,=GPIOC_BRR
r0,=b_flas
;PC.4输出0
r0,=GPIOC_BSRR
240 ;异常程序*******************************************************************************
241 NMI_Handler
;xxxxxxxxxxxxxxxxxx
244 ;-----------------------------
245 HardFault_Handler
;xxxxxxxxxxxxxxxxxx
248 ;-----------------------------
249 SysTick_Handler
r0,=SysTim
;位带操作置1
261 TickExit
263 ;***************************************************************************************
;通过用零或空指令NOP填充,来使当前位置与一个指定的边界对齐
265 ;-----------------------------
;LED1--PD.8
;LED2--PD.9
;LED3--PD.10
EQU 0X40011C00
;GPIOD 地址
11 GPIOD_CRL
EQU 0X40011C00
;低配置寄存器
12 GPIOD_CRH
EQU 0X40011C04
;高配置寄存器
13 GPIOD_ODR
EQU 0X40011C0C
;输出,偏移地址0Ch
14 GPIOD_BSRR EQU 0X40011C10
;低置位,高清除偏移地址10h
15 GPIOD_BRR
EQU 0X40011C14
;清除,偏移地址14h
;GPIOD使能位
17 RCC_APB2ENR EQU 0X
18 ;STACK_TOP EQU 0X
20 ;堆栈初始化
21 Stack_Size
STACK, NOINIT, READWRITE, ALIGN=3
23 Stack_Mem
Stack_Size
24 __initial_sp
26 Heap_Size
HEAP, NOINIT, READWRITE, ALIGN=3
28 __heap_base
29 Heap_Mem
30 __heap_limit
32 ;堆栈8字节对齐
34 ;使用THUMB指令
36 ;复位向量
AREA RESET,CODE,READONLY
;DCD STACK_TOP ;MSP主堆栈指针
;DCD START复位,PC初始值
40 __Vectors
__initial_sp
; Top of Stack
Reset_Handler
; Reset Handler
NMI_Handler
; NMI Handler
HardFault_Handler
; Hard Fault Handler
MemManage_Handler
; MPU Fault Handler
BusFault_Handler
; Bus Fault Handler
UsageFault_Handler
; Usage Fault Handler
; Reserved
; Reserved
; Reserved
; Reserved
SVC_Handler
; SVCall Handler
DebugMon_Handler
; Debug Monitor Handler
; Reserved
PendSV_Handler
; PendSV Handler
SysTick_Handler
; SysTick Handler
; External Interrupts
WWDG_IRQHandler
; Window Watchdog
PVD_IRQHandler
; PVD through EXTI Line detect
TAMPER_IRQHandler
RTC_IRQHandler
FLASH_IRQHandler
RCC_IRQHandler
EXTI0_IRQHandler
; EXTI Line 0
EXTI1_IRQHandler
; EXTI Line 1
EXTI2_IRQHandler
; EXTI Line 2
EXTI3_IRQHandler
; EXTI Line 3
EXTI4_IRQHandler
; EXTI Line 4
DMA1_Channel1_IRQHandler
; DMA1 Channel 1
DMA1_Channel2_IRQHandler
; DMA1 Channel 2
DMA1_Channel3_IRQHandler
; DMA1 Channel 3
DMA1_Channel4_IRQHandler
; DMA1 Channel 4
DMA1_Channel5_IRQHandler
; DMA1 Channel 5
DMA1_Channel6_IRQHandler
; DMA1 Channel 6
DMA1_Channel7_IRQHandler
; DMA1 Channel 7
ADC1_2_IRQHandler
; ADC1 & ADC2
USB_HP_CAN1_TX_IRQHandler
; USB High Priority or CAN1 TX
USB_LP_CAN1_RX0_IRQHandler ; USB Low
Priority or CAN1 RX0
CAN1_RX1_IRQHandler
; CAN1 RX1
CAN1_SCE_IRQHandler
; CAN1 SCE
EXTI9_5_IRQHandler
; EXTI Line 9..5
TIM1_BRK_IRQHandler
; TIM1 Break
TIM1_UP_IRQHandler
; TIM1 Update
TIM1_TRG_COM_IRQHandler
; TIM1 Trigger and Commutation
TIM1_CC_IRQHandler
; TIM1 Capture Compare
TIM2_IRQHandler
TIM3_IRQHandler
TIM4_IRQHandler
I2C1_EV_IRQHandler
; I2C1 Event
I2C1_ER_IRQHandler
; I2C1 Error
I2C2_EV_IRQHandler
; I2C2 Event
I2C2_ER_IRQHandler
; I2C2 Error
SPI1_IRQHandler
SPI2_IRQHandler
USART1_IRQHandler
USART2_IRQHandler
USART3_IRQHandler
EXTI15_10_IRQHandler
; EXTI Line 15..10
RTCAlarm_IRQHandler
; RTC Alarm through EXTI Line
USBWakeUp_IRQHandler
; USB Wakeup from suspend
TIM8_BRK_IRQHandler
; TIM8 Break
TIM8_UP_IRQHandler
; TIM8 Update
TIM8_TRG_COM_IRQHandler
; TIM8 Trigger and Commutation
TIM8_CC_IRQHandler
; TIM8 Capture Compare
ADC3_IRQHandler
FSMC_IRQHandler
SDIO_IRQHandler
TIM5_IRQHandler
SPI3_IRQHandler
UART4_IRQHandler
UART5_IRQHandler
TIM6_IRQHandler
TIM7_IRQHandler
DMA2_Channel1_IRQHandler
; DMA2 Channel1
DMA2_Channel2_IRQHandler
; DMA2 Channel2
DMA2_Channel3_IRQHandler
; DMA2 Channel3
DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5
118 __Vectors_End
|.text|, CODE, READONLY
;指示开始执行
123 Reset_Handler
RCC_CONFIG_72MHZ
R1,=RCC_APB2ENR
R2,=IOPDEN
;写,使能GPIOD时钟
;LED1--PD.8
推挽输出,50MHz
;LED2--PD.9
推挽输出,50MHz
;LED3--PD.10 推挽输出,50MHz
R1,=GPIOD_CRH ;PD.8\9\10均在高寄存器
R1,=GPIOD_ODR
R1,=GPIOD_ODR
R2,=0x0000FF00
R1,=GPIOD_ODR
158 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
159 ;;;RCC
时钟配置 HCLK=72MHz=HSE*9
160 ;;;PCLK2=HCLK
PCLK1=HCLK/2
161 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
162 RCC_CONFIG_72MHZ
R1,=0X ;RCC_CR
R2,=0X ;HSEON
168 WAIT_HSE_RDY
R2,=0X ;HSERDY
WAIT_HSE_RDY
R1,=0X ;FLASH_ACR
R1,=0X ;RCC_CFGR时钟配置寄存器
;PLL倍频系数,PCLK2,PCLK1分频设置
;HSE 9倍频PCLK2=HCLK,PCLK1=HCLK/2
;HCLK=72MHz 0x001D0400
;HCLK=64MHz 0x
;HCLK=48MHz 0x
;HCLK=32MHz 0x
;HCLK=24MHz 0x
;HCLK=16MHz 0x
R2,=0x001D0400
R1,=0X ;RCC_CR
R2,=0X ;PLLON
195 WAIT_PLL_RDY
R2,=0X ;PLLRDY
WAIT_PLL_RDY
R1,=0X ;RCC_CFGR
206 WAIT_HCLK_USEPLL
WAIT_HCLK_USEPLL
213 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
214 ;延时R0(ms),误差((R0-1)*4+12)/8 us
215 ;延时较长时,误差小于0.1%
216 DELAY_NMS
218 DELAY_NMSLOOP
221 DELAY_ONEUS
DELAY_ONEUS
DELAY_NMSLOOP
238 NMI_Handler
NMI_Handler
242 HardFault_Handler\
HardFault_Handler
247 MemManage_Handler\
MemManage_Handler
252 BusFault_Handler\
BusFault_Handler
257 UsageFault_Handler\
UsageFault_Handler
262 SVC_Handler
SVC_Handler
266 DebugMon_Handler\
DebugMon_Handler
271 PendSV_Handler
PendSV_Handler
275 SysTick_Handler PROC
SysTick_Handler
280 Default_Handler PROC
WWDG_IRQHandler
PVD_IRQHandler
TAMPER_IRQHandler
RTC_IRQHandler
FLASH_IRQHandler
RCC_IRQHandler
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
DMA1_Channel1_IRQHandler
DMA1_Channel2_IRQHandler
DMA1_Channel3_IRQHandler
DMA1_Channel4_IRQHandler
DMA1_Channel5_IRQHandler
DMA1_Channel6_IRQHandler
DMA1_Channel7_IRQHandler
ADC1_2_IRQHandler
USB_HP_CAN1_TX_IRQHandler
USB_LP_CAN1_RX0_IRQHandler [WEAK]
CAN1_RX1_IRQHandler
CAN1_SCE_IRQHandler
EXTI9_5_IRQHandler
TIM1_BRK_IRQHandler
TIM1_UP_IRQHandler
TIM1_TRG_COM_IRQHandler
TIM1_CC_IRQHandler
TIM2_IRQHandler
TIM3_IRQHandler
TIM4_IRQHandler
I2C1_EV_IRQHandler
I2C1_ER_IRQHandler
I2C2_EV_IRQHandler
I2C2_ER_IRQHandler
SPI1_IRQHandler
SPI2_IRQHandler
USART1_IRQHandler
USART2_IRQHandler
USART3_IRQHandler
EXTI15_10_IRQHandler
RTCAlarm_IRQHandler
USBWakeUp_IRQHandler
TIM8_BRK_IRQHandler
TIM8_UP_IRQHandler
TIM8_TRG_COM_IRQHandler
TIM8_CC_IRQHandler
ADC3_IRQHandler
FSMC_IRQHandler
SDIO_IRQHandler
TIM5_IRQHandler
SPI3_IRQHandler
UART4_IRQHandler
UART5_IRQHandler
TIM6_IRQHandler
TIM7_IRQHandler
DMA2_Channel1_IRQHandler
DMA2_Channel2_IRQHandler
DMA2_Channel3_IRQHandler
DMA2_Channel4_5_IRQHandler [WEAK]
343 WWDG_IRQHandler
344 PVD_IRQHandler
345 TAMPER_IRQHandler
346 RTC_IRQHandler
347 FLASH_IRQHandler
348 RCC_IRQHandler
349 EXTI0_IRQHandler
350 EXTI1_IRQHandler
351 EXTI2_IRQHandler
352 EXTI3_IRQHandler
353 EXTI4_IRQHandler
354 DMA1_Channel1_IRQHandler
355 DMA1_Channel2_IRQHandler
356 DMA1_Channel3_IRQHandler
357 DMA1_Channel4_IRQHandler
358 DMA1_Channel5_IRQHandler
359 DMA1_Channel6_IRQHandler
360 DMA1_Channel7_IRQHandler
361 ADC1_2_IRQHandler
362 USB_HP_CAN1_TX_IRQHandler
363 USB_LP_CAN1_RX0_IRQHandler
364 CAN1_RX1_IRQHandler
365 CAN1_SCE_IRQHandler
366 EXTI9_5_IRQHandler
367 TIM1_BRK_IRQHandler
368 TIM1_UP_IRQHandler
369 TIM1_TRG_COM_IRQHandler
370 TIM1_CC_IRQHandler
371 TIM2_IRQHandler
372 TIM3_IRQHandler
373 TIM4_IRQHandler
374 I2C1_EV_IRQHandler
375 I2C1_ER_IRQHandler
376 I2C2_EV_IRQHandler
377 I2C2_ER_IRQHandler
378 SPI1_IRQHandler
379 SPI2_IRQHandler
380 USART1_IRQHandler
381 USART2_IRQHandler
382 USART3_IRQHandler
383 EXTI15_10_IRQHandler
384 RTCAlarm_IRQHandler
385 USBWakeUp_IRQHandler
386 TIM8_BRK_IRQHandler
387 TIM8_UP_IRQHandler
388 TIM8_TRG_COM_IRQHandler
389 TIM8_CC_IRQHandler
390 ADC3_IRQHandler
391 FSMC_IRQHandler
392 SDIO_IRQHandler
393 TIM5_IRQHandler
394 SPI3_IRQHandler
395 UART4_IRQHandler
396 UART5_IRQHandler
397 TIM6_IRQHandler
398 TIM7_IRQHandler
399 DMA2_Channel1_IRQHandler
400 DMA2_Channel2_IRQHandler
401 DMA2_Channel3_IRQHandler
402 DMA2_Channel4_5_IRQHandler
阅读(...) 评论()原文链接:
以前一直使用STM32的标准库,需要一步步地将代码加进去,将编译选项设置好,然后再编译整个工程。
这个编译过程是一个相当慢的过程!完全编译大约需要一支烟的时间。每次建立工程都这么编译,是一个相当浪费时间和香烟的过程。
于是,我有了将库编译成lib文件的想法。本博文就是我将STM32F4的标准库编译成lib文件并在工程中使用的过程。
适用对象:
<span style="color:#、熟悉库,不想再看库里边代码
<span style="color:#、有稳定的库,库文件更新不频繁
<span style="color:#、库文件多,每次编译时间长
下面是我将STM32F4的标准库编译成lib并在工程中使用的过程:
使用工具链:MDK4.70A。其实各个工具链几乎是一样的
1、建立创建lib的工程
2、将库文件拷贝到工程目录:
将库里边目录\STM32F4xx_StdPeriph_lib v1.0.2\STM32F4xx_StdPeriph_Driver下的inc和src两个文件夹拷贝到预创建工程的目录。
我计划在目录E:\学习\ARM\库\stm32f4-2中创建库。于是我将两个文件夹拷贝到了这里。
3、选择芯片:STM32F407VG
4、选择NO。因为这不是可运行的程序,这里不需要加入启动文件。
5、创建完工程后,工程结构如图:
6、MDK中点击工具栏上的设置工程结构,并将库文件加入工程:
为了通用,我将库中所有的C文件都加入了工程
7、完成后MDK下的目录结构:
8、MDK下设置输出选项:
工程选项中设置输出,选择输出lib到目录E:\学习\ARM\库\stm32f4-2\lib\:
9、设置C语言预编译宏和引用目录:
& 因为要使用STM32F4标准库,预编译选项设置:USE_STDPERIPH_DRIVER,STM32F4XX
& 将刚才拷贝的inc和工程根目录文件夹加入引用:
10、设置完成后:
11、将stm32f4xx_conf.h文件拷贝到工程:
这个文件需要在标准库提供的示例工程中找:
我使用的是\STM32F4-Discovery_FW_V1.1.0\Project\Peripheral_Examples\ADC3_DMA\stm32f4xx_conf.h
这个文件引用了库文件中所有的头文件。因为不包含在库中,我将这个文件拷贝到E:\学习\ARM\库\stm32f4-2文件夹。
12、到此,工程设置完成。按F7编译,经过一支烟的时间即可生成库的lib。
生成完成后,MDK工程中:
13、工程输出目录:
文件stm32f4lib.lib就是我们生成的lib文件
14、将库文件加入该工程
15、新建工程,我命名成stm32f4use,处理器依旧选择STM32F407VG。
16、这是选择yes,因为这是一个可执行的工程:
17、将标准库示例工程的\STM32F4-Discovery_FW_V1.1.0\Project\Peripheral_Examples\ADC3_DMA中的system_stm32f4xx.c拷贝到工程目录(E:\学习\ARM\库\stm32f4-2)中
18、再次点击菜单上的设置工程目录结构,将刚才生成的lib库加入到工程中:
19、将示例工程\STM32F4-Discovery_FW_V1.1.0\Project\Peripheral_Examples\ADC3_DMA中的system_stm32f4xx.c拷贝到工程目录。
20、将main.c和 system_stm32f4xx.c 加入到工程
21、完成后的目录结构:
22、加入编译选项
与上边生成lib相&#20284;,预编译选项设置:USE_STDPERIPH_DRIVER,STM32F4XX
引用目录:.\..\stm32f4-2& (这里的.\..文件夹就是刚才建立库时候的文件夹)
输出可执行文件:
23、添加几行简单的代码
//点亮一个LED
#include &stm32f4xx.h&
#include &stm32f4xx_conf.h&
#include &stm32f4xx_tim.h&
int main()
&&& GPIO_InitTypeDef GPIO_InitS
&&& RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
&&& GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
&&& GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
&&& GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
&&& GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
&&& GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
&&& GPIO_Init(GPIOD,&GPIO_InitStructure);
&&& GPIO_SetBits(GPIOD,GPIO_Pin_12);
&&& while(1);
24、工程设置完成,按F7试试。现在编译速度快起来了,点个烟的时间就编译完了
本文已收录于以下专栏:
相关文章推荐
以前一直使用STM32的标准库,需要一步步地将代码加进去,将编译选项设置好,然后再编译整个工程。
这个编译过程是一个相当慢的过程!完全编译大约需要一支烟的时间。每次建立工程都这么编译,是一个相当...
把一些重要的代码编译成Lib或者dll
本文是老师给的一个graphmatching的项目,里面包含四个.m文件,对应四个函数,需要编译生成库文件在C++环境下调用
下面这个链接对成功实现此过程有很大帮助[http://m.blog.csd...
搞得真是跪了。zho
1 装matlab
1 STM32标准外设库概述
STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动...
《如何从ST官网上下载资源STM32标准库Standard Peripheral LibrariesV3.5.0》分为两种检索方式:
【1】按需要的库资源检索
【2】按芯片型号检索资源
查了网上的一些...
STM32 Printf函数利用标准库实现方法
新建自己的工程模板,便于以后做项目的时候直接拿来用,本文从ST官网下载标准库文件,建立一个工程模板
1:从官网下载ST官方库文件
登录官网,中文和英文都可以,搜索框搜索&stm32
firmware...
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)【图片】STM32 逆向 反汇编一个简单的for循环【stm32吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:26,613贴子:
STM32 逆向 反汇编一个简单的for循环收藏
seg000: sub_8000228
CODE XREF: sub_pseg000:
sub_Cp ...seg000:
{R4,LR} 入栈seg000:0800022A
R3, R0 把R0变量保存到R3seg000:0800022C
R4, #0 R4 = 0seg000:0800022E
loc_800023A 跳转seg000: ; ---------------------------------------------------------------------------seg000:seg000: loc_8000230
CODE XREF: sub_jseg000:
R0, #0x2EE0 R0 = 0x2ee0seg000:
sub_800021C 调用子函数seg000:
R4, R4, #1 R4加1seg000:0800023Aseg000:0800023A loc_800023A
CODE XREF: sub_jseg000:0800023A
R4, R3 R4与R3比较seg000:0800023C
loc_8000230 小于跳转seg000:0800023E
{R4,PC} 出栈返回seg000:0800021C sub_800021C
CODE XREF: sub_8000228+Cpseg000:0800021C
seg000:pseg000:0800021C
R1, #0 R1清零seg000:0800021E
loc_和R0比较seg000: ; ---------------------------------------------------------------------------seg000:seg000: loc_8000220
CODE XREF: sub_jseg000:
R1, R1, #1seg000:seg000: loc_8000222
CODE XREF: sub_jseg000:
R1, R0 R1和R0比较seg000:
loc_8000220 小于跳转seg000:
登录百度帐号推荐应用查看: 6070|回复: 16
STM32反汇编实战破解开机验证码
主题帖子精华
中级会员, 积分 337, 距离下一级还需 163 积分
在线时间36 小时
想仿制别人的产品但是作者只提供HEX文件,
并且有产品唯一身份标识的验证码,每换一片STM32就要跟原作者要验证码,原作者比较忙所以要验证码很不方便。
于是研究一下能不能破解一下。上一帖贴了IDA的基本用法,我是新手第一次搞破解, 我是小学学历不懂英文和C语言。。
这次破解全靠运气。
IDA的基本用法就不说了,直接切入分析。
既然程序用产品唯一身份标识那我们就从他开刀
打开IDA反汇编代码然后搜索0x1FFFF&然后看到0x8002950里面有,而且这个函数运算很繁琐可以确定这个就是主要目标
由于这个函数用了大了运算静态调试不容易,所以把我的最小系统板焊上了1602液晶跟键盘,按照他说的方法输入试用码成功后居然会在屏幕上显示Zero&check...
这个英文是什么意思我不懂因为我不会英文,&但是我知道成功后会显示他,程序自己出卖了自己。&&由于IDA反汇编ASCII有不准确的时候我们看十六进制代码搜索找Zero&check...
然后到这个存放ASCII的数据区把原来不正确的反汇编按A键转换成ASCII
原来是sub_80012D8调用了他说明判断验证码在他前面
看他前面sub_80011C2&&&sub_8001280&sub_80011C2&这三个都不是,说明还是在sub_80012D8前面
原来不是死机是在0x8002B80死循环,找到0x8002B80
他左边的loc_8002A5C:&有POP正常返回说明他是正确的在往上找,找到loc_8002B58:&动态调试一下,在这里设个断点&,随便输入一个数按键确认,调试后得知原来R10是计算后的&R7是我们输入的验证码
把bne&loc_8002b6c改成&beq&loc_8002b6c&&改完以后结果就会时输入正确验证码死循环,输入错误验证码正常使用&。
把&&06&D1&改成&04&D0&就可以了,06&D1&是BNE&&&,&04&D0&是BEQ
主题帖子精华
中级会员, 积分 457, 距离下一级还需 43 积分
在线时间55 小时
虽然看不懂,但是必须顶啊,,,
主题帖子精华
在线时间536 小时
搞汇编的都是大神啊!
我的博客:http://blog.csdn.net/itdo_just
主题帖子精华
中级会员, 积分 358, 距离下一级还需 142 积分
在线时间3 小时
太牛,原来是这样子搞反汇编的。&还是不是可以破解别人的程序?
主题帖子精华
中级会员, 积分 337, 距离下一级还需 163 积分
在线时间36 小时
原作者许剑伟老师真是高手中的高手,原来还没有破解成功。
许老师的一段帖子:
如果用户得到编译好的且未加密的hex程序,并且手上有stm32程序跟踪调试器的话,破解验证码就会变得比较容易。
具备以上条件,破解者找到读flash指令(整个程序,读flash指令只有几条),然后在该指令往下找跳转语句,会很快的找到验证是否通过的判断语句,直接把“是条件跳转”改为“否条件跳转”,这样就会跳过验证码。估计,一两天就破解完成。
如果,验证码计算的中间变量保留,也参与LCR主程序再次验证,当用户没有进行正确的验证码运算,中间变量自然不正确,那么就在LCR主程序中跳过几处误
差修正,这样破解者就会误以为破解成功,实际上没有突破第二层破解,要突破第二层破解,就得弄明白验证码算法,那么破解成本就会增加一些。
此外,也可以不公开基础校准的方法,这也就成了加密的一个方法。每个LCR,所需的基本校准值不一样,即每块stm32不单单ID号不一样,实际上,它的
ADC、端口参数等等,都有一些不同,这就造成了它们的64kB的HEX不同,这64kB
HEX的生成方法(即校准方法)不公开,破解者就不会知道如何破解。这部分也可以看做“工厂校准”,如果这项校准是机器辅助完成的,保密性就很好,如果是
人工完成的,保密性就会严重下降。说白了,我不说校准方法,别人就难以知道如何校准,程序copy了,表却准不了。
主要是要加密到什么程度。我本来不想严格加密,不过浩其心希望严格加密。如果严格加密,成本高。比如,机器校准的话,还得高设计自动校准机。
主题帖子精华
中级会员, 积分 337, 距离下一级还需 163 积分
在线时间36 小时
xjw01老师是顶尖高手,有感兴趣的可以搜一下
主题帖子精华
中级会员, 积分 337, 距离下一级还需 163 积分
在线时间36 小时
只有根据原来算法写个算号器才能大量复制, 这个是许老师的10K电桥的电路图
f11cdc53c1b7_310.png (0 Bytes, 下载次数: 0)
22:54 上传
主题帖子精华
金牌会员, 积分 1563, 距离下一级还需 1437 积分
在线时间226 小时
回复【5楼】yjmwxwx:
---------------------------------
看来验证码这东西,只能防君子防不了小人呀
像那些大公司的软件产品,网上都有各种破解
可想而知,能加密就能解密,就看解密的成本高低了
活着才是王道!健康是一切的前提!
主题帖子精华
高级会员, 积分 828, 距离下一级还需 172 积分
在线时间61 小时
破解别人的东西不好 呵
主题帖子精华
中级会员, 积分 202, 距离下一级还需 298 积分
在线时间29 小时
许老师的COG12864版本的电桥看着挺不错的,不过有网上很多版本的原理图,楼主发的是1602版本的,不知该如何下手。做一个出来也是平时工作的利器啊。
主题帖子精华
中级会员, 积分 337, 距离下一级还需 163 积分
在线时间36 小时
搞定了, 输入错误密码屏幕上显示出正确密码
0x8002b70 开始改几个数就行了
写改的地方
主题帖子精华
中级会员, 积分 337, 距离下一级还需 163 积分
在线时间36 小时
BL&跳转计算
比如向前跳转&比如上边的fdf7&49fe&这样写不注意高地位容易弄混。&
计算要算这个f7fd&fe49&,&取高三位7FD&和低三位e49
7fd左移12位&=&&&7fd000&&&&&e49左移1位&=&1c92
7fd000&|&1C92&=&7fdc92&
7fdc92&-&1&=&7fdc91&
然后取反&=&&236e
BL语句所在的地址-&236e&+&4&=&要跳转的地址
0x8002b7a&-&0x236e&+&4&=&0x8000810&
注意这是往前跳转,往后跳转计算不一样
主题帖子精华
金钱114806
在线时间861 小时
主题帖子精华
新手上路, 积分 25, 距离下一级还需 25 积分
在线时间1 小时
楼主高手啊!
主题帖子精华
新手上路, 积分 7, 距离下一级还需 43 积分
在线时间0 小时
楼主请教下jlink那块怎么搞?
主题帖子精华
金牌会员, 积分 1055, 距离下一级还需 1945 积分
在线时间243 小时
所以啊,同学们,读UID不能直接用UID的地址啊,定义一个变量,在不同地方计算最后得到地址啊,
short buffer[6]; //96/16
a=UID_Addr-
memcpy( buffer,(char *)a,12);
主题帖子精华
初级会员, 积分 121, 距离下一级还需 79 积分
在线时间17 小时
一楼的图都挂了????
Powered by}

我要回帖

更多关于 反汇编怎么看 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信