大连海事大学第一届“启航杯”DLMU CTF部分题解

大连海事大学第一届“启航杯”CTF校园网络安全竞赛

签到题

0. dlmuctf2020

flag{welcome_to_dlmuctf2020}
dlmuctf{welcome_to_dlmuctf2020}

1. 早安,贝丝人

TVJXRzI1TERPUlRIV1NCV09aU1Y2TlM3TTRZREFaQzdNUTNIU0lMNQ==

​ 很明显的Base64编码,解密后得到MRWG25LDORTHWSBWOZSV6NS7M4YDAZC7MQ3HSIL5,在进行Base32解码,拿到flag:dlmuctf{H6ve_6_g00d_d6y!}

Misc

2. lsp了

​ 题目叫lsp,第一反应想到的就是LSB加密。
image-20201206204813556

可以看到,PK开头,可知是zip压缩文件,保存,打开,得到flag:flag{Good_Job_kkk}

3. base2sth

​ 打开flag.txt,里边有一堆代码,简单看一下,字母全是小写,最高位没有超过f,推测是HEX编码,解码一下。解码后,可以在开头位置看到data:image/png;base64 说明是Base64加密的图片,Base64转图片得到flag。

index

4. docz

​ 下载下来是docx文件,但是打不开,第一反应看16进制,用010editor打开
image-20201206210026771
​ 明显PK开头,改后缀名为zip,打开后里边又是一层zip,打开里边有一个密码.zip,打开后内部是加密的,结合注释“真的有密码?”猜测是伪加密,用010editor打开,去除伪加密,打开里边的爆破.zip,根据提示6位数字密码,进行zip爆破,爆破得到密码233333(过程不展示了,工具到处都是),打开得到flag。

5. jigsaw

​ 题目叫做jigsaw,翻译一下就是拼图的意思,打开压缩包,里边有黑白图片一共10000张,推测是拼起来是个二维码,这里用的工具是ImageMagick 下的montage (具体安装方法百度吧)

​ 在终端下输入:

montage *.png -tile 100X100 -geometry +0+0 flag.png

​ 运行后得到flag.png
flag1

直接扫扫不出来,我当时是拖到word里加个滤镜,缩小一下扫出来的。。。
image-20201206211918825

P.S.这道题做得我血压飙升,一万张图,在虚拟机跑好久,切一下后台kali就给我杀进程。。。期间卡死无数次。。。

Crypto

6. 经典三合一

o{rnhBuRcj_Hjb_uN?p_auJ}

​ 先栅栏得oujp{Rb_rc_anjuuh_NJBH?},再凯撒得到flag{Is_it_really_EASY?}

7. XOR

​ 题目XOR,肯定就是异或了,百度查阅了好多异或加密的资料,写代码:

    #include <stdio.h>
    main()
    {
       char a[]="DsfvD-jZ|,+p}sX.zIfvzYrh|pSvWMX'";
       char c[100];
       int i;

       for(int j=1;j<200;j++)
        {
       for(i=0;a[i];i++)
          c[i]=a[i]^j;
       printf("You Password: %s\n",c);
        }
    }

运行结果:

image-20201206213300730

这个时候就要看你对Base64的敏感度了,最后一行很像Base64,直接一手解码,啪!很快啊,拿到flag:flag{Congratulations!!!}

8. RSA

​ RSA是一种很经典的加密算法,以前只听说过没有研究过,查了好多资料后,大概了解了,用Python写代码:

import gmpy2
p=0xEB4360DF0E0C824D57AE20700BBF6C1BA8324A94DB7B3608DDA40DE07A59082F
q=0xA5B8BA7304F15C70BA82FF60F8A4A5F156ED04896EC94A7E99B96B4E11727A8F
e=0x10001
c=5849414025349869533962909975439563212209275395646853474539897994585461763870010917408284076946095324877247807213532724048271531587570791138002392138818496
n=p*q
s = (p-1)*(q-1)
d = gmpy2.invert(e,s)
m = pow(c,d,n)
print ("hex: " +  hex(m))

​ 把得到的16进制的明文HEX转码,拿到flag

9. RSA_plus

​ 这道题给出了dp的值,查阅资料后,发现这叫dp泄露,进行简单的公式推导之后,写代码:

