• 0day2安全——笔记1


    第一章

    PE和内存之间的映射

    节偏移

    文件偏移地址(File Offset Address):数据在PE文件中的地址

    装载地址(Image Base):PE装入内存的基地址

    虚拟内存地址(Virtual Address,VA):PE文件中的指令被装入内存后的地址

    相对虚拟地址(Relative Virtual Address,RVA):相对虚拟地址是虚拟内存地址相对于映射基址(装载地址)的偏移量

    关系:

    VA = Image Base + RVA

    节偏移=文件虚拟地址偏移量-文件物理地址偏移量

    文件偏移地址=虚拟内存地址-装载基址-节偏移

    例:虚拟内存地址为0x4010D4,文件虚拟地址偏移量为1000h,文件物理地址偏移量为200h

     文件偏移地址=0x4010D4-0x400000(1000h-200h)=0x2D4  (注意十六进程的换算)

    分析和破解win32控制台程序

    环境如下

    系统:windows7 x64虚拟机

    软件:IDA Pro、UltraEdit

    编译器:vc++6.0

    注意:尽量不用vs或其他IDE,否则反编译时出现的伪代码不同,有些IDE编译会加入IDE的一些代码提高软件安全性等(笔者使用了vs2017,反编译出来没有main函数)

    代码:

    #include <stdio.h>
    #include <string.h>
    #define PASSWORD "123456"
    
    
    int verfity(char *password) {
        int i;
        i = strcmp(password, PASSWORD);
        return i;
    
    
    }
    
    int main() {
    
        char password[1024];
        int i;
        printf("please input pwd:
    ");
        while (1) {
            scanf("%s",password);
    
            i = verfity(password);
            if (i){
                printf("fail!please input pwd:
    ");
            }
            else{
                printf("success
    ");
                break;
                
            }
        }
        return 0;
    
    }

    载入IDA,这里选择第一个(进行PE分析)

    进入main函数,按F12查看函数的流程图

    经过分析后我们发现破解的关键点在于怎么跳过验证(两个字符串对比)

    我们可以从字符串对比的判断JZ(为零则跳)作为切入点

    按空格键进入汇编代码,找到JZ的虚拟地址004010D4

     

    根据前面虚拟内存计算的例子,可以得出文件偏移地址是0x2D4

    打开UltraEdit,进入0x2D4的位置,把74(机器指令JZ)修改为75(机器指令JNZ)

    保存程序,破解完成!

    关于机器指令和汇编指令可以参考: https://blog.csdn.net/ida0918/article/details/52655615

  • 相关阅读:
    PHP的注释规范
    IP地址与,域名,DNS服务器,端口号的联系与概念
    转: CentOS上安装LAMP之第一步:Apache环境及安装过程报错解决方案(纯净系统环境)
    转:VMware中CentOS配置静态IP进行网络访问(NAT方式和桥接模式)
    虚拟主机详细的配置
    PHP操作MySQL
    【优化】EXPLAIN--type
    数据库范式
    【优化】碎片OPTIMIZE
    【原理】原理与优化(二)
  • 原文地址:https://www.cnblogs.com/luocodes/p/11863368.html
Copyright © 2020-2023  润新知