• 逆向-还原代码之url_encode (Interl 32)


    #include

    void url_encode_char(char *va, char vb)
    {
     /*80484d0:    55                       push   %ebp
     80484d1:    89 e5                    mov    %esp,%ebp
     80484d3:    83 ec 28                 sub    $0x28,%esp
     80484d6:    8b 45 0c                 mov    0xc(%ebp),%eax    // parameter1, 8,9,a,b,c
     80484d9:    88 45 e4                 mov    %al,-0x1c(%ebp)    // parameter2
     80484dc:    c7 45 e8 30 31 32 33     movl   $0x33323130,-0x18(%ebp)
     80484e3:    c7 45 ec 34 35 36 37     movl   $0x37363534,-0x14(%ebp)
     80484ea:    c7 45 f0 38 39 41 42     movl   $0x42413938,-0x10(%ebp)
     80484f1:    c7 45 f4 43 44 46 00     movl   $0x464443,-0xc(%ebp)*/
        char str[]="0123456789ABCDF";

     /*80484f8:    8b 45 08                 mov    0x8(%ebp),%eax
     80484fb:    c6 00 25                 movb   $0x25,(%eax)*/
        va[0] = '%';

     /*80484fe:    8b 45 08                 mov    0x8(%ebp),%eax
     8048501:    8d 50 01                 lea    0x1(%eax),%edx
     8048504:    0f b6 45 e4              movzbl -0x1c(%ebp),%eax
     8048508:    c0 f8 04                 sar    $0x4,%al
     804850b:    0f be c0                 movsbl %al,%eax
     804850e:    83 e0 0f                 and    $0xf,%eax
     8048511:    0f b6 44 05 e8           movzbl -0x18(%ebp,%eax,1),%eax
     8048516:    88 02                    mov    %al,(%edx)*/
        va[1] = str[(vb>>4)&0x0f];

     /*8048518:    8b 45 08                 mov    0x8(%ebp),%eax
     804851b:    83 c0 01                 add    $0x1,%eax
     804851e:    0f b6 00                 movzbl (%eax),%eax
     8048521:    0f be c0                 movsbl %al,%eax
     8048524:    89 44 24 04              mov    %eax,0x4(%esp)
     8048528:    c7 04 24 24 86 04 08     movl   $0x8048624,(%esp)
     804852f:    e8 5c fe ff ff           call   8048390 */
        printf("%c\n", va[1]);

     /*8048534:    8b 45 08                 mov    0x8(%ebp),%eax
     8048537:    8d 50 02                 lea    0x2(%eax),%edx
     804853a:    0f be 45 e4              movsbl -0x1c(%ebp),%eax
     804853e:    83 e0 0f                 and    $0xf,%eax
     8048541:    0f b6 44 05 e8           movzbl -0x18(%ebp,%eax,1),%eax
     8048546:    88 02                    mov    %al,(%edx)*/
        va[2] = str[(vb&0xf)];

     //8048548:    c9                       leave  
     //8048549:    c3                       ret    
    }

    int main()
    {
     /*804854a:    55                       push   %ebp
     804854b:    89 e5                    mov    %esp,%ebp
     804854d:    83 e4 f0                 and    $0xfffffff0,%esp
     8048550:    83 ec 20                 sub    $0x20,%esp
     8048553:    c7 44 24 1b 00 00 00     movl   $0x0,0x1b(%esp)
     804855a:    00
     804855b:    c6 44 24 1f 00           movb   $0x0,0x1f(%esp)*/
        char str[5] = {0};

     /*8048560:    c7 44 24 04 61 00 00     movl   $0x61,0x4(%esp)
     8048567:    00
     8048568:    8d 44 24 1b              lea    0x1b(%esp),%eax
     804856c:    89 04 24                 mov    %eax,(%esp)
     804856f:    e8 5c ff ff ff           call   80484d0 */
        url_encode_char(str, 'a');

     /*8048574:    8d 44 24 1b              lea    0x1b(%esp),%eax
     8048578:    89 44 24 04              mov    %eax,0x4(%esp)
     804857c:    c7 04 24 28 86 04 08     movl   $0x8048628,(%esp)
     8048583:    e8 08 fe ff ff           call   8048390 */
        printf("%s\n", str);

     /*8048588:    b8 00 00 00 00           mov    $0x0,%eax
     804858d:    c9                       leave  
     804858e:    c3                       ret    
     804858f:    90                       nop*/
    }

    // code
    static void url_encode_char(char *b, char c)
    {
        char hex_table[] = "0123456789ABCDF";
     
        b[0] = '%';
        b[1] = hex_table[(c >> 4) & 0x0F];
        printf("%c\n", b[1]);    // 6
        b[2] = hex_table[c & 0x0F];
    }
     
    int main()
    {
        char b[5] = {0};
     
        url_encode_char(b, 'a');
        printf("main = %s \n", b);    // %61
     
        return 0;
    }

  • 相关阅读:
    大数据入门之hadoop学习
    Unity-2D游戏-打击感与敌人AI
    【云原生之Docker实战】使用docker部署koel家庭个人音乐服务器
    将瑞吉外卖项目jar包部署在远程服务器并成功运行在pc和移动端
    Linux SSH免密登录
    Nginx配置文件详解
    练习作业P1
    SQL*PLUS对文本长度的限制
    浏览器原理之跨域?跨站?你真的不懂我!
    go-zero微服务实战系列(七、请求量这么高该如何优化)
  • 原文地址:https://blog.csdn.net/xiaozhiwise/article/details/128113210