HWS计划2021硬件安全冬令营线上选拔赛 |
您所在的位置:网站首页 › hws冬令营 › HWS计划2021硬件安全冬令营线上选拔赛 |
HWS计划2021硬件安全冬令营线上选拔赛逆向部分wp
没有参加比赛,赛后复现一波re,感觉题都还可以,别的师傅说难度不大,但是我感觉对我来说挺难的😵 babyre一道hook题,ida打开代码还是比较清晰的,首先判断长度然后在加密,但是我没有搞清楚这个hook的流程,听别的师傅说的在CRT的时候,从r3到r0时候hook的😥(听的不是很懂),但是我瞎找找到这两个函数 资源解密 资源加载 可以看出程序加载了一个叫CIPHER_DLL的资源,这个资源其实就是经过加密的DLL,我用ResourceHacker(一个可以查看程序资源的工具)来查看程序中的资源 程序中确实有一个叫CIPHER_DLL的资源,且这个资源需要解密才能使用,图中 wow! 就是证明,把这个资源的二进制文件提出来,在解密回去,得到一个DLL import struct import os //解密资源 def ResourceDecrypt(): filepath = 'C:\\Users\\86180\\Desktop\\CIPHER_DLL101' dllpath = 'C:\\Users\\86180\\Desktop\\DLL.dll' key = 'wow!' size = os.path.getsize(filepath) # 获得文件大小 with open(filepath, 'rb') as cipher_stream: with open(dllpath, 'wb') as dll_stream: for i in range(size): data = struct.unpack('B', cipher_stream.read(1))[0] ^ ord(key[i%4]) dll_stream.write(struct.pack('B', data))把DLL用ida打开,查看加密函数,字符串已经告诉我们是SM4加密,没有魔改. SM4Github代码链接 from ida import ida_bytes import pysm4 # 从ida中提取加密后的数据 def Dump_ida_data(): addr = 0x00BFA808 res = [] for i in range(32): res.append(get_byte(addr + i)) print(bytes(res).hex()) # 利用GitHub上找的sm4脚本,写的解密函数 def Decrypt(): string = b'Ez_5M4_C1pH@r!!!'.hex() key = 0x457a5f354d345f433170484072212121 cipher1 = 0xea6358b78ce2a1e9c5298f53e8083259 cipher2 = 0xaf1b67aed9dacfc472ffb1ec7673f306 plain1 = hex(pysm4.decrypt(cipher1, key))[2:] plain2 = hex(pysm4.decrypt(cipher2, key))[2:] for i in range(0,len(plain1),2): print(chr(int(plain1[i:i+2],16)),end='') for i in range(0,len(plain1),2): print(chr(int(plain2[i:i+2],16)),end='') # flag{42b061b4cb41cfa89ca78047bde1856e}参考看雪的一篇文章:https://bbs.pediy.com/thread-95082.htm 这道题考的是双进程守护问题,上面的文章和这道题类似,但是难点在于调试。 ida打开后发现主函数无法正常反编译,而且看到了int3中断异常指令。由于是双进程守护,需要找到创建子进程的地方 通过搜索CreateProcess函数,确定子进程由函数sub_413670创建 继续跟踪,确定了两个函数调用子进程,分别是sub_413BE0和sub_413950 而函数sub_413950是一个关键函数,他对子进程做了修改。如果想让ida正确的反编译,我们需要nop掉所有的int3指令,且按照程序修改部分指令,这里我用010Editor进行修改。 首先找到所有的int3指令 tea加密的key是在运行时生成的,但是如果不动态调试也可以直接复制整个函数跑一遍也可以,我喜欢动态调试(懒) 生成了8个数据,但是只用到了前四个,后面只需要找到加密后的数据就ok了,这里我用idapython |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |