化妆品备案查询网站,wordpress统计访问ip,dw网站引导页怎么做,杭州建设网官方网站题目给的是bin文件#xff0c;基本上就是需要我们手动修复的固件逆向。
如果给的是hex文件#xff0c;我们可能需要使用MKD进行动态调试
主要还是以做题为目的
详细的可以去看文档#xff1a;https://pdf1.alldatasheet.com/datasheet-pdf/view/201596/STMICROELECTRONIC…题目给的是bin文件基本上就是需要我们手动修复的固件逆向。
如果给的是hex文件我们可能需要使用MKD进行动态调试
主要还是以做题为目的
详细的可以去看文档https://pdf1.alldatasheet.com/datasheet-pdf/view/201596/STMICROELECTRONICS/STM32F103C8T6.html
SVD文件下载https://github.com/posborne/cmsis-svd 本文参考了网上多篇文章最终汇总在一篇对这道新的STM32题进行解题。
IDA分析设置
1、基础设置
STM32主要信息 • 内核ARM32位Cortex-M3 CPU • ARM Little-endian • Cortex-M架构属于ARMv7-M
IDA32位打开 ARM little-endian 点击ok之后进入 • flash的映射地址是 0x08000000 ~ 0x0807ffff (512KB)
flash就是我们装代码的地方也是STM32入口 下面这张图来自STM32中文参考手册 从这张表中可以了解的信息是在偏移4的位置存储的是RESET并且是固定的。
Reset就是充电就会执行并进入的地方因此将其当做固件入口 image 在IDA偏移为4的地方按下“D”键进行转换
得到了RESET的地址0x80004D1
可以看到为奇数说明是thumb指令
按下 G 键进行跳转 image 然后神奇的一幕发生了 自动识别了很多函数 其实这没有固定的套路我们跟踪跳转一步一步的分析最终会到达关键步骤 分析函数 sub_8000260 发现爆红了需要我们手动添加一些段 • Flash Memory: 0x8000000 ~ 0x801FFFF (128K) • SRAM: 0x20000000 ~ 0x20004FFF (20K) • Peripherals: 0x40000000 ~ 0x40023400
2、添加段-SRAM 单片机内存被总分为flash(rom)和sramramflash里面的数据掉电可保存sram中的数据掉电就丢失sram的执行速度要快于flashflash容量大于sram
单片机的程序存储分为code(代码存储区)、RO-data(只读数据存储区)、RW-data(读写数据存储区) 和 ZI-data(零初始化数据区) Flash 存储 code和RO-data Sram 存储 RW-data 和ZI-data
所以SRAM段需要我们自己添加
[0x20000000,0x2000ffff]
SRAM: 0x20000000 ~ 0x20004FFF (20K) 存放程序动态执行时的变量 3、添加段-Peripherals
Peripherals: 0x40000000 ~ 0x400234ff #这里还是改为了0x400234ff 而不是 0x40023400 在实战中发现多有多余的爆红因此范围扩大总没错
外设寄存器的映射地址程序通过读写这些内存地址实现对外围设备的控制
Peripherals 段中包含了我们要了解的寄存器 4、恢复中断向量表
地址0x8000000-0x80000eb 存储了中断向量表的相关信息
使用python脚本主要功能是删除旧的分析添加dword类型分析
for i in range(0x8000000,0x80000eb,1): del_items(i)
for i in range(0x8000000,0x80000eb,4): create_dword(i)
print(ok) 可以看到均已恢复 修复完成后发现了很多重复的地址比如0x8000519 这些函数并没有定义 跳转过去将其全部生成对应的函数使用P 键 官方图 5、恢复符号
bindiff来恢复符号表
如果有闲工夫或者是对stm32的开发非常上手就可以自己写一个demo尽可能多的使用到各种库函数然后编译出一个axf文件。我这里的话由于好久没有用stm32了开发起来有些生疏所以就不自己手写了我选择捡现成的项目编译出axf文件
可以多选几个例程能涵盖更多的库函数将这些axf文件用IDA打开然后生成idb文件。然后在我们的目标bin文件中使用bindiff加载idb文件。 网上随便找一个下载axf文件 选择一个idb文件然后会出现这样一个比较界面 选取similarity大的函数导入到bin文件中 导入之后实际上就能恢复大部分的函数名了。 6、恢复外设
导入SVD文件恢复外设结构
在IDA7.5以后就自带SVD文件加载插件了如下图 打开之后如下
我们可以自行下载相应的SVD文件或者加载GitHub上的仓库我这里选择自行下载然后在本地加载。
下载链接是这个
stm32-svd-main.zip 选中想要加载的svd文件之后IDA就会自动恢复bin文件中的外设结构体现在伪代码中就是这样 在这题中好像没什么用
2、解题
基本上做完上面的操作后
STM32就能看了
进入main函数 继续分析 题目说的是要找key 但是发现Key没有值。。。也就是说要么动调要么爆破给了密文就差了key 因此写出解密脚本
先转换一下
int main() {int v19[8] { 0 };v19[0] 0xF4DD0F64;v19[1] 0x5173B9F8;v19[2] 0xC7D238B2;v19[3] 0x9B9FCA8;v19[4] 0x286D3C51;v19[5] 0x429DE399;v19[6] 0x8084307B;LOWORD(v19[7]) 0x9175;for (size_t i 0; i 8; i){for (size_t j 0; j 4; j){printf(%02x , (v19[i] 8 * j)0xff);}}return 0;
}
写出解密脚本
from itertools import product
from Crypto.Cipher import ARC4
xorkey flag{tH14.l4_FkKkEeeE---f41g}
enc bytearray([0x64,0x0f,0xdd,0xf4,0xf8,0xb9,0x73,0x51,0xb2,0x38,0xd2,0xc7,0xa8,0xfc,0xb9,0x09,0x51,0x3c,0x6d,0x28,0x99,0xe3,0x9d,0x42,0x7b,0x30,0x84,0x80,0x75,0x91])
l list(range(0x20,0x7f))
for k in product(l, repeat4):key bytearray(k)res ARC4.new(key).decrypt(xorkey.encode())if res enc:print(get)print(key)exit(0)
使用C语言爆破会更快
#include stdio.h
#include stdlib.h
#include string.h
#include stdint.h
#include unistd.h#include openssl/arc4.h#define XOR_KEY flag{tH14.l4_FkKkEeeE---f41g}
#define ENC_SIZE 29int main() {uint8_t enc[ENC_SIZE] {0x64, 0x0f, 0xdd, 0xf4, 0xf8, 0xb9, 0x73, 0x51, 0xb2, 0x38, 0xd2, 0xc7, 0xa8, 0xfc, 0xb9, 0x09, 0x51, 0x3c, 0x6d, 0x28, 0x99, 0xe3, 0x9d, 0x42, 0x7b, 0x30, 0x84, 0x80, 0x75, 0x91};int l[] {0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f};int l_size sizeof(l) / sizeof(int);uint8_t key[4];uint8_t dec[ENC_SIZE];for (int i 0; i l_size; i) {for (int j 0; j l_size; j) {for (int k 0; k l_size; k) {for (int m 0; m l_size; m) {key[0] l[i];key[1] l[j];key[2] l[k];key[3] l[m];ARC4_CTX ctx;ARC4_set_key(ctx, 4, key);ARC4(ctx, ENC_SIZE, enc, dec);if (memcmp(dec, XOR_KEY, ENC_SIZE) 0) {printf(get\n);printf(%c%c%c%c\n, key[0], key[1], key[2], key[3]);exit(0);}}}}}return 0;
}
爆破出秘钥
d4d
文章转载自: http://www.morning.lgznc.cn.gov.cn.lgznc.cn http://www.morning.kpxky.cn.gov.cn.kpxky.cn http://www.morning.ttaes.cn.gov.cn.ttaes.cn http://www.morning.ztqyj.cn.gov.cn.ztqyj.cn http://www.morning.frcxx.cn.gov.cn.frcxx.cn http://www.morning.zpnfc.cn.gov.cn.zpnfc.cn http://www.morning.wzknt.cn.gov.cn.wzknt.cn http://www.morning.fnxzk.cn.gov.cn.fnxzk.cn http://www.morning.pjxlg.cn.gov.cn.pjxlg.cn http://www.morning.sfzwm.cn.gov.cn.sfzwm.cn http://www.morning.pflpb.cn.gov.cn.pflpb.cn http://www.morning.gcfrt.cn.gov.cn.gcfrt.cn http://www.morning.feites.com.gov.cn.feites.com http://www.morning.mxbks.cn.gov.cn.mxbks.cn http://www.morning.srgnd.cn.gov.cn.srgnd.cn http://www.morning.hrgxk.cn.gov.cn.hrgxk.cn http://www.morning.xlbtz.cn.gov.cn.xlbtz.cn http://www.morning.wdwfm.cn.gov.cn.wdwfm.cn http://www.morning.mumgou.com.gov.cn.mumgou.com http://www.morning.znrlg.cn.gov.cn.znrlg.cn http://www.morning.bpptt.cn.gov.cn.bpptt.cn http://www.morning.nnpfz.cn.gov.cn.nnpfz.cn http://www.morning.pzjrm.cn.gov.cn.pzjrm.cn http://www.morning.llqch.cn.gov.cn.llqch.cn http://www.morning.ycwym.cn.gov.cn.ycwym.cn http://www.morning.cxlys.cn.gov.cn.cxlys.cn http://www.morning.kdtdh.cn.gov.cn.kdtdh.cn http://www.morning.tntqr.cn.gov.cn.tntqr.cn http://www.morning.rwbx.cn.gov.cn.rwbx.cn http://www.morning.ynlpy.cn.gov.cn.ynlpy.cn http://www.morning.wmhlz.cn.gov.cn.wmhlz.cn http://www.morning.xckdn.cn.gov.cn.xckdn.cn http://www.morning.bssjp.cn.gov.cn.bssjp.cn http://www.morning.zrfwz.cn.gov.cn.zrfwz.cn http://www.morning.ndrzq.cn.gov.cn.ndrzq.cn http://www.morning.leeong.com.gov.cn.leeong.com http://www.morning.kxqmh.cn.gov.cn.kxqmh.cn http://www.morning.0dirty.cn.gov.cn.0dirty.cn http://www.morning.qpmmg.cn.gov.cn.qpmmg.cn http://www.morning.wrlqr.cn.gov.cn.wrlqr.cn http://www.morning.gfnsh.cn.gov.cn.gfnsh.cn http://www.morning.rryny.cn.gov.cn.rryny.cn http://www.morning.lznqb.cn.gov.cn.lznqb.cn http://www.morning.qghjc.cn.gov.cn.qghjc.cn http://www.morning.rrhfy.cn.gov.cn.rrhfy.cn http://www.morning.gsqw.cn.gov.cn.gsqw.cn http://www.morning.qpmwb.cn.gov.cn.qpmwb.cn http://www.morning.drjll.cn.gov.cn.drjll.cn http://www.morning.wlqll.cn.gov.cn.wlqll.cn http://www.morning.krkwp.cn.gov.cn.krkwp.cn http://www.morning.kdpal.cn.gov.cn.kdpal.cn http://www.morning.pngph.cn.gov.cn.pngph.cn http://www.morning.rszbj.cn.gov.cn.rszbj.cn http://www.morning.sqqkr.cn.gov.cn.sqqkr.cn http://www.morning.qmqgx.cn.gov.cn.qmqgx.cn http://www.morning.gjsjt.cn.gov.cn.gjsjt.cn http://www.morning.msgrq.cn.gov.cn.msgrq.cn http://www.morning.mqfhy.cn.gov.cn.mqfhy.cn http://www.morning.hxcrd.cn.gov.cn.hxcrd.cn http://www.morning.rscrj.cn.gov.cn.rscrj.cn http://www.morning.ptdzm.cn.gov.cn.ptdzm.cn http://www.morning.gjlml.cn.gov.cn.gjlml.cn http://www.morning.rqlqd.cn.gov.cn.rqlqd.cn http://www.morning.pmbcr.cn.gov.cn.pmbcr.cn http://www.morning.jcyyh.cn.gov.cn.jcyyh.cn http://www.morning.yqqgp.cn.gov.cn.yqqgp.cn http://www.morning.jjnry.cn.gov.cn.jjnry.cn http://www.morning.mqxzh.cn.gov.cn.mqxzh.cn http://www.morning.lgphx.cn.gov.cn.lgphx.cn http://www.morning.ynryz.cn.gov.cn.ynryz.cn http://www.morning.madamli.com.gov.cn.madamli.com http://www.morning.bnkcl.cn.gov.cn.bnkcl.cn http://www.morning.lfsmf.cn.gov.cn.lfsmf.cn http://www.morning.crkmm.cn.gov.cn.crkmm.cn http://www.morning.zlnyk.cn.gov.cn.zlnyk.cn http://www.morning.qgzmz.cn.gov.cn.qgzmz.cn http://www.morning.jtsdk.cn.gov.cn.jtsdk.cn http://www.morning.diuchai.com.gov.cn.diuchai.com http://www.morning.lwmxk.cn.gov.cn.lwmxk.cn http://www.morning.mwzt.cn.gov.cn.mwzt.cn