D3CTF-REVER-DMARM
0x1 观察文件
bin文件拉入ida 把前面几个数据 按d转换为ddouble形式 第一个为ram基址 第二个为rom代码开始的地址
0x2 分析文件
拉进ida32位 选择小端 arm
选择ARMv7-M
进去输入地址段 记得点击上面的creat RAM创建 图片这里忘记点了 不然引用0x2000000这里会报红
先按C 再按P转换为函数 这时候大部分的函数分析出来了,但是关键加密位置没有
搜索main字符串
找到关键位置
搜索flag
点击fouce analyze会转换为代码 这里转换为字符串
ctrl+x 引用 如果没有引用 观看我引用的地址 自己跳转过去 按c 再按p
找到关键判断位置
再次引用 ,如果没有还是一样,自己跳转过去 c p
算法关键判断位置
找到加密数据
引用异或的值 找到赋值的位置
发现最终只是 0x335E44 循环取两位
0x3 解密代码
key = [0x44,0x5e,0x33]
a = [
0x20,0x6D,0x50,0x30,0x38,0x48,0x75,0x69,0x50,
0x75,0x6B,0x56,0x20,0x6D,0x04,0x26,0x6A,0x51,
0x72,0x6B,0x50,0x73,0x38,0x0B,0x74,0x6A,0x57,
0x70,0x6E,0x50,0x25,0x3A,0x51,0x22,0x6E,0x56,
0x75,0x3D,0x50,0x72,0x6A,0x4E
]
for i in range(len(a)):
print(chr(a[i]^key[i%3]),end='')
# d3ctf{17c15ed37b4b65c7f804d40cadbf0e1cc64}
0x4总结
学到了用ida反汇编arm 和如何分析