简单登陆密码破解

简单登陆程序crack.c如下:

#include <stdio.h>
#include <memory.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int flag=0;
    char passwd[20];
   
    memset(passwd,0,sizeof(passwd));
    memcpy(passwd,argv[1],strlen(argv[1]));
   
    if(0==strcmp("hello",passwd))
    {
        flag=1;
    }
    else
    {
        flag=0;
    }
   
    if(flag==1) printf("crack success!\n");
    else       printf("crack fail!\n");
    
    while(1);
    return 0;
}

 

Dev-C++ 4.9.9.2下编译为crack.exe。用OD将crack.exe打开,截取部分代码如下:

004012BA   . C745 F4 000000>MOV DWORD PTR SS:[EBP-C],0               ; ||||
004012C1   . C74424 08 1400>MOV DWORD PTR SS:[ESP+8],14              ; ||||
004012C9   . C74424 04 0000>MOV DWORD PTR SS:[ESP+4],0               ; ||||
004012D1   . 8D45 C8        LEA EAX,DWORD PTR SS:[EBP-38]            ; ||||
004012D4   . 890424         MOV DWORD PTR SS:[ESP],EAX               ; ||||
004012D7   . E8 64050000    CALL <JMP.&msvcrt.memset>                ; |||\memset
004012DC   . 8B45 0C        MOV EAX,DWORD PTR SS:[EBP+C]             ; |||
004012DF   . 83C0 04        ADD EAX,4                                ; |||
004012E2   . 8B00           MOV EAX,DWORD PTR DS:[EAX]               ; |||
004012E4   . 890424         MOV DWORD PTR SS:[ESP],EAX               ; |||
004012E7   . E8 44050000    CALL <JMP.&msvcrt.strlen>                ; ||\strlen
004012EC   . 894424 08      MOV DWORD PTR SS:[ESP+8],EAX             ; ||
004012F0   . 8B45 0C        MOV EAX,DWORD PTR SS:[EBP+C]             ; ||
004012F3   . 83C0 04        ADD EAX,4                                ; ||
004012F6   . 8B00           MOV EAX,DWORD PTR DS:[EAX]               ; ||
004012F8   . 894424 04      MOV DWORD PTR SS:[ESP+4],EAX             ; ||
004012FC   . 8D45 C8        LEA EAX,DWORD PTR SS:[EBP-38]            ; ||
004012FF   . 890424         MOV DWORD PTR SS:[ESP],EAX               ; ||
00401302   . E8 31050000    CALL <JMP.&msvcrt.memcpy>                ; |\memcpy
00401307   . 8D45 C8        LEA EAX,DWORD PTR SS:[EBP-38]            ; |
0040130A   . 894424 04      MOV DWORD PTR SS:[ESP+4],EAX             ; |
0040130E   . C70424 0030400>MOV DWORD PTR SS:[ESP],crack.00403000    ; |ASCII "hello"
00401315   . E8 0E050000    CALL <JMP.&msvcrt.strcmp>                ; \strcmp
0040131A   . 85C0           TEST EAX,EAX
0040131C   . 75 09          JNZ SHORT crack.00401327
0040131E   . C745 F4 010000>MOV DWORD PTR SS:[EBP-C],1
00401325   . EB 07          JMP SHORT crack.0040132E

                    00401327   > C745 F4 000000>MOV DWORD PTR SS:[EBP-C],0


0040132E   > 837D F4 01     CMP DWORD PTR SS:[EBP-C],1               ; |
00401332   . 75 0E          JNZ SHORT crack.00401342                 ; |
00401334   . C70424 0630400>MOV DWORD PTR SS:[ESP],crack.00403006    ; |ASCII "crack success!
"
0040133B   . E8 E0040000    CALL <JMP.&msvcrt.printf>                ; \printf
00401340   . EB 0C          JMP SHORT crack.0040134E
00401342   > C70424 1630400>MOV DWORD PTR SS:[ESP],crack.00403016    ; |ASCII "crack fail!
"
00401349   . E8 D2040000    CALL <JMP.&msvcrt.printf>                ; \printf
0040134E   >-EB FE          JMP SHORT crack.0040134E
00401350  /$ 55             PUSH EBP
00401351  |. B9 E4304000    MOV ECX,crack.004030E4
00401356  |. 89E5           MOV EBP,ESP

 其中缩进部分即为判断不通过时给flag赋值部分,将0后右击选“复制到可执行文件”,保存。DOS下执行修改后的crack.exe,则输入错误的参数也可通过。

 

