本文主要是介绍171220 逆向-i春秋【迎圣诞】-NoExec,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1625-5 王子昂 总结《2017年12月20日》 【连续第446天总结】
A. i春秋【迎圣诞】-NoExec
B.
后缀名写着exe,却不能运行~
用010Editor打开分析一下
发现NT头有很明显的问题
MagicNumber应该是50 45 00 00,被改为了HA
后面一个HA很明显也是后加的,查询一下发现这里是Machine,表示使用的处理器
正确的值应该为4C 01,即i386 - 332
修改以后发现还是不能运行,继续检查
想起来DOS头里有一个重要的值:e_lfanew,它表示了NE头的偏移
原值为00 01 00 00,很明显是错的,改正为10 01 00 00(0x110)
改完发现Windows都能识别出来它是个MFC了
然而双击以后响应了一会儿还是没东西出来
拖入OD也在加载器中就跳入SEH了,估计加载的时候还有什么错误,当时没有发现
但是知道它是MFC就有地方可以操作了:
无壳,拖入IDA,发现WinMain函数里没有好辨认的东西,查找字符串也没有可读的部分╮(╯_╰)╭
于是开始考虑从资源下手
用ResourceHacker查看控件ID,发现确认按钮的ID为1001
于是根据ID定位按钮函数,通过IDA的搜索立即数
(结构体自己导入)
这样就找到了函数:sub_402C30
结构很明显
查看check函数,发现先是通过下标的奇偶将字符串切成两个
然后分别将两个字符串base64,再连接起来
之后大段的代码太长不想看(。
反正没有对v76操作的地方
最后可以看出来是和一个字符串比较
直接把它拖下来解b64发现不可见,说明中间还有操作
到这里就陷入了僵局
回头重新研究
发现当用IDA调试的时候会报start函数执行失败
这个提示让我茅塞顿开,节区属性的可执行属性被关闭了!
原来题目名“NoExec“就给出提示了╮(╯_╰)╭奈何一直没get到
于是将代码所在节区.text的属性加上可执行(DWORD Executable : 1)
就可以运行了!
在OD中对刚才分析的结果b64后的字符串下断,断到sub_401EC0->sub_401CE0中进行了操作
在IDA中大概看了一下,很复杂╮(╯_╰)╭
掏出密码学分析插件看一眼,哼,果然在这个函数里有对DES_box的调用
那这个sub_401EC0就是DES没跑了
OD中对这个函数下断,发现它是每次截取8个字符进行DES,密钥通过对参数的观察发现是
6E 06 15 51 93 5B 07 EA
IDA中大概能看到是上面一堆复杂操作出来的….看不懂(望天
跑了一下发现这个密钥是不变的
解密出来由于是二进制值,所以还有一次base64转为可见字符
于是按照思路写出解密脚本:
from base64 import b64encode, b64decode
from Cryptodome.Cipher import DESk2 = [0x6E, 0x06, 0x15, 0x51, 0x93, 0x5B, 0x07, 0xEA]
key = bytes(k2)
x = DES.new(key, DES.MODE_ECB)
s = b"GcDk0SvnNA1tsmp5FCK1FpSDfUXZbhHBSPheZaixuMyzqyysOAPCPB/p7sMpmK1KZo+lPfhMZxw="
c = b64decode(s)
# 解密
p = x.decrypt(c)# 还原奇偶字符
x = b64decode(p)
y = b64decode(p[28:-4])
for i in range(37):if(i%2==0):print(chr(x[i//2]), end='')else:print(chr(y[i//2]), end='')
活动页面上写着难度为中下,不过这个题目着实难了我一会儿(:з」∠)
虽然复盘想想好像的确没有太复杂的东西,但是各种小细节还是挺麻烦的
学到和巩固了很多知识~感谢出题人和i春秋提供的题目(°∀°)ノ
C. 明日计划
加密与解密/看雪题目
这篇关于171220 逆向-i春秋【迎圣诞】-NoExec的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!