freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

后门函数技术在二进制对抗中的应用
2024-07-26 23:22:30

本次题目跟第七届HWS线下的re2有类似的地方,均有后门函数。

二进制后门可以理解为:我们只需要修改某个字节或某个函数,就可以将加密的过程变成解密的过程,大大节省逆向成本。

本题先对内置的dll进行解密,然后调用其加密函数对我们的txt进行加密,如果我们将加密的函数nop为解密函数,就可以直接解密,类比与RC4动态解密技术。

1、初次分析

0地址异常反调试

本题的一大亮点就是有访问0地址的异常反调试,小伙伴们在做的时候有没有发现调试异常艰难呢

202407251616636.png

故意访问0地址

202407251616637.png

202407251616638.png

然后走作者自定义的处理函数,如果我们在IDA动调的时候不经过处理函数,程序就会卡在哪里不能继续运行。

202407251616639.png

做法很简单:将访问0地址的代码和异常处理函数完全给nop掉

(说白了:就是将所有跟异常有关的汇编都给nop掉就完事)

202407251616640.png

处理函数也是完整nop

202407251616642.png

返回处也nop,跟开头相对应

main函数

分析main函数,发现反编译爆红

202407251616643.png

很正常,查看汇编代码,发现了异常反调试和异常花指令干扰分析

做法很简单:直接nop即可

202407251616644.png

具体做法参考:上面一小节,0地址异常反调试

202407251616645.png

nop

202407251616646.png

成功生成函数

202407251616647.png

202407251616649.png

202407251616650.png

TLS回调函数

尝试运行,发现直接退出,发现了TLS反调试函数

202407251616651.png

nop即可

202407251616652.png

生成函数

202407251616653.png

将exit函数nop掉即可,不用管反调试的事情了

202407251616655.png

2、内置DLL资源解密

使用工具打开file_encrypt

202407251616656.png

发现内置 pe程序,猜测key为0x33,解密

202407251616657.png

这是程序使用0x33解密

202407251616658.png

202407251616659.png

发现了很多加密函数和解密函数(Crypt开头),因此本题程序使用本dll进行加密和解密操作

在后面的分析中,也发现了函数加载了我们的dll

202407251616660.png

3、关键函数分析

202407251616650.png

sub_401320

202407251616661.png

202407251616662.png

使用IDA动调发现了很多bug,莫名其妙断下,改用x64dbg

【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注“freebuf”获取!】

① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

sub_402000

202407251616663.png

路径和盘符有关,比如我在C盘

C:......\document\1.txt

202407251616664.png

202407251616665.png

找到1.txt

202407251616666.png

sub_4017E0

202407251616667.png

202407251616668.png

加载dll


202407251616669.png

sub_4013E0

202407251616670.png

202407251616671.png

202407251616672.png

4、解密

既然使用了encrypto,那么我们改为decrypto就可以啦

202407251616673.png

202407251616674.png

202407251616675.png


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

stack as well:


202407251616676.png

202407251616677.png

202407251616678.png

202407251616679.png


# 后门 # 函数 # 二进制 # 加密解密
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录