转载自:https://www.cnblogs.com/binlmmhc/p/6166286.html

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

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

一、编写测试程序:

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

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

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

我们这里生成了一个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 = 0; i < 4; i++){x = Dword(from1);          //Dwrod函数是从from1这个地址取出4个字节的数据,还有Word和Byte这两个函数分别从指定地址取出字数据和字节数据Message("%s", x ^ 0x42); //IDA的IDC中的Message函数和C的printf差不多,都是向终端输出结果from1 = from1 + 4;
}
for(i = 0; i < 4; i++){x = Dword(from2);Message("%s", x ^ 0x42);from2 = from2 + 4;
}
Message("%s", 0x1D^0x42);
Message("%s", 0x01^0x42);

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

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

IDA的脚本IDC的一个简单使用相关推荐

  1. 用shell脚本写的一个简单的俄罗斯方块

    用shell脚本写的一个简单的俄罗斯方块 代码 代码 测试 下载链接 代码 代码 #!/bin/bash #version 1.2,若非正常退出,请使用附带的killel.sh脚本杀死进程 #定义用于 ...

  2. python自动生成坐标脚本_用一个简单的python脚本从经纬度坐标获得高程

    我从这个question得到了一个python脚本,它将从USGS高程点查询服务中提取.但是,它总是超时,并在一段看似随机的时间之后,在查询完成之前将我踢出.我需要另一种方法来获取给定纬度坐标的高程数 ...

  3. shell脚本写出一个简单的猜价格游戏

    [root@localhost ~]# vim game.sh #!/bin/bash a=$(expr ${RANDOM} % 1000) #$RANDOM是一个环境变量,每次都会随机输出一个介于0 ...

  4. linux 同步脚本,Linux:一个简单的同步数据脚本

    工作需求,客户需要两台机器上的数据库文件和其他文件一致,其他文件好说,直接使用rsync的增量同步就好了,数据库的同步让我头疼了好久. 刚开始使用增量同步的方法去同步数据库,当主端数据增加后同步,发现 ...

  5. 使用PlayCanvas制作一个简单的小游戏(四)

    原文: 足球 足球是掂球游戏的焦点.它响应玩家的输入,响应环境(如重力),发出声音等.它也许是游戏中最复杂的部分.幸运的是,我们会尽可能的深入浅出. ball.js pc.script.attribu ...

  6. 编写一个最简单的.php,学习猿地- 说明 如果我们要编写一个简单的PHP脚本,需要学习哪些...

    说明 如果我们要编写一个简单的 PHP 脚本,需要学习哪些基础知识呢? PHP 基础 PHP 脚本可放置于文档中的任何位置. 标准 的 PHP 脚本以 <?php 开头,以 ?> 结尾: ...

  7. python脚本编写_如何用Python包编写一个简单的脚本,表达你对父母的爱?

    全文共2800字,预计学习时长6分钟 在繁忙的工作生活中,我们经常忘记给所爱的人发WhatsApp.本教程将使用Python包Twilio编写一个简单的Python脚本来发送WhatsApp消息.我们 ...

  8. 记一个简单的保护if 的sh脚本

    记一个简单的保护if 的sh脚本 真是坑爹,就下面的sh,竟然也写了很久! if [ `pwd` != '/usr/xx/bin/tomcat' ] thenecho "rstall is ...

  9. 1.1 一个简单的脚本

    学习<shell脚本学习指南>一书,记录总结,便于自己回忆,希望对你有帮助! 2.3 一个简单的脚本 假设你想知道,现在系统上有多少人登录?可以使用who命令: [root@localho ...

最新文章

  1. TextField输入结束后让键盘消失的两个技巧
  2. Linux中的用户及文件权限管理总结
  3. 5G URLLC 是 ToB 的关键
  4. 2.5 程序示例--非线性决策边界-机器学习笔记-斯坦福吴恩达教授
  5. jQuery 侧栏菜单点击body消失
  6. form中action属性后面?传递参数 获取不到
  7. hdu 2489 Minimal Ratio Tree (DFS枚举+MST)
  8. android10 三星升级计划,Android 10.0(Q OS)系统升级计划Androi
  9. linux major头文件_《Linux设备驱动程序》(四)——字符设备驱动(上)
  10. dump排查内存异常 java_如何排查Java应用内存泄漏问题
  11. HDU1259 ZJUTACM【模拟】
  12. hash通信(python多线程应用)采用md5加密
  13. 堆排序、快速排序、归并排序总结
  14. Python实现遗传算法解决TSP问题
  15. 不一般的电路设计——什么是电压采集采样?
  16. 组织机构、权限、角色设计
  17. docker容器获取宿主ip地址
  18. html页面发送微信朋友圈,【源码分享】分享一个基于官方share.html简化的分享js代码(微信,朋友圈,QQ)...
  19. python手机壁纸_利用Appium Python测试爱壁纸的登录和设置壁纸
  20. hdu1172猜数字

热门文章

  1. exit和_ exit函数
  2. keyshot手机渲染教程_Rhino+Keyshot-黑鲨手机建模渲染
  3. APP渗透测试-----APK反编译
  4. 计算机本科毕业论文水电厂,水电站计算机监控系统 本科毕业论文(设计).doc...
  5. python错误提示未定义tn_python程序中的全局名称错误[关闭]
  6. Tektronix TCP0020 AC/DC电流探头产品说明书
  7. 关于web项目引入jstl.jar包和standard.jar包后存在的问题
  8. ajax跨域jsonp并且post请求No 'Access-Control-Allow-Origin'以及执行error时readyState=4同时status=200的解决方法
  9. 为什么男人不要学计算机,和不同专业的男生谈恋爱是什么样的感觉
  10. win10禁用软件开机自启