目的:主要是想学习一下IDA的IDC的脚本的使用。这里做了一个小的测试。

这里使用的是VS2015Community来生成文件的。

一、编写测试程序:

这里先生成我们的目标数据。

然后编写测试程序。得到下面的代码。

#include <stdio.h>
#include <string.h>
//the xor key is 'B' ,异或的key int Verify(char *Flag) {
int i;
int tar[] = { , , , , , , , , , }; //这里是关键数据
for (i = ; i < ; i++) {
if (Flag[i] != tar[i]) {
printf("You are wrong\n"); //错误提示
return -;
}
}
printf("Congratulations...\n");
return ;
} int main(int argc, char *argv[]) {
int i;
char flag[] = "\0";
scanf_s("%s", flag, sizeof(flag));//输入的flag
printf("%s\n", flag);
for (i = ; i < ; i++) {
flag[i] = flag[i] ^ ; //将输入异或
}
Verify(flag);//调用检测函数
return ;
}

我们这里生成了一个release版本的32程序,然后我们使用IDA打开这个程序。得到下面的图片

从上面的图片我们可以看到整个程序的流程,其中这里用到了xmm0这个寄存器,这个寄存器用来每次将我们的4个双字(16个字节)的数据传到ebp+var_38这个地址里,

我们看到每次xmm0传递了16个字节,一共传递了2次,也就是8个int类型的数据,然后还有mov     [ebp+var_18], 1Dh  和mov     [ebp+var_14], 1

将我们关键数据最终赋值完成,接下来就是循环的比较了,看到上面这么多的异或,我们也能明白这就是一个简单的异或,这里我们看到关键的异或是0x42 == 66 == 'B'

所以我们要找到关键数据的地址,然后将目标字符串和0x42异或之后,就能够得到正确的输入了。

我们看到了关键的8个int数据了,还有之前的2个数据,一共就是我们的10个关键数据了。我们看到图里是先对xmmword_402150先传递的,且WIN8.1使用的是

小端序。

所以我们得到两个关键数据的地址,from1 = 0x402150, from2 = 0x402140和最后的连个0x1D和0x01

所以我们编写了一个IDC,在IDC命令行下执行,最终得到我们的正确输入了。

auto from1 = 0x00402150;
auto from2 = 0x00402140;
auto i, x; for(i = ; i < ; i++){
x = Dword(from1); //Dwrod函数是从from1这个地址取出4个字节的数据,还有Word和Byte这两个函数分别从指定地址取出字数据和字节数据
Message("%s", x ^ 0x42); //IDA的IDC中的Message函数和C的printf差不多,都是向终端输出结果
from1 = from1 + ;
}
for(i = ; i < ; i++){
x = Dword(from2);
Message("%s", x ^ 0x42);
from2 = from2 + ;
}
Message("%s", 0x1D^0x42);
Message("%s", 0x01^0x42);

然后在IDA的FILE中的Script command中执行上面的代码,就能够得到正确的输入了。

这个只是一个简单的测试,好好学习,天天向上!

