一:Ready

ELF,file判断一下是什么文件

ELF 32-bit LSB executable, QUALCOMM DSP6, version 1 (SYSV), statically linked, for GNU/Linux 3.0.0, with debug_info, not stripped

这是一道基于高通hexagon架构的题目

introduce:骁龙处理器中世界级的Qualcomm Hexagon数字信号处理器(DSP)支持多种多媒体功能,并且经过优化可实现高性能和高能效。Hexagon DSP能够卸载CPU任务,利用异构计算支持始终在线任务,例如音频和显示

IDA通常是不支持反汇编这个架构的指令的

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/38b621ea-99fc-4187-a47c-c2eddec7208f/Untitled.png

IDA的procs目录包含已安装的IDA版本所支持的处理器模块。处理器模块为IDA提供机器语言-汇编语言转换功能,并负责生成在IDA用于界面中显示的汇编语言。

下面这个项目中含有一个IDA processor module for the hexagon (QDSP6) processor,

https://github.com/gsmk/hexagon

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/613c2fd2-939f-4829-bcd0-e39c4148dac1/Untitled.png

我的平台为windows,下载后是一个dll,放到IDA(≤7.5)的procs目录下

使用32位IDA打开进行分析,这次可以反汇编了,但是目前没有找到什么可以反编译,无奈之下,只有看英文文档直接撸汇编

指令参考文档下载:https://developer.qualcomm.com/qfile/29900/80-n2040-8_h_programmers_ref_v5.pdf

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2ecd1653-6da3-4563-aba5-29547eac1950/Untitled.png

二:函数分析

1. start

.text:00020200 start:                                  @ DATA XREF: LOAD:00010018↑o
.text:00020200                                         @ LOAD:0001007C↑o
.text:00020200                 { allocframe (#0) }
.text:00020204                 { call welcome }
.text:00020208                 { r0 = #0x1337 }
.text:0002020C                 { immext (#0x30500)
.text:00020210                   r1 = ##target }
.text:00020214                 { loop0 (loc_20218, #0x50) } @ 'P'
.text:00020218
.text:00020218 loc_20218:                              @ DATA XREF: start+14↑r
.text:00020218                 { r2 = memb (r1 + #0) }
.text:0002021C                 { r2 = xor (r0, r2)
.text:00020220                   r0 = add (r0, #1)
.text:00020224                   memb (r1 ++ #1) = r2.new }:endloop0

分析:先调用welcome函数,然后给r0赋值,之后循环0x50次,将target地址处开始的数据进行异或解密

2. welcome