自动化代码混淆
前言
最近在写shellcode。发现shellcode生成的代码十分简单,也没有绝对跳转或者之类的需要重定位的东西,所以我感觉用这个来练手自动化加花还是很不错的
使用的库
Zydis和keystone
前者作为反汇编工具,后者作为从字符串生成机器码的工具。
原理
通过Zydis对代码进行解析,装入一个list中,然后执行混淆,这里我干了两个事:
- 判断是否有直接字符串数据压栈,有的话加密原内容,然后解密再压栈
- 打乱整个代码结构
1的话,通过Zydis生成字符串来检测,keystone生成机器码然后创建对应代码插入/修改list即可
2的话,通过分块每个块最后加jmp然后交换块的位置即可,但是好像cpp原生的list交换会导致一些bug,所以我准备之后重新写一下
实现
见github
评论