REVERSE-PRACTICE-CthulhuOJ

  • Cthulhu OJ-simple
  • Cthulhu OJ-easy-VM

Cthulhu OJ-simple

exe程序,运行后提示输入flag,无壳,用ida分析
main函数,输入和下标异或,结果与已知的res数组比较

写逆异或运算脚本即可得到flag

res=[122,114,118,118,103,113,96,124,92,97,59,120,83,60,125,80,113,78,39,34,121,101,122,114,71,126,91,118,121,96,30]
flag=[]
for i in range(0,31):flag.append(i^res[i])
print(''.join(chr(i) for i in flag))
#zstuctf{Th1s_1s_a_51mple_gAme}

Cthulhu OJ-easy-VM

elf文件,运行后输入,无壳,ida分析
main函数逻辑清晰,读取输入,限制输入的最大长度为32,将输入传入vm进行变换,将变换后的输入与已知字符串进行比较,验证输入

进入start_vm函数,感觉由opcode决定的各种运算非常乱,几个字节来回交换,也有异或运算,不太明白怎么写逆vm脚本

__int64 __fastcall start_vm(const char *a1, __int64 a2)
{__int64 result; // rax__int64 v3; // [rsp+0h] [rbp-20h]unsigned __int8 v4; // [rsp+1Fh] [rbp-1h]v3 = a2;state = a2;while ( 1 ){result = (unsigned __int8)a1[(unsigned __int8)byte_5640DC557028];v4 = a1[(unsigned __int8)byte_5640DC557028];if ( !v4 )break;switch ( (unsigned int)off_5640DC355F50 ){case 1u:li(a1[(unsigned __int8)byte_5640DC557028 + 1], (unsigned __int8)a1[(unsigned __int8)byte_5640DC557028 + 2]);break;case 2u:lb(a1[(unsigned __int8)byte_5640DC557028 + 1], (unsigned __int8)a1[(unsigned __int8)byte_5640DC557028 + 2]);break;case 3u:sb(a1[(unsigned __int8)byte_5640DC557028 + 1], a1[(unsigned __int8)byte_5640DC557028 + 2]);break;case 4u:sub(a1[(unsigned __int8)byte_5640DC557028 + 1],a1[(unsigned __int8)byte_5640DC557028 + 2],a1[(unsigned __int8)byte_5640DC557028 + 3]);break;case 5u:xor(a1[(unsigned __int8)byte_5640DC557028 + 1],a1[(unsigned __int8)byte_5640DC557028 + 2],a1[(unsigned __int8)byte_5640DC557028 + 3]);break;case 6u:jmp(a1[(unsigned __int8)byte_5640DC557028 + 1]);break;case 7u:beq(a1[(unsigned __int8)byte_5640DC557028 + 1],a1[(unsigned __int8)byte_5640DC557028 + 2],a1[(unsigned __int8)byte_5640DC557028 + 3]);break;case 8u:call(a1[(unsigned __int8)byte_5640DC557028 + 1]);break;case 9u:ret();break;default:printf("unrecognized opcode: %#x\n", v4, v3);break;}byte_5640DC557028 += 4;}return result;
}

动调,把最后要比较的字符串当作输入,发现经过vm变换后直接得到了flag
需要注意的是,输入的长度限制为32,已知的字符串不考虑转义字符的话,其长度为33,所以调试的时候,输入要把多出来的一个"\"去掉,经过vm即可得到flag

REVERSE-PRACTICE-CthulhuOJ相关推荐

  1. linux内核路由反向检查,反向路径过滤——reverse path filter

    反向路径过滤--reverse path filter 一.原理 先介绍个非对称路由的概念 参考<Understanding Linux Network Internals>三十章, 30 ...

  2. java中Collections常用方法总结(包括sort,copy,reverse等)

    1.sort(Collection)方法的使用(含义:对集合进行排序). 例:对已知集合c进行排序public class Practice {public static void main(Stri ...

  3. A Guide To Reverse Tethering

    By Kevin Pocock on February 04, 2013 Using a mobile device such as a smartphone to act as a hotspot ...

  4. picoCTF,Reverse Engineering,逆向类,42/55

    picoCTF,Reverse Engineering,42/55 2019 picoCTF 01.vault-door-training,50分 02.vault-door-1,100分 03.va ...

  5. PAT (Advanced Level) Practice 题解代码 - II (1051-1100)

    PAT PAT (Advanced Level) Practice - II(1051-1100) -------------------------------------------------- ...

  6. (Python) PAT(Basic Level) Practice 刷题笔记(34-66)

    我的代码仅能解题,效率不高也不够简洁,欢迎师傅们提出建议,能让我加以改进. Practice 1036 跟奥巴马一起编程 (15 分) 1037 在霍格沃茨找零钱 (20 分) 1038 统计同成绩学 ...

  7. minty_Brit666‘s python practice no.2

    minty_Brit666 Today's blog is about the practice of the leetcode. And I'll give my own answer in thi ...

  8. 【水一波题解】题解 of University of Central Florida 2020 (Fall) “Practice” Local Programming Contest

    题解 of University of Central Florida 2020 (Fall) "Practice" Local Programming Contest [by_0 ...

  9. 动态规划十大经典案例(Dynamic Programming Practice Problems)

    目录 leetcode 53 最大子序列和(Maximum Value Contiguous Subsequence) leetcode 53 零钱兑换(Making Change) LeetCode ...

  10. 206. Reverse Linked List

    Reverse a singly linked list. 反转单链表 C++(9ms):  迭代 1 /** 2 * Definition for singly-linked list. 3 * s ...

最新文章

  1. VTK修炼之道35:边缘检测_Laplace算子
  2. 珠心算测试(c++版)
  3. mongodb集群与分片的配置说明
  4. Java IO 系统
  5. LeetCode 12/13 罗马数字与整型互转(哈希,贪心)
  6. 从入门到头秃,2018年机器学习图书TOP10
  7. Python基础知识(1)简介
  8. HDU2023 求平均成绩【入门】
  9. MySQL中查询字段为空或者为null方法
  10. java判断三个数字范围是否有交集_Python基础1之数字
  11. app抓包工具_安卓APP逆向入门分析——破解某APP登陆请求参数
  12. MongoDB学习笔记之索引(一)
  13. C++面试知识总结-C++基础知识
  14. 原腾讯副总裁,Google资深研究员吴军:ChatGPT不算新技术革命,带不来什么新机会...
  15. SAAS云平台搭建札记: (一) 浅论SAAS多租户自助云服务平台的产品、服务和订单
  16. 专科段《财务管理》课程复习资料(2)——多项选择题
  17. 在VMware上安装win10
  18. Centos7 系统更改apache默认网站目录(解决You don't have permission to access / on this server问题)...
  19. WIFI模块透传基础试验-AP toSTR
  20. 远程访问本地搭建的个人云盘【无公网IP】

热门文章

  1. linux 视频学习
  2. 大叔手记(21):汤姆大叔博客园开博100天总结
  3. c语言中x的n次方怎么表示_线性代数的本质及其在人工智能中的应用
  4. jdbctemplate 开启事务_SpringBoot 系列教程之事务隔离级别知识点小结
  5. python网络通信框架_【python:flask-SocketIO】网络通信框架简单了解
  6. php 废弃,PHP 7 废弃特性
  7. c++ 线程什么时候run_多线程并发支撑基础之JAVA内存模型
  8. C#中的前台线程和后台线程的区别
  9. xpath中两个冒号_爬虫学习(5)—XPath
  10. Spring MVC:The request sent by the client was syntactically incorrect