当前位置: 首页 > article >正文

FreakStudio俅

环境安装pip install keystone-engine capstone unicorn这3个工具用法极其简单下面通过示例来演示其用法。Keystone示例from keystone import *CODE bINC ECX; ADD EDX, ECXtry:ks Ks(KS_ARCH_X86, KS_MODE_64)encoding, count ks.asm(CODE)print(f汇编指令数量: {count})print(f机器码 (十进制): {encoding})print(f机器码 (Hex): {.join(f{x:02x} for x in encoding)})except KsError as e:print(fERROR: {e})代码解释代码流程十分简单初始化keystone-编译代码-输出结果初始化keystoneks Ks(KS_ARCH_X86, KS_MODE_64)初始化keystone引擎第一个参数选择指令架构例如x86arm......第二个参数选择模式例如64位32位小端序......编译代码将汇编转换为16进制的shellcodeencoding, count ks.asm(CODE)第一个返回值机器码指令的数组第二个返回值汇编指令数量Capstonecapstone的用法和keystone差不多。示例from capstone import *CODE b\xff\xc1\x01\xcamd Cs(CS_ARCH_X86, CS_MODE_64)print(地址\t\t指令\t\t操作数)print(- * 30)for i in md.disasm(CODE, 0x1000):print(f0x{i.address:x}:\t{i.mnemonic}\t{i.op_str})代码解释代码流程跟keystone差不多初始化capstone-反编译代码-输出结果初始化capstonemd Cs(CS_ARCH_X86, CS_MODE_64)初始化capstone引擎第一个参数选择指令架构例如x86arm......第二个参数选择模式例如64位32位小端序......反编译代码for i in md.disasm(CODE, 0x1000):print(f0x{i.address:x}:\t{i.mnemonic}\t{i.op_str})使用方法disasm反汇编第一个参数机器码第二个参数第一条指令的基地址返回一个包含指令对象的数组unicornunicorn提供的方法使用也不复杂但需要一定的内存基础知识。下面用一个案例解释。示例情景模拟 我逆向过程中发现一个xor加密代码我需要通过模拟执行对密文进行解密。根据汇编代码可以得知0x20000存放密文0x30000存放结果0x10000中读取密钥keyfrom unicorn import *from unicorn.x86_const import *import structfrom keystone import *ASM_CODE MOV ECX, 5MOV ESI, 0x20000MOV EDI, 0x30000MOV BL, byte ptr [0x10000]loop_start:LODSBXOR AL, BLSTOSBLOOP loop_startdef get_code():ks Ks(KS_ARCH_X86, KS_MODE_32)encoding, count ks.asm(ASM_CODE)return bytes(encoding)CODE get_code()ADDRESS_CODE 0x400000ADDRESS_KEY 0x10000ADDRESS_IN 0x20000ADDRESS_OUT 0x30000REAL_KEY 0x77CIPHER_TEXT b\x3F\x12\x1B\x1B\x18def hook_code(uc, access, address, size, value, user_data):if address ADDRESS_KEY:key_value uc.mem_read(address, size)print(fkey: {hex(key_value[0])})def start_emulation():try:print(初始化环境...)mu Uc(UC_ARCH_X86, UC_MODE_32)mu.mem_map(0x0, 1 * 1024 * 1024)mu.mem_map(ADDRESS_CODE, 2 * 1024 * 1024)mu.mem_write(ADDRESS_CODE, CODE)mu.mem_write(ADDRESS_IN, CIPHER_TEXT)mu.mem_write(ADDRESS_KEY, struct.pack(B, REAL_KEY))mu.hook_add(UC_HOOK_MEM_READ, hook_code)mu.emu_start(ADDRESS_CODE, ADDRESS_CODE len(CODE))decrypted_text mu.mem_read(ADDRESS_OUT, 5)print(f解密后的文本: {decrypted_text.decode()})except UcError as e:print(f模拟错误: {e})if __name__ __main__:start_emulation()代码解释代码流程初始化环境-分配虚拟内存-写入数据-添加捕获操作-模拟执行指令-读取内存结果初始化环境这个跟上面的keystone和capstone一样就不解释了mu Uc(UC_ARCH_X86, UC_MODE_32)分配虚拟内存第一行是用于存放堆内存数据第二行是用于存放执行的代码mu.mem_map(0x0, 1 * 1024 * 1024)mu.mem_map(ADDRESS_CODE, 2 * 1024 * 1024)mem_map用于初始化虚拟内存第一个参数内存的虚拟地址基址第二个参数内存的大小内写入数据第一行写入代码第二行写入密文第三行写入解密keymu.mem_write(ADDRESS_CODE, CODE)mu.mem_write(ADDRESS_IN, CIPHER_TEXT)mu.mem_write(ADDRESS_KEY, struct.pack(B, REAL_KEY))mem_write用于写入虚拟内存第一个参数写入内存的地址第二个参数写入内存的数据添加捕获操作hook用于捕获数据这里用于捕获keydef hook_code(uc, access, address, size, value, user_data):if address ADDRESS_KEY:key_value uc.mem_read(address, size)print(fkey: {hex(key_value[0])})mu.hook_add(UC_HOOK_MEM_READ, hook_code)hook_add添加hook第一个参数捕获模式规定什么时候触发hook例如读取内存中断捕获......第二个参数触发的回调函数回调函数各个参数如下def hook_code(uc, access, address, size, value, user_data):uc模拟器对象access当前访问类型UC_MEM_READUC_MEM_WRITE......address当前访问的虚拟地址size当前访问数据大小valueaccess为UC_MEM_WRITE则这里为要写入的值user_data用户在add_hook时传进去的自定义数据模拟执行指令mu.emu_start(ADDRESS_CODE, ADDRESS_CODE len(CODE))第一个参数模拟执行的起始地址第二个参数模拟执行的代码大小读取内存结果decrypted_text mu.mem_read(ADDRESS_OUT, 5)第一个参数读取内存的地址第二个参数读取内存的大小判鄙诙行

