欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析shellcode 反匯編模擬運行及調(diào)試方法

 更新時間:2020年02月18日 08:33:44   作者:potatso  
這篇文章主要介紹了shellcode 反匯編,模擬運行以及調(diào)試方法,本文給大介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下

onlinedisassembler

https://onlinedisassembler.com 在線反匯編工具,類似于lda。功能比較單一。

Any.run 等平臺在線分析

  • 將shellcode保存為文件
  • 通過如下腳本,轉(zhuǎn)換shellcode為char數(shù)組
import binascii
filename = "C:\\Users\\liang\\Desktop\\工作相關(guān)\\樣本\\rdpscan\\rdpscan\\ssleay32.dll"
#filename = "C:\\Users\\liang\\Desktop\\payload"

shellcode = "{"
ctr = 1
maxlen = 15

for b in open(filename, "rb").read():
 shellcode += "0x" + str(binascii.hexlify(b.to_bytes(length=1, byteorder='big')))[2:4] + ","
 if ctr == maxlen:
 shellcode += "\n"
 ctr = 0
 ctr += 1
shellcode = shellcode[:-1] + "}"
print(shellcode)

1,將結(jié)果復(fù)制到char shellcode處,并 通過如下vs程序加載shellcod

#include <windows.h>
#include <stdio.h>
#include <string.h>
#pragma comment(linker, "/section:.data,RWE") 
unsigned char shellcode[] = 復(fù)制到這里
typedef void(__stdcall* CODE) ();
int main()
{
 PVOID p = NULL;
 if ((p = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE)) == NULL)
 MessageBoxA(NULL, "申請內(nèi)存失敗", "提醒", MB_OK);
 if (!(memcpy(p, shellcode, sizeof(shellcode))))
 MessageBoxA(NULL, "寫內(nèi)存失敗", "提醒", MB_OK);
 CODE code = (CODE)p;
 code();
 return 0;
}

1.設(shè)置c運行庫的靜態(tài)編譯,如圖設(shè)置,將運行庫設(shè)置為多線程/MT

點擊生成解決方案,將生成的exe上傳至Any.run去分析如圖,即可通過在線分析平臺去分析shellcode。簡單快捷

槽點主要有如下幾方面:

  • 一定要選擇靜態(tài)編譯c運行庫,因為Any.run 的運行庫可能會不全。以防萬一
  • shellcode不可以是\xFF 這類形式,必須是0xFF。因為前者屬于字符串,后者屬于數(shù)組。待分析的shellcode較大,超過65535字節(jié)后,vs在編譯時會報錯 fatal error C1091: compiler limit: string exceeds 65535 bytes in length

scdbg

windows shellcode運行模擬器,模擬運行shellcode 對于簡單的shellcode 推薦使用此方法,模擬運行找到c2地址

使用文章以及介紹

https://isc.sans.edu/forums/diary/Analyzing+Encoded+Shellcode+with+scdbg/24134

優(yōu)點

  • 支持debug shellcode
  • dum內(nèi)存
  • 重定向tcp請求到其他機器,但是不支持urlopen等函數(shù)

缺點:

功能較為單一,模擬運行不是很全。有時候可能執(zhí)行不到某些流程。并且沒有實現(xiàn)部分dll的導(dǎo)出函數(shù)圖片

下載鏈接

http://sandsprite.com/CodeStuff/scdbg.zip

miasm

miasm是一個python llvm寫的逆向工程框架。

但是官方中提供了很多例子,我們可以直接利用官方提供的腳本去完成很多任務(wù)

miasm不僅僅支持pe文件,還支持elf等,支持x86,arm,mips等架構(gòu)

miasm功能不僅僅局限于這些,還有很多好玩的功能,例如自動化脫殼等。參考

https://miasm.re/blog/index.htmlhttps://github.com/cea-sec/miasm/

miasm 反編譯shellcode

使用graphviz 加載got文件,獲得如下

同理 arm的選擇arm,mips選擇mips處理器類型

如果不像使用官方自帶,可以自己寫

沙箱中運行shellcode

記錄每步運行的各種寄存器的值

沙箱中運行可執(zhí)行系統(tǒng)文件

在知道系統(tǒng)架構(gòu)的情況下 可以選擇相應(yīng)系統(tǒng)架構(gòu)的sandbox,運行shellcode,從而獲得更多信息

可以支持自寫dll,方便hook,如圖,但是我沒寫

支持的系統(tǒng)架構(gòu)如下

其他功能

1.添加斷點

 # A breakpoint callback takes the jitter as first parameterdef dump(jitter):
  # Dump data ad address run_addr with a length of len(data)
  new_data = jitter.vm.get_mem(run_addr, len(data))
  # Save to disk
  open('/tmp/dump.bin', 'wb').write(new_data)
  # Stop execution
  return False

 # Register a callback to the breakpointmyjit.add_breakpoint(0x4000004b, dump)...myjit.cpu.EAX = 0x40000000myjit.init_run(run_addr)myjit.continue_run()

1.hook沙箱中系統(tǒng)函數(shù)和peb等和數(shù)據(jù)結(jié)構(gòu)例如hook urlmon_URLDownloadToCacheFileW

