IDA提取的机器码快速转换方法
一般提取出来是这样的:
需要的仅仅是红框框那部分机器码,要把它手工转成数组非常麻烦,于是,我写了段小代码可以直接把这种样式的反汇编代码直接转成机器码数组:
或者是这种格式:
定义一个LINE预定义常量就是第一种,没定义则是第二种
这样的话你只需要添加一个花括号就可以直接使用shellcode了。准备两个文本文件即可
#include <stdio.h>
#include <windows.h>
#define MAX 1024
#define LINE
/*
* @Description 提取IDA格式的反汇编代码成机器码数组形式
* @param1 pszInputFileName IDA反汇编文本文件名
* @param2 pszOutputFileName 目标文本名
* @Attention 输出文件会截断原来的文本
* @Return 0代表成功, -1失败
*/
int IDAOpCode2Shellcode_16(const char *pszInputFileName, const char *pszOutputFileName) {FILE *fRead = NULL;FILE *fSave = NULL;char *pszLine = NULL;char szLine[MAX] = { 0 };char szLineOutput[MAX] = { 0 };char *pStartOpCode = NULL;int i = 0;BOOL fOk = TRUE;fRead = fopen(pszInputFileName, "r");fSave = fopen(pszOutputFileName, "w");if (NULL == fRead || NULL == fSave)return(-1);// 遍历读取每一行while (NULL != (pszLine = fgets(szLine, 1024, fRead))) {// 如果没有.text代表不是代码行直接continue重读if (strstr(pszLine, ".text") == NULL)continue;// 找到机器码开始位置pStartOpCode = strchr(pszLine, ' ');if (NULL == pStartOpCode)continue;++pStartOpCode;while (*pStartOpCode) {// 如果是机器码而不是空格或其他则装入,否则代表这行已经结束if (*pStartOpCode != ' ' && *(pStartOpCode + 1) != ' ') {if (fOk) {szLineOutput[0] = '\"';fOk = FALSE;}strcat(szLineOutput, "\\x");strncat(szLineOutput, pStartOpCode, 2);pStartOpCode += 3;i++; // 多了一个if (i % 16 == 0) {i = 0;strcat(szLineOutput, "\"\n\"");}}else break;}fprintf(fSave, "%s", szLineOutput);ZeroMemory(szLineOutput, 1024);}fprintf(fSave, "\"", szLineOutput);fclose(fRead);fclose(fSave);return(0);
}int IDAOpCode2Shellcode_line(const char *pszInputFileName, const char *pszOutputFileName) {FILE *fRead = NULL;FILE *fSave = NULL;char *pszLine = NULL;char szLine[MAX] = { 0 };char szLineOutput[MAX] = { 0 };char *pStartOpCode = NULL;fRead = fopen(pszInputFileName, "r");fSave = fopen(pszOutputFileName, "w");if (NULL == fRead || NULL == fSave)return(-1);// 遍历读取每一行while (NULL != (pszLine = fgets(szLine, 1024, fRead))) {szLineOutput[0] = '\"';// 如果没有.text代表不是代码行直接continue重读if (strstr(pszLine, ".text") == NULL)continue;// 找到机器码开始位置pStartOpCode = strchr(pszLine, ' ');if (NULL == pStartOpCode)continue;++pStartOpCode;while (*pStartOpCode) {// 如果是机器码而不是空格或其他则装入,否则代表这行已经结束if (*pStartOpCode != ' ' && *(pStartOpCode + 1) != ' ') {strcat(szLineOutput, "\\x");strncat(szLineOutput, pStartOpCode, 2);pStartOpCode += 3;}else {strcat(szLineOutput, "\"\n");break;}}if (!strstr(szLineOutput, "\"\"")) {if (feof(fRead)) {int iLen = strlen(szLineOutput);RtlFillMemory(szLineOutput + iLen - 1, 2, 0);}fprintf(fSave, "%s", szLineOutput);}ZeroMemory(szLineOutput, 1024);}fclose(fRead);fclose(fSave);return(0);
}int main() {
#ifdef LINE // 以每行为单位IDAOpCode2Shellcode_line("input.txt", "output.txt");
#else // 以16个二进制数为单位IDAOpCode2Shellcode_16("input.txt", "output.txt");
#endifreturn(0);
}
以ANSI形式进行编译链接即可
(完)
IDA提取的机器码快速转换方法相关推荐
- ida提取hashab算法记录
话说ida f5功能确实很强大,以后还会使用到f5进行提取代码,记录下这次提取代码过程中的想法. 首先需要注意f5生成的伪代码函数内的局部变量都是以1字节对齐的,f5把一个函数使用的堆栈中的地址都对应 ...
- 利用kali的msf提取汇编机器码(shellcode)
对于提取小段汇编的机器码,kali的msf提取汇编机器码非常方便 比如提取下面小段的汇编机器码 push 5 ;5=SW_SHOWpush eaxmov eax,0x755bdab0call eax ...
- EpiQuik病毒RNA提取试剂盒,快速、简单、经济有效
基于柱和磁珠的方法为从临床标本中提取病毒 RNA 基因组提供了一种快速方便的方法.Epigentek的各种用于分离RNA的磁珠和离心柱试剂盒来自不同样本来源(细胞.组织.全血.唾液.鼻咽拭子)和物种( ...
- Free Icon Tool(icon图标提取器)绿色便携版V2.1.5 | 应用图标提取器下载 | 快速提取exe中的ico图标
Free Icon Tool 是一款短小精悍且非常实用的应用图标提取器软件,能帮助大家非常方便的提取dll.ocx.cpl.cil.exe中的ico图标文件,所以也叫icon图标提取器,Free Ic ...
- Excel怎么转换为Word文档?分享一种快速转换方法
怎么把Excel表格转换成Word文档呢?大家在工作中经常会使用到Excel表格来统计一些数据和文件,其展现的效果会一目了然.而Word文档大家通常用来编辑文件,做一些文件的编辑和保存以及发送,由于工 ...
- 你真会进制的转换吗?进制之间的快速转换方法(我的转换很快,你忍一下)
前言 我们都知道计算机是用 2进制来表示的,也就是一堆的0 1代码组成的逻辑电路,可是当我们窥探内存的时候,计算机给我们显示的总是 16进制的数字,这使得我们作为人类来说,只熟悉 10进制的,阅读这 ...
- [IDA Plugin] IDA插件收集
英语好的,看这里:https://github.com/onethawt/idaplugins-list 随着时间的推移,我将组织插件.如果您有任何其他优秀的插件,请提交PR.我想用相应的IDA版本标 ...
- 快速整理excel_3小时整理了33个excel动图技巧,能快速提高工作效率,收藏备用吧...
1.身份证号码快速提取出生日期 首先我们在旁边输入出生日期,点击回车按快捷键Ctrl+E即可快速提取身份证号码 2.快速输入性别 首先我们点击想要设置的区域,然后点击鼠标右键选择自定义单元格格式,点击 ...
- perl大骆驼和小骆驼_快速的骆驼和云消息传递
perl大骆驼和小骆驼 Apache Camel是一个流行的,成熟的开源集成库. 它实现了企业集成模式 ,这是在集成分布式系统时经常出现的一组模式. 过去,我写过很多关于Camel的文章, 包括为什么 ...
最新文章
- 产生所有排列---旋转法------2013年1月22日
- 压缩 20M 文件从 30 秒到 1 秒的优化过程!
- js获取本周、本月、本季、本年的第一天
- WM6 Rapi 开发(二) Hello World
- [云炬创业基础笔记] 第四章测试3
- spring.jpa配置_使用JPA和Spring 3.1进行事务配置
- CPU漏洞可导致RSA被攻击
- Python爬虫编程实践 Task03
- KindEditor - 代码高亮
- HUB、Switch、Router在OSI模型层次信息
- 必应缤纷桌面产品分析
- 【C++】C++格式化输出/输出格式控制/输出精度控制
- CO-PA: 获利能力分析之特征值派生 - KEDR / KEDB
- 计算机毕业设计python基于django的学生考试成绩数据分析与可视化系统
- springCloud-day04
- 什么是好产品?如何评价产品?谈产品评价体系模型
- activiti会签功能
- 那些年啊,那些事——一个程序员的奋斗史 ——53
- python运行时不显示cmd命令窗口的方法
- 2023 OPEN易支付系统开源源码
热门文章
- 透明背景转换时变为黑色解决方法
- Java面试被问框架源码看过吗?70道SSM面试题及学习笔记值得收藏!
- JAVA经典例题一(8 examples)
- Centos7搭建sftp服务器,开启sftp上报日志
- 简述mvc和java三层框架,springMVC设计模式和javaWeb三层框架
- 池馆刷题助手一键答题显示答案综合教程交互英语
- html特效页面(1)--黑客帝国代码雨
- 计算机毕业设计php_thinkphp_vue的家乡石泉网站-乡村家乡旅游信息网站
- Eclipse解决.java文件中文乱码问题
- 计算机原理课 如何在中小学课堂中变成有趣,计算机组成原理课程习题答案秦磊华...