记录一道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 @   zpchcbd  阅读(183)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2019-11-22 python3 爆破SSH
2019-11-22 学习:类模板
点击右上角即可分享
微信分享提示