1. 确定文件类型 直接IDA或IDA64打开,利用IDA检查文件类型为:elf x86 64位 1. 尝试运行 出现“Segmentation”错误,一般来讲运行不起来要么就是出题不严谨没考虑库兼容问题,要么有坑。比如这题: 1. patch使其正常运行 使用IDA64打开,Crtl+e定位到EP,可看到不正确不平衡的堆栈初始化: IDA已经识别出“sp-analysis failed”,问题出在“sub rsp,0”根据底部的堆栈平衡代码可确定其本来应该是“sub rsp,8”。使用16进制编辑器直接修改机器码为“48 83 EC 08”或使用IDA patch插件修改汇编语句: 再次运行尝试,OK
1. 定位关键函数算法 IDA string窗口发现特殊的字串: 可以很轻易的定位到关键算法函数: 1. 动静态结合破解算法 Gdb ./SimpleRev_m开启调试,因为其未删除程序符号可以直接“b main”下main断点,单步进入到Decry()函数后,使用“b *Decry-0x93a+0xbaa”直接下strcmp关键比较函数,c继续运行,输入“12345678”后验证其比较参数: 继续输入“23456789”验证其第一个目标字串并未改变: Text字串固定为“killshadow”,str2的求取中,v3为字串指针,v2为flag输入,关键为key数组: 下key的两个引用断点“b *Decry-0x93a+0xb22” “b *Decry-0x93a+0xab7”,可得到固定的key数组“adsfkndcls”: 所以可以确定加密算法为: (X-0x27-key[‘adsfkndcls’])%26=str2[‘killshadow’]
1. 编写枚举脚本 确定flag区间: 一.‘A’~‘Z’ 二.0x00~0x26、0x7B~0x7F Python脚本运行得到flag为:“KLDQCUDFZO”
|