ywledoc 发表于 2011-5-18 22:32:48

我的破解可真是菜啊

本帖最后由 ywledoc 于 2011-5-18 22:34 编辑

一道最简单的题,硬是破了4、5个小时没破出来。
逆估计都快逆全了~
求包养啊~

上传一份,求教育~不爆破,求注册码~


网址是这个:http://iscc2011.isclab.org/challenge/2011/crack/1
北京理工的一个信息安全比赛~~~

Tesla.Angela 发表于 2011-5-18 23:01:21

看过简单破解教程的路过。

mingyuan 发表于 2011-5-19 00:14:34

不是一般的简单,没保护壳,没反调试,字符串没加密,还有什么问题??

ywledoc 发表于 2011-5-19 10:05:05

回复 mingyuan 的帖子

找不到字符串的表示很纠结。。。。

mingyuan 发表于 2011-5-19 10:09:20



00401004   .55            PUSH EBP
00401005   .8BEC          MOV EBP,ESP
00401007   .81EC 10000000 SUB ESP,10
0040100D   >6A FF         PUSH -1
0040100F   .6A 08         PUSH 8
00401011   .68 03000116   PUSH 16010003
00401016   .68 01000152   PUSH 52010001
0040101B   .E8 48010000   CALL crackme0.00401168
00401020   .83C4 10       ADD ESP,10
00401023   .8945 FC       MOV DWORD PTR SS:,EAX
00401026   .68 04000080   PUSH 80000004
0040102B   .6A 00         PUSH 0
0040102D   .8B45 FC       MOV EAX,DWORD PTR SS:
00401030   .85C0          TEST EAX,EAX
00401032   .75 05         JNZ SHORT crackme0.00401039
00401034   .B8 509B4600   MOV EAX,crackme0.00469B50
00401039   >50            PUSH EAX
0040103A   .68 01000000   PUSH 1
0040103F   .BB D0114000   MOV EBX,crackme0.004011D0
00401044   .E8 13010000   CALL crackme0.0040115C
00401049   .83C4 10       ADD ESP,10
0040104C   .8945 F8       MOV DWORD PTR SS:,EAX
0040104F   .8B5D FC       MOV EBX,DWORD PTR SS:
00401052   .85DB          TEST EBX,EBX
00401054   .74 09         JE SHORT crackme0.0040105F
00401056   .53            PUSH EBX
00401057   .E8 06010000   CALL crackme0.00401162
0040105C   .83C4 04       ADD ESP,4
0040105F   >E8 88000000   CALL crackme0.004010EC
00401064   .3945 F8       CMP DWORD PTR SS:,EAX
00401067   .0F85 40000000 JNZ crackme0.004010AD
0040106D   .68 04000080   PUSH 80000004
00401072   .6A 00         PUSH 0
00401074   .68 519B4600   PUSH crackme0.00469B51                   ;努力
00401079   .68 01030080   PUSH 80000301
0040107E   .6A 00         PUSH 0
00401080   .68 40000000   PUSH 40
00401085   .68 04000080   PUSH 80000004
0040108A   .6A 00         PUSH 0
0040108C   .68 569B4600   PUSH crackme0.00469B56                   ;注册成功
00401091   .68 03000000   PUSH 3
00401096   .BB D0134000   MOV EBX,crackme0.004013D0
0040109B   .E8 BC000000   CALL crackme0.0040115C
004010A0   .83C4 28       ADD ESP,28
004010A3   .E9 40000000   JMP crackme0.004010E8
004010A8   .^ E9 60FFFFFF   JMP crackme0.0040100D
004010AD   >68 04000080   PUSH 80000004
004010B2   .6A 00         PUSH 0
004010B4   .68 5F9B4600   PUSH crackme0.00469B5F                   ;加油
004010B9   .68 01030080   PUSH 80000301
004010BE   .6A 00         PUSH 0
004010C0   .68 40000000   PUSH 40
004010C5   .68 04000080   PUSH 80000004
004010CA   .6A 00         PUSH 0
004010CC   .68 649B4600   PUSH crackme0.00469B64                   ;注册失败
004010D1   .68 03000000   PUSH 3
004010D6   .BB D0134000   MOV EBX,crackme0.004013D0
004010DB   .E8 7C000000   CALL crackme0.0040115C
004010E0   .83C4 28       ADD ESP,28
004010E3   .E8 04000000   CALL crackme0.004010EC
004010E8   >8BE5          MOV ESP,EBP
004010EA   .5D            POP EBP
004010EB   .C3            RETN

ywledoc 发表于 2011-5-19 10:14:56

回复 mingyuan 的帖子

这个我知道~但是注册码呢?要的是注册码啊~~

mingyuan 发表于 2011-5-19 17:58:24

