两题学了一点骚操作 简单记录一下
REVERSE
0x00 SimpleRev
这题主要是文件的修复 但不修也行 因为里面的代码逻辑还是比较简单的
查看文件是个ELF文件 尝试用Linux虚拟机打开 出现了段错误的提示 用ida打开查看
发现有错误 显示sp-analysis failed
能看到上面sub rsp 0
下面add rsp 8
不平衡 错误点在这里
所以用ida的patch功能修改字节
不修改也行 直接去看内部代码逻辑
1 | unsigned __int64 Decry() |
逻辑过程注释里写明白了
下面是简单的解密代码
1 | a='killshadow' |
最后的flag是 ‘KLDQCUDFZO’
修改堆栈
显示堆栈指针Stack Pointer (option->General->Disassembly选中stack pointer)
能看到 程序故意写了一条 add esp,1Eh
其实这条不会执行,但是ida不知道也把它分析了,更改了栈顶esp的值 导致最后esp的值是 -1Eh
所以解决方法有两个
- 在add那条汇编那里 右键 change stack pointer
把difference between old and new 那里改成0, 就是相当于add那句不会改变esp - 直接把add 改成 add 0h.
0x01 GAesDecode
整体上不难 是一道AES加密的变形 只需要对AES解密脚本进行一点点微小的变形即可
用jeb打开进入主要函数
1 | protected void onCreate(Bundle savedInstanceState) { |
提示里也说了 是一个变形的AES加密
key是 'This is a AES-like encryption algorithm. However, we do some change. Therefore, you cannot directly use security class to decrypt the message. Our challenge is to find the plain text of this encrypt message with th fixed key. '
然后加密后的和 kNk3Qz+l/kLpGuKxf5iGE9cOoTmmn9Ac+UdF4b2CHqU=
比较
所以只需要去和网上的加密代码进行比较就行
这题和2018XCTF冬令营的结课考核题差不多
2018XCTF哈尔滨冬令营结营赛DecodeMe-Writeup
列变化的时候0x1b->0x1d