CrackMe分析

0x00 流程分析

创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站设计制作、网站制作、丹寨网络推广、小程序定制开发、丹寨网络营销、丹寨企业策划、丹寨品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供丹寨建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

CrackMe 分析

CrackMe 分析

CrackMe 分析

CrackMe 分析

CrackMe 分析

CrackMe 分析

CrackMe 分析

CrackMe 分析

CrackMe 分析


提示输入帐号密码

图片2

回车后 提示 需要重新输入

载入OD

图片3


字符串搜索

找main函数


图片4


此时停在 00401060这里,是个

00401060  /$  83EC 30       sub esp,0x30 //分配栈帧

00401063  |.  68 FC804000   push Crackme.004080FC   ;  input your name:

00401068  |.  E8 6C020000   call Crackme.004012D9// printf

0040106D  |.  8D4424 1C     lea eax,dword ptr ss:[esp+0x1C]    

00401071  |.  50            push eax

00401072  |.  68 F8804000   push Crackme.004080F8     ;  %s

00401077  |.  E8 46020000   call Crackme.004012C2

0040107C  |.  68 E4804000   push Crackme.004080E4       ;  input your pass:

00401081  |.  E8 53020000   call Crackme.004012D9// scanf

00401086  |.  8D4C24 10     lea ecx,dword ptr ss:[esp+0x10]   

0040108A  |.  51            push ecx

0040108B  |.  68 F8804000   push Crackme.004080F8    ;  %s

00401090  |.  E8 2D020000   call Crackme.004012C2       ;  scanf()

00401095  |.  8D5424 18     lea edx,dword ptr ss:[esp+0x18]     ;  edx存放帐号地址

00401099  |.  8D4424 30     lea eax,dword ptr ss:[esp+0x30]     ;  eax存放密码地址

0040109D  |.  52            push edx

0040109E  |.  50            push eax

0040109F  |.  E8 5CFFFFFF   call Crackme.00401000//call 参数为两个地址 edx eax

004010A4  |.  83C4 20       add esp,0x20// 平衡堆栈

004010A7  |.  84C0          test al,al//若al为0 则 zf = 1 则je成立

004010A9  |.  74 19         je XCrackme.004010C4  //这里会跳到一个提示try again

 

图片5


这里是提示正确or错误的地方

004010A9  |. /74 19         je XCrackme.004010C4

004010AB  |. |68 D8804000   push Crackme.004080D8   ;  good job!

004010B0  |. |E8 24020000   call Crackme.004012D9

004010B5  |. |68 C0804000   push Crackme.004080C0   ;  the key is: md5(pass)

004010BA  |. |E8 1A020000   call Crackme.004012D9

004010BF  |. |83C4 08       add esp,0x8

004010C2  |. |EB 0D         jmp XCrackme.004010D1

004010C4  |> \68 B4804000   push Crackme.004080B4   ;  try again!

004010C9  |.  E8 0B020000   call Crackme.004012D9

 

0x01 验证函数分析

入口点

0040109F  |.  E8 5CFFFFFF   call Crackme.00401000         //验证函数

 

00401000  /$  55            push ebp

00401001  |.  56            push esi

00401002  |.  8B7424 0C     mov esi,dword ptr ss:[esp+0xC]  ;  参数一

00401006  |.  57            push edi

00401007  |.  8BFE          mov edi,esi

00401009  |.  83C9 FF       or ecx,0xFFFFFFFF

0040100C  |.  33C0          xor eax,eax

0040100E  |.  8B5424 14     mov edx,dword ptr ss:[esp+0x14]  ;  参数二

00401012  |.  F2:AE         repne scas byte ptr es:[edi]   ;  长度

00401014  |.  F7D1          not ecx

00401016  |.  49            dec ecx

00401017  |.  8BFA          mov edi,edx     ;  edi存放密码地址

00401019  |.  8BE9          mov ebp,ecx      ;  ebp存放帐号长度

0040101B  |.  83C9 FF       or ecx,0xFFFFFFFF

0040101E  |.  F2:AE         repne scas byte ptr es:[edi]

00401020  |.  F7D1          not ecx

00401022  |.  49            dec ecx    ;  密码长度

00401023  |.  3BE9          cmp ebp,ecx          ;  长度比较

00401025  |.  74 06         je XCrackme.0040102D    ;  长度相等继续 不等退出

00401027  |.  5F            pop edi

00401028  |.  5E            pop esi

00401029  |.  32C0          xor al,al

0040102B  |.  5D            pop ebp

0040102C  |.  C3            retn

0040102D  |>  33C0          xor eax,eax

0040102F  |.  85ED          test ebp,ebp

00401031  |.  7E 19         jle XCrackme.0040104C

00401033  |.  53            push ebx

00401034  |.  BF 30804000   mov edi,Crackme.00408030  ;  全局变量 使用edi存放数组首地址

00401039  |>  8A0F          /mov cl,byte ptr ds:[edi]   ;  cl= [edi+eax]

0040103B  |.  8A1C10        |mov bl,byte ptr ds:[eax+edx]   ;  bl=密码地址+eax

0040103E  |.  32D9          |xor bl,cl      ;  密码=密码xor 数组[eax]

00401040  |.  83C7 04       |add edi,0x4       ;  下一个元素

00401043  |.  881C10        |mov byte ptr ds:[eax+edx],bl

00401046  |.  40            |inc eax         ;  eax++

00401047  |.  3BC5          |cmp eax,ebp       ;  eax < strlen(密码)

00401049  |.^ 7C EE         \jl XCrackme.00401039    ;  eax < ebp

0040104B  |.  5B            pop ebx

0040104C  |>  8BFA          mov edi,edx

0040104E  |.  8BCD          mov ecx,ebp

00401050  |.  33D2          xor edx,edx

00401052  |.  F3:A6         repe cmps byte ptr es:[edi],byte ptr ds:[esi]

00401054  |.  8BC2          mov eax,edx

00401056  |.  5F            pop edi

00401057  |.  5E            pop esi

00401058  |.  5D            pop ebp

00401059  |.  0F94C0        sete al//相等 al = 1

0040105C  \.  C3            retn

 

加密用的table 值



图片6

 

首先判断帐号密码长度是否相等


图片7

若长度相等,则首先将 密码中的各个元素与 00408030处的数 xor 操作,得到当前密码,

然后将密码与帐号进行比较


图片8

esi存放的是帐号 edi为密码

sete zf = 1 则al = 1


图片9

这样就过了。


网站标题:CrackMe分析
URL网址:http://scyanting.com/article/jdcjdi.html