吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8183|回复: 20
收起左侧

[原创] 新手对一个CrackMe程序的算法跟踪和思路

  [复制链接]
〇〇木一 发表于 2013-6-14 10:29
本帖最后由 〇〇木一 于 2013-6-14 11:33 编辑

CrackMe是昨晚cupid912提供的,(链接:http://www.52pojie.cn/thread-199971-1-1.html)刚准备睡觉了就看见了这个CrackMe,就下下来试一下,结果一发不可收拾搞到了大半夜。真心伤不起,大牛们勿笑。
18.jpg
这CrackMe貌似年代有些久远,无壳,无花,新手最喜欢这种了有木有。
OD载入,搜索字符串,很快就能找到关键的地方

1.jpg
下个断点,试验下找到按钮事件的地方
2.jpg
3.jpg
4.jpg
可以得出00442FB9处为验证是否正确的关键Call,我们跟进去看下
5.jpg
6.jpg
7.jpg
先来看看此Call里[变量1]值的来源,回溯看看
13.jpg
再到Call外看看
14.jpg

15.jpg
发现[变量1]就是Codice输入的数值。
接下来
在这个Call里运行观察了几遍就会发现,不管怎样00442A16处的edi都为0,因为是相乘就导致了最后得出的ebx始终为0,最后也使00442A58处的跳转始终实现,永远不会成功。
那么我们就应该看看是什么使这个edi为0的,回溯看看

8.jpg
发现是初始传进来的eax赋值给的edi,再到Call外看看
9.jpg
发现是445830地址处的值赋给了eax,再到数据窗口看看445830的值,发现一直为0,这就奇怪了,要使Crack成功此处一定不能为0,所以肯定有某处会给这个地址赋值,要把它找出来
细心一点就能发现,

10.jpg
在00442F86处经过一个Call后就把eax赋值给了445830这个地址,而此处分明就是当Codice框输入的是非纯数字而提示错误之后才能运行到的代码,哈哈,现在终于发现这个CrackMe贱在了什么地方了,它跟本就是要输入两次Codice,而第一次要非纯数字,第二次要正数。
我们跟进00442F81处的Call,看看是怎么计算的要赋给445830处的值:

11.jpg
12.jpg
现在知道了,如何得到的445830处的值,我们就可以来写算法了
用输入的Nome和第一次输入的Codice来计算第2次输入的Codice值,然后注册
我自己写vc6.0的代码如下:


[AppleScript] 纯文本查看 复制代码
#include <stdio.h>
void main()
{
        char n[100];
        char n0[100];
        printf("请输入Nome:\n");
        scanf("%s",n0);
        printf("请输入第一次Codice:\n");
        scanf("%s",n);
//////////////////////////////////计算要写入445830处的值
        int a=0x37B;
        int i=1;
        while(n[i])
        {
                a+=((n%0x11+1)*n[i-1]);
                i++;
        }
        //printf("0x%X\n",a);
//////////////////////////////////计算第2次要输入的Codice
        int c=0;
        while(n0[c])
        {
                c++;
        }
        int d=0;
        for(int k=0;k<c;k++)
        {
                for(int j=c-1;j>=0;j--)
                {
                        d+=(n0[k]*n0[j]*a);
                }
        }
        if(d>0x80000000)
        {
                d^=0xFFFFFFFF;
                d-=0xFFFFFFFF;
        }
        d=d%0xA2C2A;
        //printf("0x%X\n",d);
        int g=d*0x59;
        for(;g/0x59+g%0x50+1!=d;g--)
        {        
        }
        printf("第二次Codice为:\n%d\n",g);
        getchar();
}


17.jpg
测试一下:
19.jpg
输入第一次Codice提示不是整数,我们点OK
20.jpg
再输入会出现一个again按钮,代码可以看出这个按钮和第一的按钮事件是一样的,我们就在输一次
21.jpg
22.jpg
哈哈,成功Cracked。

bang姐说过CrackMe是提高自己的有力途径。
以上献给同为新手的同胞们,大家一起加油!!!
CrackMe这里也发下:
aLoNg3x.2.rar (141.49 KB, 下载次数: 20)

                                                                                                                                                                    〇〇木一
                                                                                                                                                                    2013.6.14






免费评分

参与人数 2热心值 +2 收起 理由
admiz + 1 我很赞同!
Chief + 1 欢迎分析讨论交流,[吾爱破解论坛]有你更精.

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

陈萍萍 发表于 2013-6-14 10:48
支持, 虽然看的不是很懂。。~~
loveliuhao323 发表于 2013-6-14 10:52
cupid912 发表于 2013-6-14 10:55
本来以为简单的。。。被你这样说出来,那个激动的眼泪都出来了
原来不是我太菜,是他太难了。太膜拜你了偶像。
逍遥枷锁 发表于 2013-6-14 10:58
支持下,这个CM已经找到关键地方,算法call,可是对与这个关键call的算法不大清楚,谢谢学习下
我是邹军泽 发表于 2013-6-14 10:59
楼主能把文件发出来给大家学习学习吗
1354669803 发表于 2013-6-14 12:24
我怎么一点都不懂?是不是我菜了?
ysyongming 发表于 2013-6-14 12:39
我也看不懂。继续 学习吧。
yejiaxi82 发表于 2013-6-14 12:48
下来玩玩 …………
nba6648780 发表于 2013-6-17 21:17 来自手机
很深奥啊,看了很久才明白新手就是慢慢学
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-18 04:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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