此题题目叫做勾股定理,看来算法和这个应该是有关系的,附件下载下来是一个可爱的妹纸的图片,bingo.png,大小为1.82M,这么小一个图片,竟然有这么胖的体积,肯定不正常,里面包含了文件了。用winhex打开一看,PNG头图片文件,简单的拖了一下,有2大段EE和22的数据,感觉嫌疑比较大隐藏文件在其中。
既然是有PNG文件,那么PNG文件结尾是什么?百度一下看看:
49454E44AE426082结束,winhex里面查找一下看看,果然发现了,后面带送了一个MZ打头的文件,不就是一个EXE文件头吗?看来有戏。
把MZ开始的地址188748开始到最后复制出来,生成一个exe文件。生成出来的EXE文件是无法执行的,但是DOS却可以执行。在DOSBOX下执行结果是一个勾股定理的公式。这个提示应该不可能是FLAG,完全没有用。看来要修复PE头文件,使用LOADPE打开发现是无效的头文件,看来病的不清,要动大手术了。000000E8,是指向PE头的,查看一下E8,发现E8是空的,原来是改掉了,手工加上试试:可以执行了,但出来的是黑框,直接跳掉,太可怕了,怎么办?
看来EXE本体也病的不清,OD载入看看,发现有壳的痕迹,点确定继续。
入口点在44D000,执行后直接退出,这里花了不少时间分析。
发现执行到这一句就挂了。
经过N次分析后发现,这个XOR应该是再解压缩壳,但是这个段代码没有写全,尝试补全,刚开始被0044D017 - E9 C4BBFBFF jmp 1.00408BE0这个误导了,以为入口地址OEP不对而已,走了不少弯路。
我们再回到刚才的EE和22大段的地方,还记得吗?联系起来一想,我们很快就能发现,这小子在还原代码呀,我们再看一下代码段,是不是对上了?
发现应该是EE为XOR的加密代码,直接写代码还原吧。(截图错了,应该是 Xor byte ptr ds:[ebx],0xEE)毕达哥拉斯到底说了什么,我很好奇!百度了一下,以为是怪兽呢,原来是一个数学家,反正也不认真。直接IDA开干。拖入IDA,F5,代码很简单,但是没有FLAG,发现了和一个特殊字符串比较,难道这个就是FLAG,"zaciWjV!Xm[_XSqeThmegndq"?可惜不是,我尝试提交,错了。
看来还得搞算法,方法倒是看着很简单,还原起来不太好操作,还有+0.5是什么,难道IDA搞错了?先分析一下,果然是2个POW,勾股定理啊,到时候很符合题意。v0 = sub_401005(&v2, 52);
本人水平很烂,花了不少时间,终于写出来了,其中就是0.5想了半天,不知何意。猜测多次后,成功了,过程也是蛮简单的。直接用C写了一个:#include <stdio.h>#include <string.h>#include <cmath>int main()
{ char str1[] = "zaciWjV!Xm[_XSqeThmegndq"; int v7 = strlen(str1); char v6[25] = { '\0' }; memset(v6, 0, v7 + 1); int c = 52 - v7+1; //_strrev(str1);
for (int i =0; i < v7; i++)
{ //_strrev(str1);
char tmp = str1[0];
_strrev(str1);
str1[v7 - 1 - i] = '\0';
int y = pow(c, 2.0); int z = pow((double)tmp,2.0) + y; int zz = int((double)sqrt(z)+0.5);
v6[v7 - 1 - i] = zz;
c++;
} printf("The reverse string of str1 is: %s\n", v6);
}
整个分析花一整天,也是学习到了不少基础知识。这个涉及的逆向知识还挺多的,记录一下。看雪ID:yiting
https://bbs.pediy.com/user-home-29234.htm
*本文由看雪论坛 yiting 原创,转载请注明来自看雪社区
文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458387168&idx=2&sn=b7ff8510c4c080fd149b76e6da7a0817&chksm=b18f326a86f8bb7c839d73eb1c0b52a0fa2d0131813181efa7a2f79314798a525a0648eac9e5#rd
如有侵权请联系:admin#unsafe.sh