首页
社区
课程
招聘
[讨论]对一个crackme算法的分析
发表于: 2012-3-26 18:24 2733

[讨论]对一个crackme算法的分析

2012-3-26 18:24
2733
本来想在这个帖子里回个帖http://bbs.pediy.com/showthread.php?t=144053,奈何还是临时会员  5555
00406284-0040628B 地址分别对应的16进制数位 00406284  6E 61 6D 65 6C 65 73 73  对应的ASCII码为“ nameless”
esi=406284 既esi所处的地址为406284存贮的字符就为第一个字母n
eax=8;edx=0;ecx=0
算法部分:
004011FE  |> /0FBE06     /movsx eax,byte ptr ds:[esi] //将esi地址数据传值给eax,即eax=6E
00401201  |. |8BD8          |mov ebx,eax                       //ebx=eax=6E
00401203  |. |2BF2          |sub esi,edx                         //esi=esi-edx=406284-0
00401205  |. |C1E0 04       |shl eax,0x4                      //eax=eax*2的4次方,eax=6E0
00401208  |. |C1EB 05       |shr ebx,0x5                     //ebx=3
0040120B  |. |33C3          |xor eax,ebx                       // 异或命令,先将eax、ebx写成二进制,然后对应数位上进行比较,相同为0、不同为1                                                                                      然后得出eax,eax=6E3
0040120D  |. |83C0 26       |add eax,0x26                 //eax=6E3+26=709
00401210  |. |33C1          |xor eax,ecx                      //ecx=0,所以eax=709
00401212  |. |03C8          |add ecx,eax                    //ecx=ecx+eax=709
00401214  |. |46            |inc esi                               //esi+1 ,esi=406285
00401215  |. |803E 00       |cmp byte ptr ds:[esi],0x0    //将esi地址内存贮的数据与0做计较
00401218  |.^\75 E4         \jnz Xcrackme2.004011FE   //不等则跳至4011FE处循环计算
最后将字符串“nameless”循环完毕得出ecx与eax的值。

以上是我对其理解,我的OD很神奇很强大 直接跳过那个反调试的调用。其实我想说的是 那个SHL命令是怎么个具体操作的  是不是将一个数转换成2进制后 不够16位将高位补0 然后再左移。我跟算法时是用的破解计算器,换成2进制自己对比手工左移后移 移不出来 5555

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 622
活跃值: (294)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
2
shl左移是把东西往左边搬,超出的部分舍弃,右边填0。
shr右移是把东西往右边搬,多余的舍弃,左边填入前一次的最左边的一位的数值,比如左边一开始是0,则后面左边全部填入0,如果是1,则后面全部填入1。

这一段实际上是
unsigned int i=0;
DWORD sum=0;
do
{
sum+=(un[i]*16^un[i]/32)+38;
}while(un[i]);
2012-3-26 19:42
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
那个un[i]是什么意思啊?
2012-3-27 11:05
0
雪    币: 622
活跃值: (294)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
4
个人习惯,username的简写
2012-3-27 17:41
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
自己研究了一天 终于用MFC搞出了注册机。先声明下,本人菜鸟,自学计算机全是个人爱好,高手飞过勿笑。CrackMe原帖地址为http://bbs.pediy.com/showthread.php?t=144053,那位仁兄说写注册机,一直都没写。哪个正式会员把这个帮他搬过去吧。
{  
   int i ,k;
    long ax ,bx,cx=0;
    char str;
    CString m0,m1,m2;
    UpdateData(TRUE);
        if (m_id=="")
        {AfxMessageBox("用户名为空将按“nameless”计算");
        m_id="nameless";
        }
    i=m_id.GetLength();
    for (k=0;k<i;k++)
   {
        str=m_id.GetAt(k);
        ax=str;
        bx=ax;
        ax=ax*16;
        bx=bx/32;
        ax=ax^bx;
        ax=ax+38;
        ax=ax^cx;
        cx+=ax;
        }
    m1.Format("%x",cx);
    ax=789999;
    ax=ax-cx;
    ax=ax*ax;
    m2.Format("%x",ax);
    m1.MakeUpper();
    m2.MakeUpper();
    m_psw.Format("CM2-%s-%s",m1,m2);
    UpdateData(FALSE);
}
上传的附件:
2012-3-27 17:51
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼主好强大,希望以后能学习到更多楼主的算法分析
2012-3-31 10:44
0
游客
登录 | 注册 方可回帖
返回
//