相关文章:

FreakStudio俅

环境安装 pip install keystone-engine capstone unicorn 这3个工具用法极其简单,下面通过示例来演示其用法。 Keystone 示例 from keystone import * CODE b"INC ECX; ADD EDX, ECX" try:ks Ks(KS_ARCH_X86, KS_MODE_64)encoding, count ks.asm(CODE)…...

L3GD20陀螺仪驱动开发:寄存器配置、中断与校准实战

1. L3GD20三轴数字陀螺仪驱动库技术解析与工程实践L3GD20是由意法半导体(STMicroelectronics)推出的低功耗、高精度三轴数字陀螺仪传感器,广泛应用于惯性导航、姿态解算、运动检测及无人机飞控等嵌入式系统中。该器件采用MEMS工艺制造&#x…...

Node.js SQLite终极指南:better-sqlite3快速上手与实战技巧

Node.js SQLite终极指南:better-sqlite3快速上手与实战技巧 【免费下载链接】better-sqlite3 The fastest and simplest library for SQLite3 in Node.js. 项目地址: https://gitcode.com/gh_mirrors/be/better-sqlite3 better-sqlite3是Node.js中最快、最简…...

如何快速掌握vxe-table插件开发:5个实用技巧与完整指南

如何快速掌握vxe-table插件开发:5个实用技巧与完整指南 【免费下载链接】vxe-table vxe table 支持 vue2, vue3 的表格解决方案 项目地址: https://gitcode.com/gh_mirrors/vx/vxe-table 你是否曾在Vue项目中为表格功能开发而烦恼?尝试过多种表格…...

离线环境下OpenEuler开发板手动部署g++/gcc编译环境的完整指南

1. 为什么需要离线部署g/gcc? 在工业嵌入式开发中,我们经常会遇到这样的场景:开发板运行的是OpenEuler这类开源操作系统,但由于安全限制或现场环境限制,设备完全无法连接外部网络。这时候如果需要使用g/gcc这样的基础编…...

NotoCJK:为Android设备带来专业级中文显示体验

NotoCJK:为Android设备带来专业级中文显示体验 【免费下载链接】notocjk NotoSansCJK & NotoSerifCJK full weight patch for Android devices. 项目地址: https://gitcode.com/gh_mirrors/no/notocjk 想要让你的Android手机或平板拥有更美观、更专业的中…...

如何利用over-golang与Protobuf实现高效序列化与RPC通信:完整指南

如何利用over-golang与Protobuf实现高效序列化与RPC通信:完整指南 【免费下载链接】over-golang Golang相关:[审稿进度80%]Go语法、Go并发思想、Go与web开发、Go微服务设施等 项目地址: https://gitcode.com/gh_mirrors/ov/over-golang 在现代软件…...

免费Chrome书签管理神器:用Neat Bookmarks告别杂乱书签的终极指南

