欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

三个白帽条条大路通罗马系列2之二进制题分析

来源:本站整理 作者:佚名 时间:2016-06-06 TAG: 我要投稿

该题目是一道算法题,算法涉及二次HASH加密及验证。本人通过分析,认为只有用暴力枚举的方法才能得到认证码。经过长时间跟踪,通过研究加密算法,分析出了通过枚举的方式猜解得到认证码的方法。本文将先对该题进行二进制逆向分析,然后进行算法破解分析。
0x01 逆向
直接将exe拖入IDA中,然后查找字符串Your code 和Wrong code

找到的每处所在的函数都按F2设置一个断点:

选择local win32 debugger,然后点击开始按钮进行调试:

这时候程序中断在我们设置的断点处:

上图中,如果界面显示的是汇编代码,直接按一下F5就切换到了伪C代码里了。
上面的代码具体是干什么的,我们暂时不去关心,这时按F9让程序继续执行,然后输入认证码,随便输入一串字符就好,输长一点,回车之后到达了我们之前下断的wrong code这里,IDA反编译的伪C代码如下:
int __cdecl sub_431970(int a1, int a2)
{
   memset(&v4, 0xCCu, 0x108u);   //这里memset是我肉眼识别出函数功能后,做的标记,
  v6 = strlen(secret[0]);//   secret[0]   一个内存中固定的字符串
  v5 = a2;
  for ( i = 0; i
  {
    v7 = 0;
    for ( j = i; j
    {
      for ( k = 0; ; ++k )
      {
        v2 = strlen(secret[0]);
        if ( k >= v2 )
          break;
        if ( secret[0][k] == *(_BYTE *)(j + a1) )  //a1 由b@@tS@BX@K@dn@@X转换得到
        {
          v7
          v7 += k;
          break;
        }
      }
    }
    *(_BYTE *)v5 = v7 >> 16;
    *(_BYTE *)(v5 + 1) = BYTE1(v7);
    *(_BYTE *)(v5 + 2) = v7;
    v5 += 3;
  }
  return sub_42FDC0();
}
通过阅读上面的代码,以及跟踪分析,首先发现字符串a1是把我们输入的认证码依次替换掉b@@tS@BX@K@dn@@X中的@得到的。另外字符串secret[0]是固定的值为:R9Ly6NoJvsIPnWhETYtHe4Sdl+MbGujaZpk102wKCr7/ODg5zXAFqQfxBicV3m8U
通过查看内存值,便一目了然:


通过分析算法发现他的HASH加密算法如下:
把a1字符串每4个一组,如果字符a1[i]是字符串secret[0]里的字符,那么
V7=0
Hash= v7//k是a1[i]在字符串secret[0]里的下标。
如果a1[i+1]依然满足条件
那么hash= hash依次进行,经过4个字符后 V7从0开始 再hash后面四个字符。
把最终得到的4组hash值以16进制形式存入内存中,每组HASH得到一个3字节的数据,4组完成后共得到12字节数据。
这里随便输入的认证码,本次HASH运算完,得到的12字节数据如下:

然后第一次HASH结束。
在函数尾部下断点,F9 一次,再F8后来到了 程序最开始的函数中,也就是第一次我们断下的函数里:

继续按F8,进入了下面的函数:
int __cdecl sub_431E10(int a1)
{
  memset(&v2, 0xCCu, 0x114u);
  v9 = a1;
  v8 = strlen(a1);
  strlen(secret[0]) = strlen(secret[0]);
  if ( v8 != 12 )                           这里检查我们上面得到的HASH后的内容是否是12字节
  {
    sub_43019E("Wrong code!\n");
    sub_4302C0(1u);
  }
  for ( i = 0; i
  {
    v5 = 0;
    for ( j = 0; j strlen(secret[0]); ++j )

[1] [2] [3] [4] [5] [6]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载