一、通用过程
- 通过file命令查看文件类型,判断是ELF还是PE,32位还是64位。
- 通过strings并重定向标准输出,然后搜索大括号 { ,看看是否能直接得到flag.
- 将程序运行一下,心里有个数。
- 通过ExeinfoPe查壳,如果有壳,通过upx -d [ 文件名 ] 去壳。
- 通过各种工具将文件反汇编+反编译(如果比较刚猛,也可以直接看二进制指令)
- 阅读代码,判断题型。
TIPS:
- 如果反编译后函数特别少,可能是因为加了壳。
- 如果反编译后找不到main函数,先通过CTRL+F搜一下,搜不到就说明函数名被隐藏了,这时候跑一下程序,然后看一下程序开始时的那串提示信息,在IDA中CTRL+S切换到rodata段,找到这个字符串,然后看它是在哪里被调用的即可找到main
- 一般而言,Java和Python的题会简单一点,因为反编译后的代码可读性更强。
二、手动破解
题型识别:要求你输入一个字符串,然后程序把你输入的字符串加密,再把加密后的字符串和存储在程序里的密文对比。显然你输入的即为flag,你需要根据密文和加密过程,反向推出flag.
- 自己写个脚本,根据加密算法进行解密即可。
- 请注意,当加密算法很复杂时,可能是用的某种加密算法。这时候应该善用搜索引擎去搜索现成的解密算法。