|
|
本帖最后由 suhetao 于 2026-2-8 10:00 编辑
书接上回
《许老师STM32 100K电桥的固件注册码逆向分析结果,献给没有注册码的我们!》
再次感谢作者nxpyhgp001的分享的许老师STM32 100K电桥硬件
https://oshwhub.com/nxpyhgp001/stm32lcd-biao
春节前夕工厂产线停工,大部分员工都已经放假, 随即项目开发活动停止,工作空闲时间多了起来,开始填上之前挖的坑“后续会慢慢逆向或者重构实现一个完全适配此硬件的开源软件版本”。在之前逆向分析注册过程的基础上,花了点时间逆向了许老师STM32 100K闭源电桥固件GPIO.hex全流程实现,根据逆向工程结果重构了基于C语言和ST官方STM32F10x标准外设驱动库(3.6.0)的软件逆向工程版本。
同样这里省略逆向分析的过程。这并不是这个帖子讨论的重点,直接上结果。
先上个内存变量memory map,依次是内存地址,变量类型,名称,初始化的值。
| 0x20000000 | uint32_t | g_dwADCSamples | 6627 | | 0x20000004 | uint8_t | g_bLCDPosX | 0 | | 0x20000005 | uint8_t | g_bLCDPosY | 0 | | 0x20000006 | 0 | | Padding | | 0x20000007 | 0 | | Padding | | 0x20000008 | uint32_t | g_dwPrescaler | 1 | | 0x2000000C | uint32_t | g_dwPeriod | 1 | | 0x20000010 | uint32_t | g_dwAD9850Control | 0 | | 0x20000014 | uint32_t | g_dwKeyPressTick | 0 | | 0x20000018 | uint32_t | g_dwKeyShortPressValue | 0 | | 0x2000001C | uint32_t | g_dwKeyLongPressValue | 0 | | 0x20000020 | float | g_fG[5] | { 1.0, 3.0, 9.0, 27.0, 81.0 } | | 0x20000034 | float | g_fR[4] | { 100.0, 1000.0, 10000.0, 100000.0 } | | 0x20000044 | uint32_t | g_dwMainFunction | 0 | | 0x20000048 | uint32_t | g_dwCalibrationMode | 0 | | 0x2000004C | uint32_t | g_dwAutoRangeUpdateStep | 0 | | 0x20000050 | uint32_t | g_dwUpdateInterval | 0x13 | | 0x20000054 | uint32_t | g_dwTickCounter | 0 | | 0x20000058 | uint32_t | g_dwLastTick | 0 | | 0x2000005C | uint32_t | g_dwAD9850Control[5] | { 0, 0, 1, 0, 1} | | 0x20000070 | uint32_t | g_dwAutoGainMode[2] | { 0, 0 } | | 0x20000078 | uint32_t | g_dwShowLagerError | 1 | | 0x2000007C | int32_t | g_iADCFloatingOffset | 0 | | 0x20000080 | uint8_t | g_bShowADCFloatingOffsetMode | 0 | | 0x20000081 | 0 | | Padding | | 0x20000082 | 0 | | Padding | | 0x20000083 | 0 | | Padding | | 0x20000084 | uint32_t | g_dwRng | 1 | | 0x20000088 | uint32_t | g_dwGainMode | 1 | | 0x2000008C | uint32_t | g_dwAutoTaskTimetick | -1 | | 0x20000090 | uint8_t | g_bAD9850PinInit | 0 | | 0x20000091 | uint8_t | g_bKeyGpioInit | 0 | | 0x20000092 | uint8_t | g_bAnlogSwitchGpioInit | 0 | | 0x20000093 | uint8_t | g_bADCLinearCorrectInit | 0 | | 0x20000094 | uint8_t | g_bPhaseErrCount | 0 | | 0x20000095 | uint8_t | g_bLCRDisplayMode | 1 | | 0x20000096 | 0 | | Padding | | 0x20000097 | 0 | | Padding | | 0x20000098 | uint32_t | dwMeasurementFrequency | 0 | | 0x2000009C | uint32_t | g_dwDDSMode | 0 | | 0x200000A0 | float | g_fFeqX | 0.0f | | 0x200000A4 | uint32_t | g_dwVoltageCaptureMode | 0 | | 0x200000A8 | uint8_t | g_APBAHBPrescTable[16] | {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9}; | | 0x200000B8 | uint8_t | g_ADCPrescTable[4] | {2, 4, 6, 8}; | | 0x200000BC | int32_t | g_iADCResults[5] | { 0 } | | 0x200000D0 | ADCLinearityParameters | g_ADCLinearityParameters | { 0 } | | 0x20000190 | LCRParamters | g_LCRParamters | { 0 } | | 0x20000204 | int32_t | g_TL084CorrectBias[4] | { 0 } |
有两个重要的结构体
- typedef struct ADCLINEARITYPARAMETERS_t{
- uint32_t iADCMinValue;
- uint32_t iADCMaxValue;
- int8_t ADCCorrecteBias[180];
- int8_t bADCcorrectOverflowBias; //
- }ADCLinearityParameters;
复制代码
和
- typedef struct LCRPARAMTERS_t {
- int8_t J[4];
- int8_t R[4];
- int8_t g1;
- int8_t G1b;
- int8_t j1;
- int8_t g2;
- int8_t G2b;
- int8_t j2;
- int8_t R2b;
- uint8_t padding; //byte_2000019F
- uint16_t wLicenseKey;
- uint8_t LCD_X_POS;
- uint8_t LCD_Y_POS;
- float QRs[6];
- float QXs[6];
- float QRo[6];
- float QXo[6];
- }LCRParamters;
复制代码
本想介绍一下此电桥的软件工作的过程以及相关代码,但是“talk is too cheap, show me your code”!
无需多言,相关实现请参考附件提供的逆向C语言代码,Keil MDK工程中的具体实现。没有家元的小伙伴使用以下地址。
STM32 100K LCR表逆向工程项目公开开源地址:
https://gitee.com/suhetao_b58c/STM32_LCR_REV
原始闭源版本GPIO.hex:
https://gitee.com/suhetao_b58c/STM32_LCR_REV/releases/download/v1.0/GPIO.hex
下载发布v1.0发布版本源码:
https://gitee.com/suhetao_b58c/STM32_LCR_REV/releases/download/v1.0/STM32_LCR_REV.zip
搭配nxpyhgp001在立创开源上公开的STM32 100K硬件使用。
同样因为工厂产线已经停工,无法进行任何的生产制造活动,因此我并没有实际的硬件可以测试这个软件版本。另外逆向成C语言代码的本质是指令集到汇编到高级语言的翻译,虽说已经基本上照搬原先所有的逻辑流程,包括不限于序列号生成,注册号生成输入,SWD禁用调试等逻辑,但是由于我个人水平有限,我并不能保证我翻译的过程一定100%准确,因此此软件版本可能存在bug。仍旧有硬件制作环境或者已经有吃灰硬件的小伙伴可以把硬件拿出来,重新编译烧录一下,验证看看功能是否正常。
附上软件工程编译环境:
Windows 10 x64 LTSC 2019
Keil MDK v5.40
STM32F10x_StdPeriph_Lib_V3.6.0
再次重申一下宇宙声明
1、所有讨论仅限个人学习与研究目的,以上是我个人研究学习的一些经验所得和知识分享。
2、请尊重ta人的劳动成果和知识产权,许老师既然没有选择把STM32 100Khz电桥的软件代码开源自然有ta自己的考量,本人深表理解和尊重。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|