文章目录
基础框架
指令体系
逆向分析
算法识别
通常CTF中会出现base64、TEA、AES、RC4、MD5等算法
特征:
算法 | ||||||||
---|---|---|---|---|---|---|---|---|
base64 | 64+1位表、右移左移取二进制操作 | |||||||
TEA | 每轮加密涉及移位 <<4 >>5 与 delta常量(0x9e3779b9) | |||||||
AES | 主要特征为sbox(0x63)和逆sbox(0x52) | |||||||
RC4 | 涉及初始化函数和加密函数(交换s[i]与s[j])、 %256 | |||||||
MD5 | 散列常量:0x67452301、0xefcdab89、0x98badcfe、0x10325476 |
反调试
Windows
自动化反调试
当遇到花指令或其他需要Patch汇编时
- 使用IDAPatch
- 使用IDCPython自动化批量Patch
Linux
虚拟机保护
通常,VMProtect等商用软件采用了虚拟机保护技术,它们核心都会有一个vm_init阶段完成初始化自己的一套(ISA)指令集架构
脚本语言逆向
.NET/Python/Java
RxEncode
分析
静态分析 很像是换表的BASE64
关键算法:
C 库函数 **char strrchr(const char str, int c) 在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。
已经确定是换表的basee64解码,等待进一步完善RXEncode.py的EXP
Real_easy_python
分析
查壳是 python3.7的pyc文件
使用uncompyle6工具解码转换py:
root@ubuntu:~# uncompyle6 -o puzzle.py puzzle.pyc
解码代码:
# uncompyle6 version 3.7.4
# Python bytecode 3.7 (3394)
# Decompiled from: Python 3.5.2 (default, Jan 26 2021, 13:30:48)
# [GCC 5.4.0 20160609]
# Embedded file name: ./source.py
# Compiled at: 2020-08-03 05:55:47
# Size of source mod 2**32: 515 bytes
key = [
115, 76, 50, 116, 90, 50, 116, 90, 115, 110, 48, 47, 87, 48, 103, 50, 106, 126, 90, 48, 103, 116, 126, 90, 85, 126, 115, 110, 105, 104, 35]
print('Input your flag: ', end='')
flag = input()
out = []
for i in flag:
out.append(ord(i) >> 4 ^ ord(i))
if len(out) != len(key):
print('TRY AGAIN!')
exit()
for i in range(len(out)):
if out[i] != key[i]:
print('TRY AGAIN!')
exit()
print('you are right! the flag is : moectf{%s}' % flag)
EXP
顺加倒解
key = [
115, 76, 50, 116, 90