吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 1243|回复: 4

某Crackme算法分析的问题

 关闭 [复制链接]
菜鸟中的菜鸟 发表于 2016-6-26 21:24 | 显示全部楼层 |阅读模式

本站严厉禁止求脱求破行为(包含无自我分析直接求思路),如发现此类求助主题请点击“举报”,让我们共同维护优质的学习环境!


200HB
本帖最后由 菜鸟中的菜鸟 于 2016-6-26 21:34 编辑

004010D0  |.  B9 08000000   mov ecx,0x8
004010D5  |.  BE 44304000   mov esi,Pusillus.00403044
004010DA  |>  8036 32       /xor byte ptr ds:[esi],0x32
004010DD  |.  46            |inc esi                                           ;  Pusillus.00403044
004010DE  |.^ E2 FA         \loopd short Pusillus.004010DA
把每个字符与0x32进行异或,循环次数为8

004010EA  |> /8A06          /mov al,byte ptr ds:[esi]
004010EC  |. |8A5E 01       |mov bl,byte ptr ds:[esi+0x1]
004010EF  |. |32C3          |xor al,bl
004010F1  |. |8887 4C304000 |mov byte ptr ds:[edi+0x40304C],al
004010F7  |. |83C6 02       |add esi,0x2
004010FA  |. |47            |inc edi
004010FB  |.^\E2 ED         \loopd short Pusillus.004010EA
取出相邻的两个字符进行异或,保存异或结果到0x40304C,循环次数为4

00401102  |.  8A06          mov al,byte ptr ds:[esi]
00401104  |.  8A5E 01       mov bl,byte ptr ds:[esi+0x1]
00401107  |.  32C3          xor al,bl
00401109  |.  8A5E 02       mov bl,byte ptr ds:[esi+0x2]
0040110C  |.  8A4E 03       mov cl,byte ptr ds:[esi+0x3]
0040110F  |.  32D9          xor bl,cl
00401111  |.  32C3          xor al,bl
把上一步计算出的四个字节进行异或,得到一个字节

00401113  |.  B9 08000000   mov ecx,0x8
00401118  |.  BE 44304000   mov esi,Pusillus.00403044
0040111D  |>  3006          /xor byte ptr ds:[esi],al
0040111F  |.  46            |inc esi                                           ;  Pusillus.00403044
00401120  |.^ E2 FB         \loopd short Pusillus.0040111D
把code的每个字符与上一步计算出一个字节进行异或


00401122  |.  B9 08000000   mov ecx,0x8
00401127  |.  BE 44304000   mov esi,Pusillus.00403044
0040112C  |.  BF 08304000   mov edi,Pusillus.00403008
00401131  |>  8A06          /mov al,byte ptr ds:[esi]
00401133  |.  3A07          |cmp al,byte ptr ds:[edi]
00401135  |.  75 1D         |jnz short Pusillus.00401154
00401137  |.  46            |inc esi                                           ;  Pusillus.00403044
00401138  |.  47            |inc edi                                           ;  Pusillus.00403008
00401139  |.^ E2 F6         \loopd short Pusillus.00401131
把处理后的code的每个字节与00403008起始的每个字节进行比较,全部相等则通过校验
00403008起始的每个字节内容如下:
00403008  1B591871  qY
0040300C  4C454279  yBEL

整个校验过程非常清楚,但是要从00403008起始的8个字节算出正确的注册码却要花一番心思。
作者在这里巧妙的利用大量的异或运算,异或运算最重要的就是交换律和结合律,以及a^a=0,a^0=a这四个性质

下面是keygen代码:

int main(int argc, char* argv[])
{
        unsigned int i;
        char szName[32] = { 0x71, 0x18, 0x59, 0x1B, 0x79, 0x42, 0x45, 0x4C,0x00 };//对应从00403008起始的8个字节
        char szSerial[32] = { 0 };
        unsigned char byResult=0;
        
        for (i = 0; i < 8; i++)
        {
                byResult ^= szName;
        }
        
        for (i = 0; i < 8; i++)
        {
                szSerial = szName ^ byResult;
        }
        
        for (i = 0; i < 8; i++)
        {
                szSerial = szSerial ^ 0x32;
        }
        
        printf("Serial:%s\r\n", szSerial);


        return 0;
}

正确的注册码是:Z3r0Ring



---------------------------------------------------------------------------------------------------

这是以上有别人分析出来的,在没看别人分析的文章前,也把算法分析了一下,也明白是怎么一回事,但是就感觉不太可能存在这样的注册码,
之后看了别人的分析,和别人的分析过程是一样的,就是不知道如何写注册机,这里说的不会写注册机,不是说,不会用C语言来
写,而是说,怎么写这个注册机,思路是什么,是思路的问题,而不是某种语言的语法实现,是感觉逻辑上行不通,不会存在这样的注册码能满足注册成功。

当输入一个序列号时,每个字符都^0x32后,再^这个序列号内部某种运算后的一个值,结果等于
char szName[32] = { 0x71, 0x18, 0x59, 0x1B, 0x79, 0x42, 0x45, 0x4C,0x00 }; 可能存在这种正确的序列号吗?
当在什么情况下,才会出现这种情况,,,想不明白。作者给出了a^a=0,a^0=a,这种解决方法,但是就是想不通,。。。。

所以想请高手给指点,卡在这里就是想不明白了。。上传下这个crackme. Pusillus.zip (1.32 KB, 下载次数: 64)

评分

参与人数 1HB +1 收起 理由
禽大师 + 1

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
梦游枪手 发表于 2016-6-26 21:24 | 显示全部楼层

最佳答案本应属于楼主私有,因此限制查看

您还有0次查看次数,点此查看答案

点此购买查看次数
也可以兑换VIP特权或加入解密专家,每日可免费查看5次最佳答案!

评分

参与人数 2HB +9 THX +2 荣耀 +1 收起 理由
彡墨鱼灬丶 + 8 + 1 + 1 被选中“最佳答案”荣耀+1,感谢你的热心解答!同时也感谢其他热心人!
菜鸟中的菜鸟 + 1 + 1 膜拜。经您指点,慢慢清楚一些了。谢谢。

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
退隐猫九_ 发表于 2016-6-26 21:36 | 显示全部楼层

解密专家都求助了   小白就看着
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 菜鸟中的菜鸟 发表于 2016-6-26 21:44 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
_BaZzi 发表于 2016-6-26 22:56 | 显示全部楼层

异或是可逆的
A^B=C -> A^C=B B^C=A
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表