记录一道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; }
标签:
Windows逆向
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源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 学习:类模板