对破解没有了解,笔试中遇到的这个题目,当时想到了这个方案,但不知道对不对,也没写,今天验证了一下,记录之。

 


004012BA   . C745 F4 000000>MOV DWORD PTR SS:[EBP-C],0               ; ||||
004012C1   . C74424 08 1400>MOV DWORD PTR SS:[ESP+8],14              ; ||||
004012C9   . C74424 04 0000>MOV DWORD PTR SS:[ESP+4],0               ; ||||
004012D1   . 8D45 C8        LEA EAX,DWORD PTR SS:[EBP-38]            ; ||||
004012D4   . 890424         MOV DWORD PTR SS:[ESP],EAX               ; ||||
004012D7   . E8 64050000    CALL <JMP.&msvcrt.memset>                ; |||\memset
004012DC   . 8B45 0C        MOV EAX,DWORD PTR SS:[EBP+C]             ; |||
004012DF   . 83C0 04        ADD EAX,4                                ; |||
004012E2   . 8B00           MOV EAX,DWORD PTR DS:[EAX]               ; |||
004012E4   . 890424         MOV DWORD PTR SS:[ESP],EAX               ; |||
004012E7   . E8 44050000    CALL <JMP.&msvcrt.strlen>                ; ||\strlen
004012EC   . 894424 08      MOV DWORD PTR SS:[ESP+8],EAX             ; ||
004012F0   . 8B45 0C        MOV EAX,DWORD PTR SS:[EBP+C]             ; ||
004012F3   . 83C0 04        ADD EAX,4                                ; ||
004012F6   . 8B00           MOV EAX,DWORD PTR DS:[EAX]               ; ||
004012F8   . 894424 04      MOV DWORD PTR SS:[ESP+4],EAX             ; ||
004012FC   . 8D45 C8        LEA EAX,DWORD PTR SS:[EBP-38]            ; ||
004012FF   . 890424         MOV DWORD PTR SS:[ESP],EAX               ; ||
00401302   . E8 31050000    CALL <JMP.&msvcrt.memcpy>                ; |\memcpy
00401307   . 8D45 C8        LEA EAX,DWORD PTR SS:[EBP-38]            ; |
0040130A   . 894424 04      MOV DWORD PTR SS:[ESP+4],EAX             ; |
0040130E   . C70424 0030400>MOV DWORD PTR SS:[ESP],crack.00403000    ; |ASCII "hello"
00401315   . E8 0E050000    CALL <JMP.&msvcrt.strcmp>                ; \strcmp
0040131A   . 85C0           TEST EAX,EAX
0040131C   . 75 09          JNZ SHORT crack.00401327
0040131E   . C745 F4 010000>MOV DWORD PTR SS:[EBP-C],1
00401325   . EB 07          JMP SHORT crack.0040132E
00401327   > C745 F4 000000>MOV DWORD PTR SS:[EBP-C],0
0040132E   > 837D F4 01     CMP DWORD PTR SS:[EBP-C],1               ; |
00401332   . 75 0E          JNZ SHORT crack.00401342                 ; |
00401334   . C70424 0630400>MOV DWORD PTR SS:[ESP],crack.00403006    ; |ASCII "crack success!
"
0040133B   . E8 E0040000    CALL <JMP.&msvcrt.printf>                ; \printf
00401340   . EB 0C          JMP SHORT crack.0040134E
00401342   > C70424 1630400>MOV DWORD PTR SS:[ESP],crack.00403016    ; |ASCII "crack fail!
"
00401349   . E8 D2040000    CALL <JMP.&msvcrt.printf>                ; \printf
0040134E   >-EB FE          JMP SHORT crack.0040134E
00401350  /$ 55             PUSH EBP
00401351  |. B9 E4304000    MOV ECX,crack.004030E4
00401356  |. 89E5           MOV EBP,ESP

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值