本次题目跟第七届HWS线下的re2有类似的地方,均有后门函数。
二进制后门可以理解为:我们只需要修改某个字节或某个函数,就可以将加密的过程变成解密的过程,大大节省逆向成本。
本题先对内置的dll进行解密,然后调用其加密函数对我们的txt进行加密,如果我们将加密的函数nop为解密函数,就可以直接解密,类比与RC4动态解密技术。
1、初次分析
0地址异常反调试
本题的一大亮点就是有访问0地址的异常反调试,小伙伴们在做的时候有没有发现调试异常艰难呢
故意访问0地址
然后走作者自定义的处理函数,如果我们在IDA动调的时候不经过处理函数,程序就会卡在哪里不能继续运行。
做法很简单:将访问0地址的代码和异常处理函数完全给nop掉
(说白了:就是将所有跟异常有关的汇编都给nop掉就完事)
处理函数也是完整nop
返回处也nop,跟开头相对应
main函数
分析main函数,发现反编译爆红
很正常,查看汇编代码,发现了异常反调试和异常花指令干扰分析
做法很简单:直接nop即可
具体做法参考:上面一小节,0地址异常反调试
nop
成功生成函数
TLS回调函数
尝试运行,发现直接退出,发现了TLS反调试函数
nop即可
生成函数
将exit函数nop掉即可,不用管反调试的事情了
2、内置DLL资源解密
使用工具打开file_encrypt
发现内置 pe程序,猜测key为0x33,解密
这是程序使用0x33解密
发现了很多加密函数和解密函数(Crypt开头),因此本题程序使用本dll进行加密和解密操作
在后面的分析中,也发现了函数加载了我们的dll
3、关键函数分析
sub_401320
使用IDA动调发现了很多bug,莫名其妙断下,改用x64dbg
sub_402000
路径和盘符有关,比如我在C盘
C:......\document\1.txt
找到1.txt
sub_4017E0
加载dll
sub_4013E0
4、解密
既然使用了encrypto,那么我们改为decrypto就可以啦
I added the missing CryptDecrypt call to the binary's import table and patched the executable to decrypt the files. The decryption call takes one parameter less than the encryption one, so I NOP'ed one push to the