首页
社区
课程
招聘
[原创]Bingo.png图片逆向分析
2021-6-17 20:01 14866

[原创]Bingo.png图片逆向分析

2021-6-17 20:01
14866

Bingo图片逆向分析

 

1、题意分析:

此题题目叫做勾股定理,看来算法和这个应该是有关系的,附件下载下来是一个可爱的妹纸的图片,bingo.png,大小为1.82M,这么小一个图片,竟然有这么胖的体积,肯定不正常,里面包含了文件了。用winhex打开一看,PNG头图片文件,简单的拖了一下,有2大段EE和22的数据,感觉嫌疑比较大隐藏文件在其中。

 

 

2、提取EXE文件:

既然是有PNG文件,那么PNG文件结尾是啥,百度一下看看

 

49454E44AE426082结束,winhex里面查找一下看看,果然发现了,后面带送了一个MZ打头的文件,哈哈,不就是一个EXE文件头吗?看来有戏

 

 

把MZ开始的地址 188748开始到最后复制出来,生成一个exe文件,看看。

  

3、修复PE头文件:

生成出来的EXE文件是无法执行的,但是DOS却可以执行。在DOSBOX下执行结果是一个勾股定理的公式。这个提示应该不可能是FLAG,完全没有卵用。

 

看来要修复PE头文件,使用LOADPE打开发现是无效的头文件,看来病的不清,要动大手术了。

 

查看PE头文件资料得知,

 

000000E8,是指向PE头的,查看一下E8,发现E8是空的,原来改掉了啊,我勒个去,手工加上看看,


填充5045 PE字样,MAGIC字符,


 

吆西,可以执行了,但出来的是黑框,直接跳掉,太可怕了,咋整。


 

4、看来EXE本体也病的不清,OD载入看看,发现有壳的痕迹,点确定继续


 


 

入口点在44D000,执行后直接退出,这里花了不少时间分析,

执行到这一句就挂了,发现。

经过N次分析后发现,这个XOR应该是再解压缩壳,但是这个段代码没有写全,尝试补全,刚开始被

0044D017  - E9 C4BBFBFF     jmp 1.00408BE0

这个误导了,以为入口地址OEP不对而已,走了不少弯路。

我们再回到刚才的EE和22大段的地方,还记得不? 联系起来一想,我们很快就能发现,这小子在还原代码呀,我们再看一下代码段,是不是对上了,



 

我在看一下WINHEX,


 

发现应该是EE为XOR的加密代码,直接写代码还原吧。(截图错了,应该是 Xor byte ptr ds:[ebx],0xEE)

最终大致是这样的结果。


发现可以执行了。


 

毕达哥拉斯到底说了什么,我很好奇!!百度了一下,这个东西,以为是怪兽呢,原来是一个数学家,反正也不认真。直接IDA开干。(这个地方忘了,建议先脱壳一下。)

 

5、勾股定理算法:

拖入IDA,F5,代码很简单,但是没有FLAG,发现了和一个特殊字符串比较,难道这个就是FLAG,"zaciWjV!Xm[_XSqeThmegndq",可惜不是,我尝试提交,错了。哈哈


 

 

看来还得搞算法,方法到是看着很简单,还原起来不太好弄,还有+0.5是什么鬼,难道IDA搞错了。先分析一下,果然是2个POW,勾股定理啊,到时候很符合题意。

 

v0 = sub_401005(&v2, 52);


 

6、编写逆向算法:

本人水平很烂,花了不少时间,终于写出来了,其中就是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);

}


 跑出结果:


 

7、总结:

整个分析花一整天,也是学习到了不少基础知识。这个涉及的逆向知识还挺多的,记录一下。

  



[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2021-6-25 20:58 被yiting编辑 ,原因: 附件重新上传
上传的附件:
收藏
点赞9
打赏
分享
最新回复 (11)
雪    币: 12837
活跃值: (8998)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
hzqst 3 2021-6-18 10:14
2
0
老二次元了
雪    币: 1041
活跃值: (733)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
鸭子咯咯哒 2021-6-20 11:34
3
0
ida按f5反编译没效果
雪    币: 245
活跃值: (469)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yiting 2021-6-25 08:10
4
0
鸭子咯咯哒 ida按f5反编译没效果
记得要简单脱壳的
雪    币: 148
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
every_thing 2021-6-25 11:49
5
0
。。。你是把附件图片里面PE数据删掉了嘛
雪    币: 676
活跃值: (857)
能力值: ( LV4,RANK:42 )
在线值:
发帖
回帖
粉丝
trackL 2021-6-25 12:50
6
0
楼主是把干净的图传上来了?
雪    币: 245
活跃值: (469)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yiting 2021-6-25 20:58
7
0
trackL 楼主是把干净的图传上来了?
附件已经重新上传了 
雪    币: 245
活跃值: (469)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yiting 2021-6-25 20:59
8
0
every_thing 。。。你是把附件图片里面PE数据删掉了嘛[em_35]
附件已经重新上传了 
雪    币: 676
活跃值: (857)
能力值: ( LV4,RANK:42 )
在线值:
发帖
回帖
粉丝
trackL 2021-6-26 17:56
9
0
关于还原代码的部分,能劳驾具体说说吗?尝试了几种方法依然无法实现
雪    币: 245
活跃值: (469)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yiting 2021-6-27 20:29
10
0
trackL 关于还原代码的部分,能劳驾具体说说吗?尝试了几种方法依然无法实现
还原代码吗? 有修复PE了吗?  修复之后执行到入口点,DUMP下来,修正一下入口点就可以了。 相当于手工脱壳。
雪    币: 245
活跃值: (469)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yiting 2021-6-27 20:31
11
0
trackL 关于还原代码的部分,能劳驾具体说说吗?尝试了几种方法依然无法实现
用OD在入口点DUMP,或者用LOAD_PE保存都可以的,IAT应该好的,不用修复的。 
雪    币: 148
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
every_thing 2021-6-28 21:54
12
3
代码还原就一个功能,将RVA1000处的text段,大小3E000的数据用0x22异或解密,最后跳到原始入口点408BE0(这块汇编指令楼主已经贴出来了)。异或解密完后跳转到原始入口点408BE0用脱壳的方法dump保存即可。。。(本萌新第一次发言
游客
登录 | 注册 方可回帖
返回