攻防世界hackme做法(简洁明了)

本文讲述了作者如何通过IDA64进行逆向工程,找到关键代码段,尤其是利用if条件和数组操作来解析变量,最终确定flag的过程。着重强调了对代码的理解和数组取值的分析技巧。
摘要由CSDN通过智能技术生成

首先简单的查壳操作就不说了,丢进去就行了,一看是64bit,那就用ida64打开0f7651deb5044568a2722840a49af9b3.png打开后看到有很多的函数,第一反应ctrl+f寻找main函数,但我更想shift+f12直接找字符串,然后就发现了这些37e9f8f185634eeca11edae0233d805a.png这边关键词congras,代表成功的意思,那就点进去看一下b44465a390d54224b23fb64f8016b88e.png接着选中这句字符串,ctrl+x进入,然后是这样的33e32d6ea855497985bdee4b37e17697.png一看就很有东西,那就逐一分析喽,并在旁边写上注释,总的分析不难,有一些细节点注意一下就好了,关键在于if(v21!=(v24^v20)),这边两个已知,v21和v24,那么未知的v20就是flag了呗,往上找代码对v21和v24的处理就行了,这里的v10有着0-21的可能,因为是对22取模,v21有数组对他赋值,进入提取出来就行了,v10对v19进行了赋值,v23在用之前会被归0,然后进入while,对v24操作,得到v24,这边v18没用,是烟雾弹,大概就这样分析,最后上代码


#include<stdio.h>
int main() {
    int v21[]= {
   95, 242,  94, 139,  78,  14, 163, 170, 199, 147,
  129,  61,  95, 116, 163,   9, 145,  43,  73,  40,
  147, 103,   0,   0
    };                          //这个数组是提取出来的
    int result;
    int v24;
    int v23;
    int v19;
    int v10[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14
     ,15,16,17,18,19,20,21 };        //这个数组是v10的所有取值
    for (int i = 0; i < sizeof(v21) / sizeof(int); i++) {
        v24 = 0;
        v23 = 0;
        v19 = v10[i] + 1;
        while (v23 < v19) {     //照葫芦画瓢就行
            ++v23;
            v24= 1828812941 * v24 + 12345;
        }
        result = v21[i] ^ v24;
        printf("%c", result);
    }
    return 0;
}

最后运行一下就得出flag喽。

总结一下啊,这边可能有一个点会想不到,就是v10的取值,因为是对22取模,所以可能值为0-21,然后就是分析代码的能力了,还是很简单的,熟能生巧,大家多做做就会了。(给个赞支持一下喽,^_^)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值