记录一道ctf motorola指令集题目

前言:记录一道昨天比赛ctf motorola指令集题目

题目介绍

拖入到ida中分析的时候,ida就已经解析出来了是motorola指令的程序文件,如下图所示

这边ida无法支持反汇编转C,所以这边的话只能看指令来进行分析了

对于指令分析的话,自己是在网上找了一个对应motorola 68000指令集来进行参考分析的

motorola 68000指令集:http://wpage.unina.it/rcanonic/didattica/ce1/docs/68000.pdf

比较简单,总共其实就是分为两个部分,一个是异或操作,另外一部分就是判断字节操作

异或操作

在motorola处理器中里面a6和a1都是寄存器,a6寄存器相当于是ebp寄存器,a0寄存器相当于是esp寄存器

需要注意的指令有link指令提升栈顶,pea压入栈,bra无条件跳转,clr指令清空,jar相当于call调用子程序,bne不相等跳转,然后其中的比较重要的指令就是eori,eori指令就是进行异或操作

下面这一段的具体操作主要就是围绕输入的40个字节进行操作的,通过循环为每个字节先进行异或0x3f

判断操作

接下来就是简单的字节判断了,一共是40个字节的判断,这里依次记录下来就可以了,因为低地址开头数据在上面,而这里取值的时候-1 -1 -1,所以最后的数据才是在最开头的,所以这里取的值是下往上,最后写个脚本即可

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
  int a[40] = {0x59,0x53,0x5E,0x58,0x44,0x5C,0xD,0x5E,0xF,0xC,0x5E,0x5D,0x5D,0x9,0x6,0x8,0x6,0x5A,0x5A,0xB,0xB,0x5B,0x5D,0x8,0xF,0xE,0xA,0x5B,0x5E,0x8,0xC,0x7,0xC,0x8,0xD,0x5B,0x59,0x42,0x27 };
	for (int i = 0;i<40;i++) {
		printf("%c", a[i] ^ 0x3f);
	}
	return 0;
}

posted @ 2022-11-22 23:42  zpchcbd  阅读(273)  评论(0)    收藏  举报