注册码:2011
核心算法:
00449B59|> /833D 50484800>/CMP DWORD PTR DS:,1
00449B60|. |7E 0C         |JLE SHORT crackme0.00449B6E
00449B62|. |6A 04         |PUSH 4
00449B64|. |56            |PUSH ESI
00449B65|. |E8 38710000   |CALL crackme0.00450CA2
00449B6A|. |59            |POP ECX
00449B6B|. |59            |POP ECX
00449B6C|. |EB 0B         |JMP SHORT crackme0.00449B79
00449B6E|> |A1 44464800   |MOV EAX,DWORD PTR DS:
00449B73|. |8A0470      |MOV AL,BYTE PTR DS:
00449B76|. |83E0 04       |AND EAX,4
00449B79|> |85C0          |TEST EAX,EAX
00449B7B|. |74 0D         |JE SHORT crackme0.00449B8A
00449B7D|. |8D049B      |LEA EAX,DWORD PTR DS:
00449B80|. |8D5C46 D0   |LEA EBX,DWORD PTR DS:
00449B84|. |0FB637      |MOVZX ESI,BYTE PTR DS:
00449B87|. |47            |INC EDI                                 ;crackme0.00487C48
00449B88|.^\EB CF         \JMP SHORT crackme0.00449B59

004010EC/$55            PUSH EBP
004010ED|.8BEC          MOV EBP,ESP
004010EF|.81EC 04000000 SUB ESP,4
004010F5|.C745 FC 00000>MOV DWORD PTR SS:,0
004010FC|.C745 FC DB070>MOV DWORD PTR SS:,7DB
00401103|.8B45 FC       MOV EAX,DWORD PTR SS:
00401106|.E9 00000000   JMP crackme0.0040110B
0040110B|>8BE5          MOV ESP,EBP
0040110D|.5D            POP EBP

00401064   .3945 F8       CMP DWORD PTR SS:,EAX
00401067   .0F85 40000000 JNZ crackme0.004010AD

ywledoc 发表于 2011-5-19 18:28:01

回复 mingyuan 的帖子

同学你好帅~

ywledoc 发表于 2011-5-19 18:30:42

回复 mingyuan 的帖子

我只能说,我跟进去了,但是没跟出来~~多谢啦~

mingyuan 发表于 2011-5-19 18:48:54

顺便贴个C写的算法
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//////////////////////////////////////////////////////////////////////////
//获得一个数字串的值(通过一定的计算)
int GetTheCodeString(char cstring[],int n)
{
        int i =0;
        int result =0;
        for(i=0;i<n;i++)
        {
                result =cstring-0x30 + 10*result ;
        }
        return result ;
}

void main()
{
        int istrlen =0 ;                //待计算字符串的长度
        int iequvalue =0x7db ;        //固定值
        int icountmax =0;                //最大字符个数
        char cstring ;
        //////////////////////////////////////////////////////////////////////////
        //首先得到数字串的最大个数
        memset(cstring,0,128) ;
        cstring ='1' ;
        icountmax =1 ;
        while (GetTheCodeString(cstring,icountmax)<=iequvalue)
        {
                //当该数字串计算出来的值小于固定值
                cstring ='1' ;
                icountmax ++ ;
        }
        //////////////////////////////////////////////////////////////////////////
        //初始化操作
        memset(cstring,0,128);
        long lresult =0;
        while ( true)
        {
                //////////////////////////////////////////////////////////////////////////
                //首先判断是否继续
                if (strlen(cstring) > icountmax)
                {
                        //直接跳出
                        break;
                }
                //////////////////////////////////////////////////////////////////////////
                //将lresult 转换成 char[]
                //清空缓冲区
                memset(cstring,0,128) ;
                itoa(lresult,cstring,10) ;
                //////////////////////////////////////////////////////////////////////////
                //判断是否和固定值相等,如果相等那个显示出来
                int imyresult =GetTheCodeString(cstring,strlen(cstring)) ;
                if ( imyresult==iequvalue)
                {
                        printf("%s \r\n",cstring) ;
                }
                //////////////////////////////////////////////////////////////////////////
                //对数字串增加数据处理
                lresult ++ ;
        }
        system("pause") ;
}

ywledoc 发表于 2011-5-19 19:25:11

回复 mingyuan 的帖子

{:3_50:}0X7DB...................从我眼皮底下过去N次。。。。就是没把他当注册码~~~

ywledoc 发表于 2011-5-19 19:27:16

主要原因是没有把算码那部分弄明白,保存来保存去,最后把地址给弄丢了

ywledoc 发表于 2011-5-19 21:45:51

回复 mingyuan 的帖子

谢谢啦~你的第一题~让我今天晚上把破解关全部给过了~

马大哈 发表于 2011-5-20 10:47:50

{:3_48:}帅,我以前只看过简单的破解教程,唯一的目的就是方便我跟踪VB的程序....

ty0625 发表于 2011-7-5 17:43:29

的确简单!

ywledoc 发表于 2011-7-5 17:50:20

ty0625 发表于 2011-7-5 17:43 static/image/common/back.gif
的确简单!

:lol 是很简单~

马大哈 发表于 2011-7-6 00:50:49

很多问题搞定后才知道简单,但要知道它简单的过程,却不简单.........

记得有个笑话,有关一个生产肥皂的生产线的.这种生产线有点小BUG,就是偶尔会有空盒子出现在最终区域.

某大厂就组织了博士还是啥的一帮人才,花了几个月,几十还是上百万,又是X光又是机械手的,完美搞定.

某小厂呢,老板让工人搞定,工人就盯着生产线看了半天,搬来一台大功率风扇,把空盒子吹下来了,完美搞定~~~~~
页: [1]
查看完整版本: 我的破解可真是菜啊