前言

最近在写shellcode。发现shellcode生成的代码十分简单,也没有绝对跳转或者之类的需要重定位的东西,所以我感觉用这个来练手自动化加花还是很不错的

使用的库

Zydis和keystone

前者作为反汇编工具,后者作为从字符串生成机器码的工具。

原理

通过Zydis对代码进行解析,装入一个list中,然后执行混淆,这里我干了两个事:

  1. 判断是否有直接字符串数据压栈,有的话加密原内容,然后解密再压栈
  2. 打乱整个代码结构

1的话,通过Zydis生成字符串来检测,keystone生成机器码然后创建对应代码插入/修改list即可

2的话,通过分块每个块最后加jmp然后交换块的位置即可,但是好像cpp原生的list交换会导致一些bug,所以我准备之后重新写一下

实现

见github