Crack小实验

0x01 实验环境:

操作系统 windows10
编译器 visual C++6.0
编译选项 默认编译选项
build版本 release版本 release和debug都可以

0x02 release

用vc++6.0编译出来一个release版本;

改变可执行文件得执行流程,使输入任何字符都可以进入正确的执行流程;

code

/*****************************************************************************
      To be the apostrophe which changed "Impossible" into "I'm possible"!

POC code of chapter 3.7 in book "Vulnerability Exploit and Analysis Technique"

file name   : crack_me.c
author      : failwest  
date        : 2006.9.20
description : used as a simple demo to show how to crack a PE file   
Noticed     : should be complied with VC6.0 and build into release version  
version     : 1.0
E-mail      : failwest@gmail.com

    Only for educational purposes    enjoy the fun from exploiting :)
******************************************************************************/

#include <stdio.h>
#define PASSWORD "1234567"
int verify_password (char *password)
{
    int authenticated;
    authenticated=strcmp(password,PASSWORD);
    return authenticated;
}

main()
{
    int valid_flag=0;
    char password[1024];
    while(1)
    {
        printf("please input password:       ");
        scanf("%s",password);
        valid_flag = verify_password(password);
        if(valid_flag)
        {
            printf("incorrect password!\n\n");
        }
        else
        {
            printf("Congratulation! You have passed the verification!\n");
            break;
        }
    }

    system("pause");
}

0x03 ida

3.1

把crack_me(release_creak).exe拖进IDA,如图:

file

3.2

用鼠标选中程序的分支点,按空格键进入到汇编界面,看到代码段和VA : 0040106E。

注:IDA已把该指令的地址换算成了运行时的内存地址。

file

0x04 OllyDbg

4.1

用OllyDbg动态调试,看程序是怎么分支的,OllyDbg加载文件之后使用快捷键Ctrl+G直接跳转到这个VA地址处;

file

4.2

快捷键F2在0040106E地址处下个断点,快捷键F9让程序运行起来,这时OllyDbg暂时挂起,到程序提示输入密码的console界面随便输入一个错误的密码,回车确认之后,OllyDbg会重新中断程序

修改:

0040106C 85C0 test eax, eax ##密码验证返回值存在eax里,这里判断eax是否为0; 修改方法1: test修改为xor

0040106E 74 0F je short 0040107F ## 修改方法2: 把这里修改为jne

保存:

鼠标右键,"复制到可执行文件->所有修改->全部复制->鼠标右键(保存)->所有修改"把修改部分保存下来即可

file

4.3

修改之后,机器码je(74)修改为jne(75),这个也可以直接在PE文件中找到这个位置修改;

file

4.4

结果:

file

0x05 PE

在PE文件中把指定地址的je修改为jne;

用工具查看下这个区段的偏移值

file

PE文件的偏移 = 虚拟内存地址(VA)- 装载基址(Image Base)- 节偏移
= 0040106E – 0x00400000 – (0x00001000 – 0x00001000)
= 0x106E

在PE文件中在这个位置把74修改为75即可;

file


file

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