日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

开源一个ShellCode生成框架

發布時間:2025/3/21 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 开源一个ShellCode生成框架 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 前言
    • 項目預覽
    • 項目配置
    • 文件命名與作用
    • ShellCode大小的計算方法
    • 第一部分 ShellCode生成
    • 第二部分 ShellCode部分
    • ShellCode加載器
    • 如何提取ShellCode
    • 如何擴展ShellCode框架?
    • 參考資料
    • 項目下載

前言

現階段,shellcode編寫門檻高,大多需要有較深的匯編功底,而Metersploit上的Shellcode開源生成框架,功能單一,擴展性差,大多只能在demo中測試使用,難以在實戰中發揮作用。

我的這個版本用純C語言實現了Windows平臺下自己的Shellcode生成器,能在實戰中根據現實情況,自動生成所需功能的Shellcode。

項目預覽

整個項目大致如下:后面會講解每一個文件的作用

項目配置

首先來說一下自己的這個項目的設置,本項目使用VS2013編譯

  • 編譯時選擇 realse版本 屬性->C/C+±>代碼生成->運行庫->多線程 (/MT)
  • 為了防止編譯器自動生成的一系列代碼造成的干擾 需要修改入口點 在屬性->鏈接器->高級
  • 屬性->C/C+±>代碼生成->禁用安全檢查GS
  • 關閉生成清單 屬性->鏈接器->清單文件->生成清單 選擇否
  • 關閉調試信息 屬性->鏈接器->生成調試信息->否
  • 取消SDL安全檢查
  • 兼容XP 選擇屬性->常規->平臺工具集->Visual Studio 2013 - Windows XP (v120_xp)
  • C/C++優化 優化->使大小最小化 (/O1) 優化大小或速度->代碼大小優先 (/Os)
  • 文件命名與作用

    我的這個框架分為兩個部分,一個是ShellCode的生成部分,還有一個是ShellCode部分

    之所以采用這樣的文件命名的方式是為了方便計算ShellCoede的大小。文件的編譯順序就是編譯后的exe函數的排列順序。具體來說這個項目的文件編譯順序是0.entry.cpp->a.start.cpp->b.work.cpp->z.end.cpp(main.cpp是另外一個工程),那么代碼段中的函數排列順序也會和文件的編譯順序一致 下面說一下每個文件的作用

    • api.h->存放所有和api函數相關的結構體及函數指針
    • hash.h->存放需要用到的API函數的哈希定義宏
    • header.h->存放頭文件及函數聲明
    • 0.entry.cpp->存放ShellCode函數的入口
    • a.start.cpp->存放ShellCodeStart(標記一個起始位置)和真正的ShellCode代碼
    • b.work.cpp->存放ShellCode中的起作用的代碼
    • z.end.cpp->存放ShellCodeEnd函數(標記一個結束位置)

    ShellCode大小的計算方法

    首先我在a.start.cpp中放了一個ShellCodeStart函數,用于標記ShellCode的開始位置

    然后在z.end中放了一個ShellCodeEnd函數,用來標記ShellCode的結束位置,然后將真正的ShellCode放在a和z之間

    那么根據文件的編譯順序,只需要用ShellCodeEnd函數的位置減去ShellCodeStart函數的位置,就能得到ShellCode的大小

    第一部分 ShellCode生成

    首先來說明ShellCode的生成部分,這個部分在0.entry.cpp中,同時將入口點修改為EntryMain,也就是說這是整個工程的main函數

    這個ShellCode生成函數會計算ShellCode的大小,然后將ShellCode寫到一個二進制文件,可以省去在OD中提取ShellCode的步驟

    第二部分 ShellCode部分

    真正的ShellCode代碼存放在a.start中的ShellCodeEntry函數里

    首先我定義了一個結構體Functions,這個結構體存放所有需要用到的函數指針

    接著通過計算哈希的方式獲取到需要的函數地址并將所需要的模塊加載進來

    接著調用MessageBox函數

    ShellCode加載器

    另外我還寫了一個ShellCodeLoader用于測試寫好的ShellCode,代碼相對來說比較簡單

    就是將ShellCode讀取到內存然后執行

    如果你所編寫的ShellCode沒有文件,當雙擊ShellCodeLoader時,就會執行生成的ShellCode.bin文件

    如果執行成功,說明ShellCode沒有問題

    如何提取ShellCode

    在編寫好ShellCode之后點擊ShellCodeFrame.exe會生成ShellCode.bin,然后用二進制文件打開ShellCode.bin,復制所有代碼即可

    如何擴展ShellCode框架?

    我的這個框架并只寫了一個示例的MessageBox函數,具體擴展的步驟如下:

  • 在api.h中定義所需要的函數指針,并將函數指針存放到結構體
  • 在hash.h中定義需要用的到函數的哈希值
  • 在b.work的Initfunctions函數中獲取函數指針和加載需要的模塊
  • 在ShellCodeEntry中調用函數
  • 參考資料

    《Windows平臺高效Shellcode編程技術實戰》

    PIC_BINDSHELL(Github):
    https://github.com/mattifestation/PIC_Bindshell

    項目下載

    https://github.com/TonyChen56/ShellCodeFrame

    總結

    以上是生活随笔為你收集整理的开源一个ShellCode生成框架的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。