温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

CrackMe 分析

发布时间:2020-07-03 18:07:18 来源:网络 阅读:937 作者:不怕小猫咪 栏目:安全技术

0x00 流程分析


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则 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!\n

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


这样就过了。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI