DAY80_IDA 16PLUGIN PONCE

来源:互联网 发布:mac类似powerdesigner 编辑:程序博客网 时间:2024/06/14 20:32

PonceIDA插件)

功能概括:

污点分析&符号执行

 

功能详解:

1.符号执行+具体值引导->concolic模式

输入,跟踪程序执行路径,到约束点生成相应的输入约束表达式,验证约束表达式能否满足,对约束表达式进行约束求解。

 

程序:

ponce_guess.cpp(符号匹配)

#include <stdio.h>

#include <stdlib.h>

 

char *serial= "guess";

 

int check(char *ptr){

  int i = 0;

  while (i< 5){

  if (ptr[i]!= serial[i]) return 1; //chars_match fail

  i++;

  }

  return 0;

}

 

int main(int argc, char **argv){

 

  if (argc!= 2) return -1;

 

  if (check(argv[1]) == 0)

        printf("win\n");

  else

        printf("fail\n");

 

 

    system("pause");

  return 0;

}

 

结果:Solution found

 

 

Ponce_hash.cpp(伪hash比较)

#include <stdio.h>

#include <stdlib.h>

 

char *serial= "guess";

 

 int getHash(char *ptr){          //get'hash'

  int i;

  int hash = 0x0000;

 

  for (i= 0; ptr[i]; i++)

  hash += ptr[i] ^ serial[i% 5];

 

  return hash;

 }

 

 

 int main(int argc, char **argv){

 

  if (argc!= 2)return -1;

 

    int rs= getHash(argv[1]);

  if (rs== 0x0222)            //hash_match

        printf("Win\n");

  else

  printf("fail\n");

 

    system("pause");

  return 0;

 }

结果:Solution found

以上是对输入单约束(chars_match\hash_match)的情况,执行Negate&inject进行约束求解

 

 

对于程序结构复杂,约束判断语句不容易寻找的情况?

对于多约束的情况?

 

对于输入执行符号化内存,会自动标记符号化的位置&综合多约束条件进行约束求解。

 

Ponce_multiConstraint.cpp(程序结构复杂&多约束)

#include <stdio.h>

#include <stdlib.h>

 

char *serial= "guess";

 

int check(char *ptr){

  int hash = 0x0000;

 

  for (int i= 0; ptr[i]; i++)

  hash += ptr[i] ^ serial[i% 5];

 

    if (hash> 0x0555) return 1;         //hash_match

    if (hash< 0x0111) return 1;         //hash_match

 

  return 0;

}

 

int main(int argc, char **argv){

 

  if (argc!= 2) return -1;

 

  if (check(argv[1]) == 0)

        printf("win\n");

  else

        printf("fail\n");

 

 

    system("pause");

  return 0;

}

 

 

2.污点分析

污点渗入分析。

程序演示:cmake.exe  参数:cmakelists.txt

cmake--一种编译配置工具。应用举例:根据不同的平台不同的编译器&通过编写cmakelists.txt文件,控制生成makefile,从而控制编译过程。

实现:程序通过在fread函数读取文件之后的一定范围内污点追踪,可以发现文件内容所影响到的函数(因:ponce会重命名被污点影响的函数)。

 

3不足:

Ponce操作上比较复杂;

Ponce目前只适用于windows平台,6.8版本与6.9x版本(测试发现6.9也可以);

符号执行功能:对于个别程序(eg:ponce_guess.cpp(符号匹配)->单个字符遍历比较或着运算的类型)用内存符号化的效率很低,只能得到首字符的解不能得到整体的解,(解决方案:用内存符号化找出符号化运算的位置,执行Negate&inject进行约束求解)。

 

0 0