zoukankan      html  css  js  c++  java
  • IDA的脚本IDC的一个简单使用

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

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

    一、编写测试程序:

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

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

    #include <stdio.h>
    #include <string.h>
    //the xor key is 'B' ,异或的key
    
    int 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
    "); //错误提示
                return -1;
            }
        }
        printf("Congratulations...
    ");
        return 0;
    }
    
    int main(int argc, char *argv[]) {
        int i;
        char flag[11] = "";
        scanf_s("%s", flag, sizeof(flag));//输入的flag
        printf("%s
    ", 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中执行上面的代码,就能够得到正确的输入了。

     

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

  • 相关阅读:
    php 接触
    PHP Session可能会引起并发问题
    PHP大神的十大优良习惯
    PHP开发经验总结
    php命令行用法简介
    Python正则表达式指南
    PHP开发经验总结
    PHP命名空间概念解析
    高性能Web框架Zend Framework
    PHP代码优化技巧大盘点
  • 原文地址:https://www.cnblogs.com/binlmmhc/p/6166286.html
Copyright © 2011-2022 走看看