攻防世界elrond32做法(简单做法)

431401299b5c497dac5afdf0b1e5c3af.png前面不多说,查壳,然后是32bit,就直接拖进ida32中

a0dffa44dec242c3bcba50b14f5d6422.png这边进入主函数后查看,发现就是一个简单的if判断,if括号内的条件对,就成功,在旁边简单注释一下,此处给a2[1]留个心眼,然后我们先进入sub_8048414函数看看050a1c13fae44532afb0c46be0f54819.png此处需要注意的是,该函数的返回值必须要是非0才行,不然原来if括号内的条件就不满足了,这个函数的返回值为result,所以保证result不为0就行了,这边逐一进行分析,上面a2的初始值为0(看写的注释),那就找case 0处,要想result!=0,那就让这个if条件不满足,*a1=105,然后再跳转到             LABEL_19,这边是一个递归,这边注重看a2值的变化就行,然后再到相应的case去,获得*a1的下一个数,比如,接着刚才下面,跳转之后,

a2=7*(a2+1)%11,此处a2为0,带入,a2获得新值7,那就去case 7,*a1的下一个数就是115,以此类推,最后a2=2,发现没有对应的case 了,那就结束,然后再进入另一个函数看看ed72dc925ba84e08a8e44e86c47afa87.png

发现就是这样一个简单的算法,我们上面获得的数组就是*a1,此处再点进unk_8048760,提取数据,得到另一个数组,两个数组都有了,那就异或,答案出来了就,最后


#include<stdio.h>
int main() {
    int num[]= {
   15,   0,   0,   0,  31,   0,   0,   0,   4,   0,
    0,   0,   9,   0,   0,   0,  28,   0,   0,   0,
   18,   0,   0,   0,  66,   0,   0,   0,   9,   0,
    0,   0,  12,   0,   0,   0,  68,   0,   0,   0,
   13,   0,   0,   0,   7,   0,   0,   0,   9,   0,
    0,   0,   6,   0,   0,   0,  45,   0,   0,   0,
   55,   0,   0,   0,  89,   0,   0,   0,  30,   0,
    0,   0,   0,   0,   0,   0,  89,   0,   0,   0,
   15,   0,   0,   0,   8,   0,   0,   0,  28,   0,
    0,   0,  35,   0,   0,   0,  54,   0,   0,   0,
    7,   0,   0,   0,  85,   0,   0,   0,   2,   0,
    0,   0,  12,   0,   0,   0,   8,   0,   0,   0,
   65,   0,   0,   0,  10,   0,   0,   0,  20,   0,
    0,   0
    };
    int result;
    int k = 0;
    int str[] = { 105,115,101,110,103,97,114,100 };
    for (int i = 0; i <= 32; i++) {
        result = num[k] ^ str[i % 8];
        k += 4;
        printf("%c", result);
    }
    return 0;
}

上代码,这边需要注意一下,异或的数,是num数组中不为0的数,所以k+=4,做到最后,其实也就是一个基础的题目,分析,提取,逆推代码。

 

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值