IDA的脚本IDC的一个简单使用的更多相关文章

  1. 补充1:IDA的脚本IDC语言

    1.IDA脚本的打开与使用: IDA脚本两种语言:IDC(IDC,本地脚本语言)和Python 2.IDC语言介绍 1.IDC变量:IDC是一种松散的语言,没有明确的类型.使用3中数据类型,整数(ID ...

  2. jmeter压力测试的简单实例+badboy脚本录制(一个简单的网页用户登录测试的结果)

    JMeter的安装:在网上下载,在下载后的zip解压后,在bin目录下找到JMeter.bat文件,双击就可以运行JMeter. http://jmeter.apache.org/ 在使用jmeter ...

  3. 使用一个Python脚本来运行一个简单的Django项目

    创建视图 Django是一个模型-模板-视图(model-template-view,MTV)框架. 视图部分通常检查看HTTP给出的请求和查询或者结构,这些信息是发送到表示层的数据. 我们在 hel ...

  4. Python与Hack之window下运行带参数的Python脚本,实现一个简单的端口扫描器

    1.前提是:windows已经配置好Python的环境变量: 2.进入cmd命令行模式: **输入python命令,检测是否环境配置好:显示这样说明配置环境变量没问题 **用cd命令进入Python脚 ...

  5. Windows 下针对python脚本做一个简单的进程保护

    前提: 大家运行的脚本程序经常会碰到系统异常关闭.或被其他用户错杀的情况.这样就需要一个进程保护的工具. 本文结合windows 的计划任务,实现一个简单的进程保护的功能. 利用py2exe生产 ex ...

  6. [shell编程]一个简单的脚本

    首先,为什么要学习shell呢?哈哈,当然不是shell能够怎样怎样然后100字. 最近看到一篇博文<开阔自己的视野,勇敢的接触新知识>,读完反思良久.常常感慨自己所会不多,对新知识又有畏 ...

  7. 一个简单的appium脚本

    这是一个简单的appium脚本,测试amazon购物过程的,过程包括搜索商品,然后从结果列表中选取中意的商品,然后加入购物车,等等. 它是一个最原始的脚本,对测试元素.数据.报告等未作任何的封装,后面 ...

  8. 创建一个简单的配置android编译环境的脚本

    由于有多个Android项目,每个项目配置编译环境时选项都不同,所以尝试写一个sh脚本来完成这个功能.     首先进入bin文件夹,新建一个文件enbuild $ cd ~/bin $ touch ...

  9. 一个简单的shell脚本

    一个简单的shell脚本 一个简单的shell脚本 编写 假设我想知道目前系统上有多少人登录,使用who命令可以告诉你现在系统有谁登录: 1.[KANO@kelvin ~]$ who2.KANO tt ...

随机推荐

  1. ubuntu 12.04 sever下安装jre

    具体步骤如下: 首先打开http://www.java.com/en/download/linux_manual.jsp?locale=en 选择你想下载的版本,此处我选择的是jre-7u25-lin ...

  2. CJCMS系列---说说项目中的缓存实现(1)

    缓存者,临时文件交换区也.主要就是方便查找,提高查找效率(效率在于读内存速度比读硬盘快).  大多数的项目的缓存都是通过设定过期时间来做的,可是我对于这样的替换策略不以为然,而且会导致混乱. 有人说: ...

  3. 使用Docker Mysql 5.7

    Mysql已经提供了Docker image,可以很方便开启一个mysql服务器.官方介绍了两种连接方式, 在其他App Docker 容器中通过--link访问Mysql服务端容器 启动另外一个My ...

  4. Lua在单片机中的移植

    Lua代码符合ANSI C标准,只要有C编译器的开发环境就能跑Lua. 虽说只要有C编译器就能跑Lua,但是单片机的环境太简单,有些C标准的内容仍旧无法支持. Lua的官网是:www.lua.org ...

  5. HDU5934 强连通分量

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5934 根据距离关系建边 对于强连通分量来说,只需引爆话费最小的炸弹即可引爆整个强连通分量 将所有的强连通分 ...

  6. ArrayList和HashSet的Contains()方法(转)

    来源: ArrayList和HashSet的Contains()方法 笔试题: package com.champion.test.exam; import java.util.ArrayList; ...

  7. 为select 设置样式

    问题: 在为表单添加下拉菜单时,有时候对菜单的样式没有特别的要求,就是需要修改下select元素的宽度和高度,但众所周知select元素的样式很难修改: select在各个浏览器,字体大小为14px时 ...

  8. Unity 碰撞的例子

    1.新建一个3D的Unity工程. 2.菜单 "GameObject" - "3D Object",选择"Cube" 和 "Cap ...

  9. 【Network】OVS基础知识

    本文主要介绍Open VSwitch - 虚拟交换机的概述内容,阅读本文可以对OVS(Open VSwitch)有一个大致的了解.那么本文主要回答了这样几个问题: 1. 虚拟交换机是什么,干什么? 2 ...

  10. C#操作XML总结

    1.using System.Xml; using System.Xml; //初始化一个xml实例 XmlDocument xml=new XmlDocument(); //导入指定xml文件 xm ...