我的破解可真是菜啊
本帖最后由 ywledoc 于 2011-5-18 22:34 编辑一道最简单的题,硬是破了4、5个小时没破出来。
逆估计都快逆全了~
求包养啊~
上传一份,求教育~不爆破,求注册码~
网址是这个:http://iscc2011.isclab.org/challenge/2011/crack/1
北京理工的一个信息安全比赛~~~ 看过简单破解教程的路过。 不是一般的简单,没保护壳,没反调试,字符串没加密,还有什么问题?? 回复 mingyuan 的帖子
找不到字符串的表示很纠结。。。。
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
回复 mingyuan 的帖子
这个我知道~但是注册码呢?要的是注册码啊~~ 注册码: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
回复 mingyuan 的帖子
同学你好帅~ 回复 mingyuan 的帖子
我只能说,我跟进去了,但是没跟出来~~多谢啦~ 顺便贴个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") ;
} 回复 mingyuan 的帖子
{:3_50:}0X7DB...................从我眼皮底下过去N次。。。。就是没把他当注册码~~~ 主要原因是没有把算码那部分弄明白,保存来保存去,最后把地址给弄丢了 回复 mingyuan 的帖子
谢谢啦~你的第一题~让我今天晚上把破解关全部给过了~ {:3_48:}帅,我以前只看过简单的破解教程,唯一的目的就是方便我跟踪VB的程序.... 的确简单! ty0625 发表于 2011-7-5 17:43 static/image/common/back.gif
的确简单!
:lol 是很简单~ 很多问题搞定后才知道简单,但要知道它简单的过程,却不简单.........
记得有个笑话,有关一个生产肥皂的生产线的.这种生产线有点小BUG,就是偶尔会有空盒子出现在最终区域.
某大厂就组织了博士还是啥的一帮人才,花了几个月,几十还是上百万,又是X光又是机械手的,完美搞定.
某小厂呢,老板让工人搞定,工人就盯着生产线看了半天,搬来一台大功率风扇,把空盒子吹下来了,完美搞定~~~~~
页:
[1]