吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3515|回复: 13
收起左侧

[CTF] 算法分析:Reversing-x64Elf-100逆向题

[复制链接]
Panel 发表于 2022-3-7 23:11

算法分析:Reversing-x64Elf-100逆向题

1.下载查壳

image-20220307225112114.png

64位无壳

2.拖进IDA具体分析

①shift+F12查找是否有关键字符串

image-20220307225240825.png

发现关键字符串“nice!”,按照经验来看这就是成功验证后的提示
②找到引用关键字符函数

image-20220307225355258.png

③阅读代码可以知道流程:要求用户输入一个字符串存入s中,将s地址作为参数传给sub_4006FD,将sub_4006FD的返回值最为调用sub_4006FD函数的if判断条件,如果返回值为非零值则提示“Incorrect password!”,所以要让sub_4006FD返回值为0
⑤跟进sub_4006FD函数

image-20220307225734777.png

阅读代码可以发现只有for中的if条件满足时才会返回非零1,但是我们想要的是返回,所以要在这11次循环中让if条件不成立,那查看条件
*(char *)(v3[i % 3] + 2 * (i / 3)) - *(char *)(i + a1) != 1
使每次循环v3对应数组的值加上2 * (i / 3)的值作为地址,取该地址的值
减去每次(i + a1)地址的值,判断相减的结果是否为1,不为1的话就继续循环,为1的话就会返回1,那么我们肯定是使它循环完11次返回0,仔细看这里的a1就是我们在main函数中出入进来的我们输入的字符串的地址值,那么重点来了,我们的目的就是不然if条件成立,那么就可以写成
*(char *)(v3[i % 3] + 2 * (i / 3)) - *(char *)(i + a1) == 1
这样算出来的(i + a1)对应地址的值就是正确的值
那直接写脚本
#include <stdio.h>
int main()
{
    int i; // [rsp+14h] [rbp-24h]
    int n = 0;
    __int64 v3[4]; // [rsp+18h] [rbp-20h]
    int a1[11] = {1};
    v3[0] = (__int64)"Dufhbmf";
    v3[1] = (__int64)"pG`imos";
    v3[2] = (__int64)"ewUglpt";
    for (i = 0; i <= 11; ++i)
    {
        for (size_t n = 0; n < 222; n++)
        {
            if (*(char*)(v3[i % 3] + 2 * (i / 3)) - n == 1)
                a1[i] = n;
        }
    }
    for (size_t i = 0; i < 15; i++)
    {
        printf("%c",a1[i] );
    }
}
定义一个变量n最为我们输入的每个字符对应的ASCLL码值,设n的最大ASCLL码值为200,通过不断地判断(char)(v3[i % 3] + 2 (i / 3)) - n == 1来把满足条件的n存入我们的正确flag数组中

3.结果

image-20220307230949131.png

免费评分

参与人数 4威望 +1 吾爱币 +22 热心值 +4 收起 理由
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
woyucheng + 1 + 1 谢谢@Thanks!
kaixianxian + 1 + 1 热心回复!
夫子点灯 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Panel 发表于 2022-3-8 09:13
ceweithr 发表于 2022-3-8 08:02
这套是关于Linux elf的吗?正在找此类的学习资源呢!

是的,但是我用了静态分析,没在linux上跑
ceweithr 发表于 2022-3-8 08:02
这套是关于Linux elf的吗?正在找此类的学习资源呢!
iloveasdl 发表于 2022-3-8 08:47
allycn 发表于 2022-3-8 09:29
学习了,谢谢分享
system001 发表于 2022-3-8 09:48
感谢分享,学习学习
mrmajun 发表于 2022-3-8 10:00
好,不错
Mryu_ 发表于 2022-3-8 14:42
感谢楼主,最近正在学习相关内容!
kof888 发表于 2022-3-8 16:29
这个算法看起来v3数组里面的单数都没用上,都是算2的倍数
中原一点红 发表于 2022-3-9 00:09
虽然看不懂,不过还是感谢分享,支持下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 17:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表