免费Chrome书签管理神器:用Neat Bookmarks告别杂乱书签的终极指南 【免费下载链接】neat-bookmarks A neat bookmarks tree popup extension for Chrome [DISCONTINUED] 项目地址: https://gitcode.com/gh_mirrors/ne/neat-bookmarks 还在为浏览器书签杂乱无…...

别再让服务器裸奔!手把手教你升级OpenSSL 1.1.1h修复CVE-2016-2183漏洞(附完整命令)

服务器安全必修课:彻底根治CVE-2016-2183漏洞的OpenSSL升级实战指南 凌晨三点,运维工程师小李的手机突然响起刺耳的告警声——安全扫描系统检测到生产服务器存在CVE-2016-2183漏洞。这个潜伏在OpenSSL中的"定时炸弹",可能让加密通…...

PAA负极胶市场:15.55亿规模下的22.9%CAGR增长

据恒州诚思调研统计,2025年全球PAA负极胶(Polyacrylic Acid)收入规模约达15.55亿元,预计到2032年,这一规模将接近67.53亿元,2026 - 2032年复合增长率(CAGR)为22.9%。PAA负极胶作为一…...

实战:用MAF和国内大模型(如Kimi、通义千问)打造一个需要“领导审批”的智能体

实战:用MAF和国内大模型打造审批流程智能体 当企业开始尝试将AI能力整合到核心业务流程时,最常遇到的障碍不是技术实现,而是如何确保自动化流程的安全可控。想象这样一个场景:财务部门的报销系统接入了AI助手,员工只需…...

如何利用AutoTrain Advanced实现模型可扩展性设计:应对业务增长的终极策略

如何利用AutoTrain Advanced实现模型可扩展性设计:应对业务增长的终极策略 【免费下载链接】autotrain-advanced 🤗 AutoTrain Advanced 项目地址: https://gitcode.com/gh_mirrors/au/autotrain-advanced AutoTrain Advanced是一款强大的自动化机…...

实战项目|苍穹外卖|SpringBoot+Vue全栈开发入门

1. 苍穹外卖项目概述 第一次接触苍穹外卖这个项目时,我和很多初学者一样感到既兴奋又迷茫。这是一个典型的SpringBootVue全栈项目,包含了PC端后台管理系统和微信小程序用户端,非常适合想要入门全栈开发的同学。不同于美团、饿了么这样的多商家…...

Windows 11任务栏歌词插件:让音乐与工作无缝融合

Windows 11任务栏歌词插件:让音乐与工作无缝融合 【免费下载链接】Taskbar-Lyrics BetterNCM插件,在任务栏上嵌入歌词,目前仅建议Windows 11 项目地址: https://gitcode.com/gh_mirrors/ta/Taskbar-Lyrics 还在为听歌时频繁切换窗口查…...

终极指南:如何在BespokeSynth中无缝集成VST插件,释放模块化合成器的全部潜力

终极指南:如何在BespokeSynth中无缝集成VST插件,释放模块化合成器的全部潜力 【免费下载链接】BespokeSynth Software modular synth 项目地址: https://gitcode.com/gh_mirrors/be/BespokeSynth BespokeSynth是一款强大的软件模块化合成器&#…...

终极指南:node-apn 证书与 Token 认证方式全面对比及选择策略

终极指南:node-apn 证书与 Token 认证方式全面对比及选择策略 【免费下载链接】node-apn :calling: Apple Push Notification module for Node.js 项目地址: https://gitcode.com/gh_mirrors/no/node-apn node-apn 是 Node.js 平台上用于发送 Apple Push Not…...

IsaacGym力传感器实战:从初始化到数据读取的保姆级避坑指南

IsaacGym力传感器实战:从初始化到数据读取的保姆级避坑指南 在机器人仿真开发中,力传感器的数据采集往往是实现物理交互的关键环节。作为NVIDIA推出的高性能机器人仿真平台,IsaacGym凭借其GPU加速能力为开发者提供了强大的工具链,…...

用Shapely给你的数据加点‘空间感’:非GIS背景也能上手的Python地理分析入门

用Shapely给你的数据加点‘空间感’:非GIS背景也能上手的Python地理分析入门 想象一下,你手里有一份包含全国星巴克门店位置的数据集。传统的分析方法可能告诉你每家店的营业额、客流量,但如果能回答"哪些门店位于地铁站500米范围内&quo…...

如何使用Apache Shiro实现企业级密码安全:完整配置指南

