分析
点开文件可以看到一个可疑函数对文件地址进行操作
跟踪过去看一看
发现地址爆红,出现大量没有被解析的数据段
那么我们猜测这里是对文件进行保护的一个函数,那么我们将其异或回去,使用idc或者idapython
运行idapython脚本之后发现本来ida无法识别的汇编代码变得可以识别了,那么我们声明所有的未声明函数
就可以在下面找到输出flag的方法了
EXP
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<map>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<string>
#include<cstring>
#include<list>
#include<stdlib.h>
using namespace std;
typedef int status;
typedef int selemtype;
/*
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 永不宕机 永无BUG
*/
int ida_chars[] =
{
0xFA, 0x28, 0x8A, 0x80, 0x99, 0xD9, 0x16, 0x54,
0x63, 0xB5, 0x53, 0x49, 0x09, 0x05, 0x85, 0x58,
0x97, 0x90, 0x66, 0xDC, 0xA0, 0xF3, 0x8C, 0xCE,
0xBD, 0x4C, 0xF4, 0x54, 0xE8, 0xF3, 0x5C, 0x4C,
0x31, 0x83, 0x67, 0x16, 0x99, 0xE4, 0x44, 0xD1,
0xAC, 0x6B, 0x61, 0xDA, 0xD0, 0xBB, 0x55
};
int c[]={
0x92, 0x4F, 0xEB, 0xED, 0xFC, 0xA2, 0x4F, 0x3B,
0x16, 0xEA, 0x67, 0x3B, 0x6C, 0x5A, 0xE4, 0x07,
0xE7, 0xD0, 0x12, 0xBF, 0xC8, 0xAC, 0xE1, 0xAF,
0xCE, 0x38, 0x91, 0x26, 0xB7, 0xC3, 0x2E, 0x13,
0x43, 0xE6, 0x11, 0x73, 0xEB, 0x97, 0x21, 0x8E,
0xC1, 0x0A, 0x54, 0xAE, 0xB5, 0xC9,0x28
};
int main ()
{
for(int i = 0 ; i <= 46 ; i ++ )
{
printf("%c",ida_chars[i]^c[i]);
}
}
小结:
本方法不一定是最优方法,官方文档中有关于patch汇编代码修复漏洞的办法