三个白帽条条大路通罗马系列2之二进制题分析
if ( secret[0][j] == *(_BYTE *)(i + v9) ) //这里检查上面HASH后的每一个字节对应的字符是否在
//字符串secret[0]里
{
v5 = 1;
break;
}
}
if ( !v5 )
{
sub_43019E("Wrong code!\n"); //如果不是 就挂了。
sub_4302C0(1u);
}
}
v3 = malloc(16);
memset(v3, 0, 16);
sub_430045(v9, v3);
sub_42F3F2(v3);
return sub_42FDC0();
}
如果上面认证全部通过,按F9后,会进入HASH加密的函数:
这个时候需要进行加密的就是上面得到的第一次HASH加密后的12字节数据。
对这12字节加密,每4个一组,共3组,每组得到3字节数据,这样第二次HASH后就得到了9字节的数据。按F9后到达这里:
int __cdecl sub_431CA0(int a1)
{
memset(&v2, 0xCCu, 0xF0u);
v6 = a1;
v5 = strlen(a1);
if ( v5 != 9 ) //首先判断第二次HASH后的字节长度是否为9,不是就错了。
{
sub_43019E("Wrong code!\n");
sub_4302C0(1u);
}
for ( i = 0; i
{
if ( (signed int)*(_BYTE *)(i + v6) signed int)*(_BYTE *)(i + v6) > 57 ) //检查第二次HASH后的//每个字节是否都为数字 //字符
{
sub_43019E("Wrong code!\n");
sub_4302C0(1u);
}
}
for ( i = 0; i
{
for ( j = i + 1; j
{
if ( *(_BYTE *)(i + v6) == *(_BYTE *)(j + v6) ) //检查第二次HASH后的每个字节是否彼此重复。
{
sub_43019E("Wrong code!\n");
sub_4302C0(1u);
}
}
}
sub_42F1D1(v6); //如果上面都通过了 ,就到达了胜利的彼岸了!
return sub_42FDC0();
}
以上就是整个二进制算法的逆向过程,这里我们搞清楚了他的加密算法,下面就是尝试破解认证码了。
0x02 算法破解
针对第一部分HASH算法,我计划是从R9Ly6NoJvsIPnWhETYtHe4Sdl+MbGujaZpk102wKCr7/ODg5zXAFqQfxBicV3m8U里任意选取两个(根据需要也可能是1个)字符分别填充到b@@t S@BX @K@d n@@X,并分组进行HASH加密,再验证HASH结果是否满足条件,如果满足条件,那么就保存一下选取的字符以及HASH后的密文。
具体算法如下:
char m2[17]="b@@tS@BX@K@dn@@X",*p,*q;
int in1=0,in2=0,in3=0,in4=0;
q=m2;
get(q,0,1,2); //分组取hash 参数分别为字符串 序号 m2里需要填充的字符坐标
q+=4;
get(q,1,1,0);
q+=4;
get(q,2,0,2);
q+=4;
get(q,3,1,2); //共4组,到这里infos就得到了所有满足第一次HASH结果的可能的值
针对第二次HASH加密,我们把get()函数获得的所有满足条件的密文字符串进行组合,然后对每组字符串再次尝试hash加密,把得到的结果进行检查是否每个字符都是0-9内并且互不重复,把满足条件的结果记录下来。
最后完整破解认证码的代码如下:
#include
#include
#include
char m1[70]="R9Ly6NoJvsIPnWhETYtHe4Sdl+MbGujaZpk102wKCr7/ODg5zXAFqQfxBicV3m8U";
char sz[11]="0123456789";
struct info
{
char *hash; //存放第一次hash后的值
char *mw; //存放hash前明文
};
info infos[4][1000];
long hash(char *s)
{
int j=0,v7=0,k=0;
v7 = 0;
for ( j = 0; j
{
for ( k = 0; ; ++k )
{
if ( k >= strlen(m1))
break;
if ( m1[k] == s[j] )
{
v7
v7 += k;
break;
【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。