def urlmon_URLDownloadToCacheFileW(jitter):
  ret_ad, args = jitter.func_args_stdcall(["lpunkcaller",
             "szurl",
             "szfilename",
             "ccfilename",
             "reserved",
             "pbsc"])
  url = jitter.get_str_unic(args.szurl)
  print "URL:", url
  jitter.set_str_unic(args.szfilename, "toto")
  jitter.func_ret_stdcall(ret_ad, 0)

注意 有時候程序調(diào)用沙箱沒有實現(xiàn)的api,則需要通過上述該方法自己實現(xiàn)一個 sandbox 默認(rèn)只實現(xiàn)了以下幾個dll的導(dǎo)出函數(shù) ntdll.dll", "kernel32.dll", "user32.dll", "ole32.dll", "urlmon.dll", "ws2_32.dll", 'advapi32.dll', "psapi.dll"

1.讀寫并修改系統(tǒng)可執(zhí)行文件

例如pe文件的修改,添加.text區(qū)段,修改pe文件結(jié)構(gòu)等。當(dāng)然,也支持elf,mach-o文件的修改等

import sys
from elfesteem import pe_init

# Get the shellcode
data = open(sys.argv[1]).read()
# Generate a PE
pe = pe_init.PE(wsize=32)
# Add a ".text" section containing the shellcode to the PE
s_text = pe.SHList.add_section(name=".text", addr=0x1000, data=data)
# Set the entrypoint to the shellcode's address
pe.Opthdr.AddressOfEntryPoint = s_text.addr
# Write the PE to "sc_pe.py"
open('sc_pe.exe', 'w').write(str(pe))

思維擴展sandbox加載一個pe文件在pe文件中申請一段內(nèi)存,存放shellcode修改eip到shellcode處運行

好處,可以結(jié)合pe文件自動分析,分析處該shellcode的具體行為

OD加載shellcode

方法一

需要安裝Olly Advanced 插件

隨便load一個應(yīng)用程序Alt+m 打開內(nèi)存頁面,添加內(nèi)存,如圖

將shellcode復(fù)制進去設(shè)置新的eip

方法二

該方法靈活應(yīng)用

如圖我們可以看出,加載shellcode的方式有以下幾個步驟

調(diào)用virtualloc申請內(nèi)存,屬性為可寫可執(zhí)行。用來存放shellcode

調(diào)用createprocess 執(zhí)行shellcode

注意,并不是一定通過createprocess去執(zhí)行shellcode。也可以通過內(nèi)聯(lián)匯編jmp,setThreadContext等方式去執(zhí)行shellcode。理論上,只要可以修改eip,就可以執(zhí)行shellcode

od中輸入命令 bp createprocess

等運行shellcode的時候,od會自動停在createprocess處,也就是shellcode開始執(zhí)行的位置。如圖

總結(jié)

以上所述是小編給大家介紹的淺析shellcode 反匯編模擬運行及調(diào)試方法,希望對大家有所幫助!

相關(guān)文章

  • 匯編語言 and和or邏輯運算指令的實現(xiàn)

    匯編語言 and和or邏輯運算指令的實現(xiàn)

    這篇文章主要介紹了匯編語言 and,or邏輯運算指令的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 匯編語言功能實現(xiàn)數(shù)據(jù)復(fù)制實例詳解

    匯編語言功能實現(xiàn)數(shù)據(jù)復(fù)制實例詳解

    這篇文章主要為大家介紹了匯編語言功能實現(xiàn)數(shù)據(jù)復(fù)制的實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • 匯編語言AAD,DAA,DAS用法解析

    匯編語言AAD,DAA,DAS用法解析

    這篇文章主要介紹了匯編語言AAD,DAA,DAS用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • 匯編實現(xiàn)的memcpy和memset的方法

    匯編實現(xiàn)的memcpy和memset的方法

    這篇文章主要介紹了匯編實現(xiàn)的memcpy和memset的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 匯編語言指令大全 X86和X87匯編指令大全(帶注釋)

    匯編語言指令大全 X86和X87匯編指令大全(帶注釋)

    匯編指令集太多,如果不用就會忘記,所以將i處理器官方的指令集大全寫到博客上,有需要的人可以參考一下
    2021-10-10
  • 匯編語言中test和cmp有什么區(qū)別

    匯編語言中test和cmp有什么區(qū)別

    匯編語言(assembly language)是一種用于電子計算機、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。這篇文章主要介紹了匯編語言中test和cmp有什么區(qū)別,需要的朋友可以參考下
    2020-01-01
  • 匯編基礎(chǔ)教程段的定義應(yīng)用詳解

    匯編基礎(chǔ)教程段的定義應(yīng)用詳解

    這篇文章主要為大家介紹了匯編基礎(chǔ)教程段的基本定義與應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • DEBUG命令詳解教程

    DEBUG命令詳解教程

    DEBUG命令詳解教程...
    2007-03-03
  • 匯編 函數(shù)調(diào)用的實現(xiàn)

    匯編 函數(shù)調(diào)用的實現(xiàn)

    這篇文章主要介紹了匯編 函數(shù)調(diào)用的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 純匯編實現(xiàn)打飛機小游戲的示例代碼

    純匯編實現(xiàn)打飛機小游戲的示例代碼

    這篇文章主要介紹了純匯編實現(xiàn)打飛機小游戲的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01

最新評論