<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Capstone 是一個輕量級的多平臺、多架構的反組合框架,該模組支援目前所有通用作業系統,反組合架構幾乎全部支援,本篇文章將運用LyScript外掛結合Capstone反組合引擎實現一個勾點掃描器。
要實現應用層勾點掃描,我們需要得到程式記憶體檔案的機器碼以及磁碟中的機器碼,並通過capstone這個第三方反組合引擎,對兩者進行反組合,最後逐條對比組合指令,實現程序勾點掃描的效果。
LyScript專案地址:https://github.com/lyshark/LyScript
通過LyScript外掛讀取出記憶體中的機器碼,然後交給第三方反組合庫執行,並將結果輸出成字典格式。
#coding: utf-8 import binascii,os,sys import pefile from capstone import * from LyScript32 import MyDebug # 得到記憶體反組合程式碼 def get_memory_disassembly(address,offset,len): # 反組合列表 dasm_memory_dict = [] # 記憶體列表 ref_memory_list = bytearray() # 讀取資料 for index in range(offset,len): char = dbg.read_memory_byte(address + index) ref_memory_list.append(char) # 執行反組合 md = Cs(CS_ARCH_X86,CS_MODE_32) for item in md.disasm(ref_memory_list,0x1): addr = int(pe_base) + item.address dasm_memory_dict.append({"address": str(addr), "opcode": item.mnemonic + " " + item.op_str}) return dasm_memory_dict if __name__ == "__main__": dbg = MyDebug() dbg.connect() pe_base = dbg.get_local_base() pe_size = dbg.get_local_size() print("模組基地址: {}".format(hex(pe_base))) print("模組大小: {}".format(hex(pe_size))) # 得到記憶體反組合程式碼 dasm_memory_list = get_memory_disassembly(pe_base,0,pe_size) print(dasm_memory_list) dbg.close()
效果如下:
我們將檔案反組合也寫一下,然後讓其對比,這樣就可以實現掃描記憶體與檔案中的組合指令是否一致。
#coding: utf-8 import binascii,os,sys import pefile from capstone import * from LyScript32 import MyDebug # 得到記憶體反組合程式碼 def get_memory_disassembly(address,offset,len): # 反組合列表 dasm_memory_dict = [] # 記憶體列表 ref_memory_list = bytearray() # 讀取資料 for index in range(offset,len): char = dbg.read_memory_byte(address + index) ref_memory_list.append(char) # 執行反組合 md = Cs(CS_ARCH_X86,CS_MODE_32) for item in md.disasm(ref_memory_list,0x1): addr = int(pe_base) + item.address dic = {"address": str(addr), "opcode": item.mnemonic + " " + item.op_str} dasm_memory_dict.append(dic) return dasm_memory_dict # 反組合檔案中的機器碼 def get_file_disassembly(path): opcode_list = [] pe = pefile.PE(path) ImageBase = pe.OPTIONAL_HEADER.ImageBase for item in pe.sections: if str(item.Name.decode('UTF-8').strip(b'x00'.decode())) == ".text": # print("虛擬地址: 0x%.8X 虛擬大小: 0x%.8X" %(item.VirtualAddress,item.Misc_VirtualSize)) VirtualAddress = item.VirtualAddress VirtualSize = item.Misc_VirtualSize ActualOffset = item.PointerToRawData StartVA = ImageBase + VirtualAddress StopVA = ImageBase + VirtualAddress + VirtualSize with open(path,"rb") as fp: fp.seek(ActualOffset) HexCode = fp.read(VirtualSize) md = Cs(CS_ARCH_X86, CS_MODE_32) for item in md.disasm(HexCode, 0): addr = hex(int(StartVA) + item.address) dic = {"address": str(addr) , "opcode": item.mnemonic + " " + item.op_str} # print("{}".format(dic)) opcode_list.append(dic) return opcode_list if __name__ == "__main__": dbg = MyDebug() dbg.connect() pe_base = dbg.get_local_base() pe_size = dbg.get_local_size() print("模組基地址: {}".format(hex(pe_base))) print("模組大小: {}".format(hex(pe_size))) # 得到記憶體反組合程式碼 dasm_memory_list = get_memory_disassembly(pe_base,0,pe_size) dasm_file_list = get_file_disassembly("d://win32project1.exe") # 迴圈對比記憶體與檔案中的機器碼 for index in range(0,len(dasm_file_list)): if dasm_memory_list[index] != dasm_file_list[index]: print("地址: {:8} --> 記憶體反組合: {:32} --> 磁碟反組合: {:32}". format(dasm_memory_list[index].get("address"),dasm_memory_list[index].get("opcode"),dasm_file_list[index].get("opcode"))) dbg.close()
此處如果一致,則說明沒有勾點,如果不一致則輸出,這裡的輸出結果不一定準確,此處只是拋磚引玉。
到此這篇關於利用LyScript實現應用層勾點掃描器的文章就介紹到這了,更多相關LyScript應用層勾點掃描器內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45