import gmpy2
import binascii
n
以下是给定 A2L 文件每一行的中文注释版本: ```a2l /* generated by ASAP2 Studio 2.4.34.10885 */ // 表示该文件由 ASAP2 Studio 工具生成,版本号为 2.4.34.10885 ASAP2_VERSION 1 71 // 定义 ASAP2 的版本号,此处为 1.71 /begin PROJECT HSAEVCU " Project Comments " // 开始一个名为 HSAEVCU 的项目,并添加注释 "Project Comments" /begin MODULE MC "" // 开始模块 MC,无额外注释 /begin A2ML // A2ML 是用于描述 ECU(电子控制单元)通信参数和配置的结构化数据块 struct Protocol_Layer { // 定义协议层结构体 uint; /* XCP protocol layer version e.g. "1.2" = 0x0102 */ // 协议层版本号,例如 "1.2" 对应十六进制 0x0102 uint; /* T1 [ms] */ // T1 时间参数,单位为毫秒 uint; /* T2 [ms] */ // T2 时间参数,单位为毫秒 uint; /* T3 [ms] */ // T3 时间参数,单位为毫秒 uint; /* T4 [ms] */ // T4 时间参数,单位为毫秒 uint; /* T5 [ms] */ // T5 时间参数,单位为毫秒 uint; /* T6 [ms] */ // T6 时间参数,单位为毫秒 uint; /* T7 [ms] */ // T7 时间参数,单位为毫秒 uchar; /* MAX_CTO */ // 最大连续传输对象数 uint; /* MAX_DTO default for DAQ and STIM */ // 默认最大数据传输对象数,适用于 DAQ 和 STIM enum { "BYTE_ORDER_MSB_LAST" = 0, "BYTE_ORDER_MSB_FIRST" = 1 }; // 字节序枚举:MSB_LAST 或 MSB_FIRST enum { "ADDRESS_GRANULARITY_BYTE" = 1, "ADDRESS_GRANULARITY_WORD" = 2, "ADDRESS_GRANULARITY_DWORD" = 4 }; // 地址粒度枚举:字节、字、双字 taggedstruct { ("OPTIONAL_CMD" enum { "GET_COMM_MODE_INFO" = 251, // 可选命令 GET_COMM_MODE_INFO "GET_ID" = 250, // 获取 ID 命令 "SET_REQUEST" = 249, // 设置请求命令 "GET_SEED" = 248, // 获取种子值命令 "UNLOCK" = 247, // 解锁命令 "SET_MTA" = 246, // 设置 MTA(内存目标地址)命令 "UPLOAD" = 245, // 上载命令 "SHORT_UPLOAD" = 244, // 短上载命令 "BUILD_CHECKSUM" = 243, // 构建校验和命令 "TRANSPORT_LAYER_CMD" = 242, // 传输层命令 "USER_CMD" = 241, // 用户自定义命令 "DOWNLOAD" = 240, // 下载命令 "DOWNLOAD_NEXT" = 239, // 下一步下载命令 "DOWNLOAD_MAX" = 238, // 最大下载命令 "SHORT_DOWNLOAD" = 237, // 短下载命令 "MODIFY_BITS" = 236, // 修改位命令 "SET_CAL_PAGE" = 235, // 设置标定页面命令 "GET_CAL_PAGE" = 234, // 获取标定页面命令 "GET_PAG_PROCESSOR_INFO" = 233, // 获取分页处理器信息命令 "GET_SEGMENT_INFO" = 232, // 获取段信息命令 "GET_PAGE_INFO" = 231, // 获取页面信息命令 "SET_SEGMENT_MODE" = 230, // 设置段模式命令 "GET_SEGMENT_MODE" = 229, // 获取段模式命令 "COPY_CAL_PAGE" = 228, // 复制标定页面命令 "CLEAR_DAQ_LIST" = 227, // 清除 DAQ 列表命令 "SET_DAQ_PTR" = 226, // 设置 DAQ 指针命令 "WRITE_DAQ" = 225, // 写入 DAQ 命令 "SET_DAQ_LIST_MODE" = 224, // 设置 DAQ 列表模式命令 "GET_DAQ_LIST_MODE" = 223, // 获取 DAQ 列表模式命令 "START_STOP_DAQ_LIST" = 222, // 启动/停止 DAQ 列表命令 "START_STOP_SYNCH" = 221, // 启动/停止同步命令 "GET_DAQ_CLOCK" = 220, // 获取 DAQ 时钟命令 "READ_DAQ" = 219, // 读取 DAQ 命令 "GET_DAQ_PROCESSOR_INFO" = 218, // 获取 DAQ 处理器信息命令 "GET_DAQ_RESOLUTION_INFO" = 217, // 获取 DAQ 分辨率信息命令 "GET_DAQ_LIST_INFO" = 216, // 获取 DAQ 列表信息命令 "GET_DAQ_EVENT_INFO" = 215, // 获取 DAQ 事件信息命令 "FREE_DAQ" = 214, // 释放 DAQ 资源命令 "ALLOC_DAQ" = 213, // 分配 DAQ 资源命令 "ALLOC_ODT" = 212, // 分配 ODT(观测数据表)资源命令 "ALLOC_ODT_ENTRY" = 211, // 分配 ODT 条目资源命令 "PROGRAM_START" = 210, // 程序启动命令 "PROGRAM_CLEAR" = 209, // 程序清除命令 "PROGRAM" = 208, // 程序写入命令 "PROGRAM_RESET" = 207, // 程序重置命令 "GET_PGM_PROCESSOR_INFO" = 206, // 获取程序处理器信息命令 "GET_SECTOR_INFO" = 205, // 获取扇区信息命令 "PROGRAM_PREPARE" = 204, // 程序准备命令 "PROGRAM_FORMAT" = 203, // 程序格式命令 "PROGRAM_NEXT" = 202, // 程序下一步命令 "PROGRAM_MAX" = 201, // 程序最大值命令 "PROGRAM_VERIFY" = 200, // 程序验证命令 "WRITE_DAQ_MULTIPLE" = 199 // 批量写入 DAQ 命令 })*; "COMMUNICATION_MODE_SUPPORTED" taggedunion { "BLOCK" taggedstruct { "SLAVE" ; /* Slave Block Mode supported */ "MASTER" struct { uchar; /* MAX_BS */ uchar; /* MIN_ST */ }; }; "INTERLEAVED" uchar; /* QUEUE_SIZE */ }; "SEED_AND_KEY_EXTERNAL_FUNCTION" char[256]; /* Name of the Seed&Key function including file extension without path */ "MAX_DTO_STIM" uint; /* overrules MAX_DTO see above for STIM use case */ }; }; struct Daq { // 定义 DAQ(数据采集)结构体 enum { "STATIC" = 0, "DYNAMIC" = 1 }; uint; /* MAX_DAQ */ uint; /* MAX_EVENT_CHANNEL */ uchar; /* MIN_DAQ */ enum { "OPTIMISATION_TYPE_DEFAULT" = 0, "OPTIMISATION_TYPE_ODT_TYPE_16" = 1, "OPTIMISATION_TYPE_ODT_TYPE_32" = 2, "OPTIMISATION_TYPE_ODT_TYPE_64" = 3, "OPTIMISATION_TYPE_ODT_TYPE_ALIGNMENT" = 4, "OPTIMISATION_TYPE_MAX_ENTRY_SIZE" = 5 }; enum { "ADDRESS_EXTENSION_FREE" = 0, "ADDRESS_EXTENSION_ODT" = 1, "ADDRESS_EXTENSION_DAQ" = 3 }; enum { "IDENTIFICATION_FIELD_TYPE_ABSOLUTE" = 0, "IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE" = 1, "IDENTIFICATION_FIELD_TYPE_RELATIVE_WORD" = 2, "IDENTIFICATION_FIELD_TYPE_RELATIVE_WORD_ALIGNED" = 3 }; enum { "GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE" = 1, "GRANULARITY_ODT_ENTRY_SIZE_DAQ_WORD" = 2, "GRANULARITY_ODT_ENTRY_SIZE_DAQ_DWORD" = 4, "GRANULARITY_ODT_ENTRY_SIZE_DAQ_DLONG" = 8 }; uchar; /* MAX_ODT_ENTRY_SIZE_DAQ */ enum { "NO_OVERLOAD_INDICATION" = 0, "OVERLOAD_INDICATION_PID" = 1, "OVERLOAD_INDICATION_EVENT" = 2 }; taggedstruct { "DAQ_ALTERNATING_SUPPORTED" uint; /* Display_Event_Channel_Number */ "PRESCALER_SUPPORTED" ; "RESUME_SUPPORTED" ; "STORE_DAQ_SUPPORTED" ; block "STIM" struct { enum { "GRANULARITY_ODT_ENTRY_SIZE_STIM_BYTE" = 1, "GRANULARITY_ODT_ENTRY_SIZE_STIM_WORD" = 2, "GRANULARITY_ODT_ENTRY_SIZE_STIM_DWORD" = 4, "GRANULARITY_ODT_ENTRY_SIZE_STIM_DLONG" = 8 }; uchar; /* MAX_ODT_ENTRY_SIZE_STIM */ taggedstruct { "BIT_STIM_SUPPORTED" ; "MIN_ST_STIM" uchar; /* separation time between DTOs time in units of 100 microseconds */ }; }; block "TIMESTAMP_SUPPORTED" struct { uint; /* TIMESTAMP_TICKS */ enum { "NO_TIME_STAMP" = 0, "SIZE_BYTE" = 1, "SIZE_WORD" = 2, "SIZE_DWORD" = 4 }; enum { "UNIT_1NS" = 0, "UNIT_10NS" = 1, "UNIT_100NS" = 2, "UNIT_1US" = 3, "UNIT_10US" = 4, "UNIT_100US" = 5, "UNIT_1MS" = 6, "UNIT_10MS" = 7, "UNIT_100MS" = 8, "UNIT_1S" = 9, "UNIT_1PS" = 10, "UNIT_10PS" = 11, "UNIT_100PS" = 12 }; taggedstruct { "TIMESTAMP_FIXED" ; }; }; "PID_OFF_SUPPORTED" ; "MAX_DAQ_TOTAL" uint; "MAX_ODT_TOTAL" uint; "MAX_ODT_DAQ_TOTAL" uint; "MAX_ODT_STIM_TOTAL" uint; "MAX_ODT_ENTRIES_TOTAL" uint; "MAX_ODT_ENTRIES_DAQ_TOTAL" uint; "MAX_ODT_ENTRIES_STIM_TOTAL" uint; "CPU_LOAD_MAX_TOTAL" float; block "DAQ_MEMORY_CONSUMPTION" struct { ulong; /* "DAQ_MEMORY_LIMIT" : in Elements[AG] */ uint; /* "DAQ_SIZE" : Anzahl Elements[AG] pro DAQ-Liste */ uint; /* "ODT_SIZE" : Anzahl Elements[AG] pro ODT */ uint; /* "ODT_ENTRY_SIZE" : Anzahl Elements[AG] pro ODT_Entry */ uint; /* "ODT_DAQ_BUFFER_ELEMENT_SIZE" : Anzahl Payload-Elements[AG]*Faktor = sizeof(Sendepuffer)[AG] */ uint; /* "ODT_STIM_BUFFER_ELEMENT_SIZE": Anzahl Payload-Elements[AG]*Faktor = sizeof(Empfangspuffer)[AG] */ }; (block "DAQ_LIST" struct { uint; /* DAQ_LIST_NUMBER */ taggedstruct { "DAQ_LIST_TYPE" enum { "DAQ" = 1, "STIM" = 2, "DAQ_STIM" = 3 }; "MAX_ODT" uchar; /* MAX_ODT */ "MAX_ODT_ENTRIES" uchar; /* MAX_ODT_ENTRIES */ "FIRST_PID" uchar; /* FIRST_PID for this DAQ_LIST */ "EVENT_FIXED" uint; /* this DAQ_LIST always in this event */ block "PREDEFINED" taggedstruct { (block "ODT" struct { uchar; /* ODT number */ taggedstruct { ("ODT_ENTRY" struct { uchar; /* ODT_ENTRY number */ ulong; /* address of element */ uchar; /* address extension of element */ uchar; /* size of element [AG] */ uchar; /* BIT_OFFSET */ })*; }; /* end of ODT_ENTRY */ })*; /* end of ODT */ }; /* end of PREDEFINED */ }; })*; (block "EVENT" struct { char[101]; /* EVENT_CHANNEL_NAME */ char[9]; /* EVENT_CHANNEL_SHORT_NAME */ uint; /* EVENT_CHANNEL_NUMBER */ enum { "DAQ" = 1, "STIM" = 2, "DAQ_STIM" = 3 }; uchar; /* MAX_DAQ_LIST */ uchar; /* EVENT_CHANNEL_TIME_CYCLE */ uchar; /* EVENT_CHANNEL_TIME_UNIT */ uchar; /* EVENT_CHANNEL_PRIORITY */ taggedstruct { "COMPLEMENTARY_BYPASS_EVENT_CHANNEL_NUMBER" uint; "CONSISTENCY" enum { "DAQ" = 0, "EVENT" = 1 }; block "MIN_CYCLE_TIME" struct { uchar; /* EVENT_CHANNEL_TIME_CYCLE */ uchar; /* EVENT_CHANNEL_TIME_UNIT */ }; "CPU_LOAD_MAX" float; block "CPU_LOAD_CONSUMPTION_DAQ" struct { float; /* "DAQ_FACTOR"*/ float; /* "ODT_FACTOR"*/ float; /* "ODT_ENTRY_FACTOR" */ taggedstruct { (block "ODT_ENTRY_SIZE_FACTOR_TABLE" struct { uint; /*"SIZE" */ float; /* "SIZE_FACTOR" */ })*; }; }; block "CPU_LOAD_CONSUMPTION_STIM" struct { float; /* "DAQ_FACTOR"*/ float; /* "ODT_FACTOR"*/ float; /* "ODT_ENTRY_FACTOR" */ taggedstruct { (block "ODT_ENTRY_SIZE_FACTOR_TABLE" struct { uint; /*"SIZE" */ float; /*"SIZE_FACTOR" */ })*; }; }; block "CPU_LOAD_CONSUMPTION_QUEUE" struct { float; /* "ODT_FACTOR" */ float; /* "ODT_ELEMENT_LOAD",length in elements[AG]*/ }; }; })*; }; /* end of optional at DAQ */ }; taggedunion Daq_Event { "FIXED_EVENT_LIST" taggedstruct { ("EVENT" uint)*; }; "VARIABLE" taggedstruct { block "AVAILABLE_EVENT_LIST" taggedstruct { ("EVENT" uint)*; }; block "DEFAULT_EVENT_LIST" taggedstruct { ("EVENT" uint)*; }; }; }; struct Pag { uchar; /* MAX_SEGMENTS */ taggedstruct { "FREEZE_SUPPORTED" ; }; }; struct Pgm { enum { "PGM_MODE_ABSOLUTE" = 1, "PGM_MODE_FUNCTIONAL" = 2, "PGM_MODE_ABSOLUTE_AND_FUNCTIONAL" = 3 }; uchar; /* MAX_SECTORS */ uchar; /* MAX_CTO_PGM */ taggedstruct { (block "SECTOR" struct { char[101]; /* SECTOR_NAME */ uchar; /* SECTOR_NUMBER */ ulong; /* Address */ ulong; /* Length */ uchar; /* CLEAR_SEQUENCE_NUMBER */ uchar; /* PROGRAM_SEQUENCE_NUMBER */ uchar; /* PROGRAM_METHOD */ })*; /* end of SECTOR */ "COMMUNICATION_MODE_SUPPORTED" taggedunion { "BLOCK" taggedstruct { "SLAVE" ; /* Slave Block Mode supported */ "MASTER" struct { uchar; /* MAX_BS_PGM */ uchar; /* MIN_ST_PGM */ }; }; "INTERLEAVED" uchar; /* QUEUE_SIZE_PGM */ }; }; }; struct Segment { uchar; /* SEGMENT_NUMBER */ uchar; /* number of pages */ uchar; /* ADDRESS_EXTENSION */ uchar; /* COMPRESSION_METHOD */ uchar; /* ENCRYPTION_METHOD */ taggedstruct { block "CHECKSUM" struct { enum { "XCP_ADD_11" = 1, "XCP_ADD_12" = 2, "XCP_ADD_14" = 3, "XCP_ADD_22" = 4, "XCP_ADD_24" = 5, "XCP_ADD_44" = 6, "XCP_CRC_16" = 7, "XCP_CRC_16_CITT" = 8, "XCP_CRC_32" = 9, "XCP_USER_DEFINED" = 255 }; taggedstruct { "MAX_BLOCK_SIZE" ulong; /* maximum block size for checksum calculation */ "EXTERNAL_FUNCTION" char[256]; /* Name of the Checksum function including file extension without path */ }; }; (block "PAGE" struct { uchar; /* PAGE_NUMBER */ enum { "ECU_ACCESS_NOT_ALLOWED" = 0, "ECU_ACCESS_WITHOUT_XCP_ONLY" = 1, "ECU_ACCESS_WITH_XCP_ONLY" = 2, "ECU_ACCESS_DONT_CARE" = 3 }; enum { "XCP_READ_ACCESS_NOT_ALLOWED" = 0, "XCP_READ_ACCESS_WITHOUT_ECU_ONLY" = 1, "XCP_READ_ACCESS_WITH_ECU_ONLY" = 2, "XCP_READ_ACCESS_DONT_CARE" = 3 }; enum { "XCP_WRITE_ACCESS_NOT_ALLOWED" = 0, "XCP_WRITE_ACCESS_WITHOUT_ECU_ONLY" = 1, "XCP_WRITE_ACCESS_WITH_ECU_ONLY" = 2, "XCP_WRITE_ACCESS_DONT_CARE" = 3 }; taggedstruct { "INIT_SEGMENT" uchar; /* references segment that initialises this page */ }; })*; /* end of PAGE */ (block "ADDRESS_MAPPING" struct { ulong; /* source address */ ulong; /* destination address */ ulong; /* length */ })*; "PGM_VERIFY" ulong; /* verification value for PGM */ }; /* end of optional */ }; taggedstruct Common_Parameters { block "PROTOCOL_LAYER" struct Protocol_Layer; block "SEGMENT" struct Segment; block "DAQ" struct Daq; block "PAG" struct Pag; block "PGM" struct Pgm; block "DAQ_EVENT" taggedunion Daq_Event; }; struct CAN_Parameters { uint; /* XCP on CAN version e.g. "1.2" = 0x0102 */ taggedstruct { "CAN_ID_BROADCAST" ulong; /* Auto detection CAN-ID master -> slaves Bit31= 1: extended identifier */ "CAN_ID_MASTER" ulong; /* CMD/STIM CAN-ID master -> slave Bit31= 1: extended identifier */ "CAN_ID_MASTER_INCREMENTAL" ; /* master uses range of CAN-IDs start of range = CAN_ID_MASTER end of range = CAN_ID_MASTER+MAX_BS(_PGM)-1 */ "CAN_ID_SLAVE" ulong; /* RES/ERR/EV/SERV/DAQ CAN-ID slave -> master Bit31= 1: extended identifier */ "BAUDRATE" ulong; /* BAUDRATE [Hz] */ "SAMPLE_POINT" uchar; /* sample point [% complete bit time] */ "SAMPLE_RATE" enum { "SINGLE" = 1, "TRIPLE" = 3 }; "BTL_CYCLES" uchar; /* BTL_CYCLES [slots per bit time] */ "SJW" uchar; /* length synchr. segment [BTL_CYCLES] */ "SYNC_EDGE" enum { "SINGLE" = 1, "DUAL" = 2 }; "MAX_DLC_REQUIRED" ; /* master to slave frames always to have DLC = MAX_DLC = 8 */ (block "DAQ_LIST_CAN_ID" struct { uint; /* reference to DAQ_LIST_NUMBER */ taggedstruct { "VARIABLE" ; "FIXED" ulong; /* this DAQ_LIST always on this CAN_ID */ }; })*; (block "EVENT_CAN_ID_LIST" struct { uint; /* reference to EVENT_NUMBER */ taggedstruct { ("FIXED" ulong)*; /* this Event always on this ID */ }; })*; "MAX_BUS_LOAD" ulong; /* maximum available bus load in percent */ block "CAN_FD" struct { taggedstruct { "MAX_DLC" uint; /* 8, 12, 16, 20, 24, 32, 48 or 64 */ "CAN_FD_DATA_TRANSFER_BAUDRATE" ulong; /* BAUDRATE [Hz] */ "SAMPLE_POINT" uchar; /* sample point receiver [% complete bit time] */ "BTL_CYCLES" uchar; /* BTL_CYCLES [slots per bit time] */ "SJW" uchar; /* length synchr. segment [BTL_CYCLES] */ "SYNC_EDGE" enum { "SINGLE" = 1, "DUAL" = 2 }; "MAX_DLC_REQUIRED" ; /* master to slave frames always to have DLC = MAX_DLC_for CAN-FD */ "SECONDARY_SAMPLE_POINT" uchar; /* sender sample point [% complete bit time] */ "TRANSCEIVER_DELAY_COMPENSATION" enum { "OFF" = 0, "ON" = 1 }; }; }; }; }; block "IF_DATA" taggedunion { "XCPplus" struct { uint; taggedstruct Common_Parameters; /* default parameters */ taggedstruct { (block "XCP_ON_CAN" struct { struct CAN_Parameters; /* specific for CAN */ taggedstruct Common_Parameters; /* overruling of default */ taggedstruct { "TRANSPORT_LAYER_INSTANCE" char[101]; /* name of the transport layer instance */ }; })*; }; }; /************* end of XCP on different Transport Layers ********************/ "ETK" taggedstruct { (block "SOURCE" struct { char[100]; int; long; taggedstruct { "QP_BLOB" struct { uint; uint; enum { "DIRECT" = 1, "INDIRECT" = 2 }; uint; enum { "MEASUREMENT" = 0, "BYPASS" = 1 }; ulong; uint; ulong; ulong; uint; ulong; ulong; ulong; uint; uint; uchar; }; }; })*; block "TP_BLOB" struct { ulong; enum { "INTERFACE_SPEED_8MBIT" = 1, "INTERFACE_SPEED_100MBIT" = 2 }; ulong; taggedstruct { "DISTAB_CFG" struct { uint; uint; uint; ulong; ulong; taggedstruct { "TRG_MOD" (uchar)*; }; }; "ETK_CFG" (uchar)*; block "COLDSTART_HANDSHAKE" struct { ulong; taggedstruct { "WAIT" (uchar)*; "READY" (uchar)*; }; }; "PAGE_SWITCH_METHOD" struct { ulong; taggedstruct { "AUTOSTART_BEHAVIOR" enum { "LAST_ACTIVE_PAGE" = 0, "ALWAYS_WP" = 1, "ALWAYS_RP" = 2 }; "OCT_WORKINGPAGE" struct { ulong; ulong; ulong; }; "OCT_REFERENCEPAGE" struct { ulong; ulong; ulong; }; }; }; }; }; }; }; /end A2ML /begin MOD_PAR "" /begin MEMORY_SEGMENT DLMU "" DATA RAM INTERN 0xB0000000 0x30000 -1 -1 -1 -1 -1 // 定义一个名为 DLMU 的内存段,类型为内部 RAM,起始地址 0xB0000000,长度 0x30000,其他参数为 -1 /begin IF_DATA XCPplus 0x0102 // 使用 XCPplus 通信协议,版本 1.2 /begin SEGMENT 0x00 // 段编号为 0 0x02 // 段属性为 0x02 0x00 // 其他参数 0x00 // 其他参数 0x00 // 其他参数 /begin PAGE 0x00 // 页面编号为 0 ECU_ACCESS_DONT_CARE // ECU 访问方式不关心 XCP_READ_ACCESS_DONT_CARE // XCP 读访问方式不关心 XCP_WRITE_ACCESS_NOT_ALLOWED // XCP 写访问不允许 /end PAGE /begin PAGE 0x01 // 页面编号为 1 ECU_ACCESS_DONT_CARE // ECU 访问方式不关心 XCP_READ_ACCESS_DONT_CARE // XCP 读访问方式不关心 XCP_WRITE_ACCESS_WITH_ECU_ONLY // XCP 写访问仅允许通过 ECU /end PAGE /end SEGMENT /end IF_DATA /end MEMORY_SEGMENT /begin MEMORY_SEGMENT DSPR_Core0 "" DATA RAM INTERN 0x70004000 0x2EFF0 -1 -1 -1 -1 -1 // 定义一个名为 DSPR_Core0 的内存段,类型为内部 RAM,起始地址 0x70004000,长度 0x2EFF0,其他参数为 -1 /begin IF_DATA XCPplus 0x0102 // 使用 XCPplus 通信协议,版本 1.2 /begin SEGMENT 0x00 // 段编号为 0 0x02 // 段属性为 0x02 0x00 // 其他参数 0x00 // 其他参数 0x00 // 其他参数 /begin PAGE 0x00 // 页面编号为 0 ECU_ACCESS_DONT_CARE // ECU 访问方式不关心 XCP_READ_ACCESS_DONT_CARE // XCP 读访问方式不关心 XCP_WRITE_ACCESS_NOT_ALLOWED // XCP 写访问不允许 /end PAGE /begin PAGE 0x01 // 页面编号为 1 ECU_ACCESS_DONT_CARE // ECU 访问方式不关心 XCP_READ_ACCESS_DONT_CARE // XCP 读访问方式不关心 XCP_WRITE_ACCESS_WITH_ECU_ONLY // XCP 写访问仅允许通过 ECU /end PAGE /end SEGMENT /end IF_DATA /end MEMORY_SEGMENT ```
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值