如何使用Apache Shiro实现企业级密码安全:完整配置指南 【免费下载链接】shiro Apache Shiro is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management 项目地址: https://gi…...

直流无刷减速电机驱动控制的关键技术与安全设计

1. 直流无刷减速电机驱动基础 第一次接触直流无刷减速电机时,我被它安静高效的特性惊艳到了。相比传统有刷电机,这种电机通过电子换相取代了机械电刷,寿命直接提升5-10倍。但真正上手驱动时,发现里面门道比想象中复杂得多。 核心在…...

从WebGL到Three.js:前端开发者快速上手图形渲染管线的实战指南

从WebGL到Three.js:前端开发者快速上手图形渲染管线的实战指南 作为一名前端开发者,你可能已经习惯了用HTML、CSS和JavaScript构建交互式网页。但当你想在浏览器中创建令人惊叹的3D效果时,传统的Web技术就显得力不从心了。这就是WebGL和Three…...

基于STM32LXXX的数字电位器(MAX5400EKA+T)驱动应用程序设计

一、简介: MAX5400EKA+T 是 Maxim Integrated(现为 Analog Devices)推出的一款 256抽头、单路、线性变化的数字电位器。 MAX5400 是一款超小封装(SOT-23-8)的数字电位器,非常适合对PCB空间有严格要求的便携式设备。它通过标准的 SPI 接口与 STM32Lxxx 系列 MCU 通信…...

终极指南:Apache Lucene索引原理深度解析——揭秘全文搜索的底层实现

终极指南:Apache Lucene索引原理深度解析——揭秘全文搜索的底层实现 【免费下载链接】lucene-solr Apache Lucene and Solr open-source search software 项目地址: https://gitcode.com/gh_mirrors/lu/lucene-solr Apache Lucene作为一款高性能、可扩展的全…...

零基础入门:计算机视觉需要哪些数学基础?如何高效学习线性代数和概率论?

零基础入门:计算机视觉需要哪些数学基础?如何高效学习线性代数和概率论? 标签:#计算机视觉、#线性代数、#人工智能、#深度学习、#自然语言处理、#神经网络、#机器学习### 一、痛点引入:为什么很多人怕CV数学&#xff1…...

转行AI Agent的真实成本:时间、金钱与精力

建议按照我下面的办法来做,不一定能让你成为LLM专家,但一定能帮你快速入门,少走弯路。 1.先把模型“用顺”一上来别纠结框架、工程化这些,第一件事是能稳定调用一个模型,让它按你想要的格式输出结果。很多人卡在这里&a…...

Gitee:数字化转型浪潮中企业项目管理的战略选择

数字化转型已成为企业提升竞争力的必由之路,而高效的项目管理工具则是这一转型过程中的关键支撑。在众多选择中,Gitee凭借其独特的"开发-管理-部署"一体化架构,正成为越来越多企业的首选解决方案。这个源自中国的DevOps平台不仅解决…...

从矩阵SVD到张量T-SVD:算法原理与傅里叶变换的桥梁

1. 从矩阵到张量:理解SVD的核心思想 我第一次接触奇异值分解(SVD)是在处理图像压缩项目时。当时需要将一个20002000像素的图片压缩到原来大小的1/10,而传统的JPEG压缩算法会导致关键特征丢失。导师简单说了句"用SVD试试&quo…...

终极TorchServe性能优化指南:10个技巧让模型推理速度提升300%

终极TorchServe性能优化指南:10个技巧让模型推理速度提升300% 【免费下载链接】serve Serve, optimize and scale PyTorch models in production 项目地址: https://gitcode.com/gh_mirrors/serv/serve TorchServe是一个强大的PyTorch模型服务工具&#xff0…...

快速掌握zhihu-api:知乎非官方API终极指南

快速掌握zhihu-api:知乎非官方API终极指南 【免费下载链接】zhihu-api Unofficial API for zhihu. 项目地址: https://gitcode.com/gh_mirrors/zhi/zhihu-api 在当今数据驱动的时代,获取知乎平台上的高质量内容数据变得至关重要。zhihu-api作为一…...

Aseprite进阶指南:从像素瓦片到Unity动态Tilemap实战

1. 像素瓦片素材的规范设计 在开始使用Aseprite绘制像素瓦片之前,我们需要先明确一些基本规范。这些规范不仅关系到后续在Unity中的使用效果,更直接影响游戏地图的整体表现和性能优化。 首先说说尺寸问题。我强烈建议使用16x16像素作为基础单位&#xff…...