西湖论剑逆向

其实可以石锤我是标题党了  哈哈哈 

其实这个我也很尴尬 ·~   没有题目 没办法好好的去做一下题  但是听说安恒会有复现   复现的时候能够好好做也是极好的

然后 先说一下这个题  题目 其实是在 https://www.52pojie.cn/thread-924174-1-1.html 这个链接下载的

多谢师傅的分享 

其实 

testre 

这个题 很简单的一个题   就是 怎么说呢      来自于我的一个好习惯吧  我 看题目 总是喜欢 先看 最后面 然后往上推导 然后  某个同学就是比较慢了 很长的时间 估计就是因为这吧 哈哈

主函数 没有什么好说的  内容就那么多

然后 去点击  那个验证函数

一开始我感觉也是硬骨头 然后我在分析的时候

感觉像 base64  但是 却不是 base64

看这个算法的时候 我想了好多  (听大佬说 这个是base58  用在线解密可以直接解出来)

emmmm  不对 256 不就是对应asicc 嘛    看了看  index 刚清0  也就是说上面那一堆指令都没有影响我们的 index  数组  

然后 这个大概内容就是 256进制 转化成58进制。。。。。

然后我再编写脚本的时候本来想用 C语言的 但是 。。。。 感觉C语言好麻烦啊   因为python的 数字是没有长度限制的 

而且 提供了 长整数 转化成char  (虽然这个不是重点  C语言强转也可以)

脚本如下     

#!/usr/bin/env python
# encoding: utf-8
from Crypto.Util.number import long_to_bytes


cmp='D9cS9N9iHjMLTdA8YSMRMp'
map='123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
flag=0
for i in range(len(cmp)):
  flag=flag*58+map.index(cmp[i])
out=long_to_bytes(flag)
print(str(out))

easyCpp

这样的题 不知道为什么 突然 好多 。。。。搞得我头皮发麻  不过 仔细看看还是比较简单的

对于打过acm的我来说 这个一看就知道是斐波那契

注意那几个main 函数

这里是 把我们输入的第一项 和后面的值 相加

前后颠倒 

然后  

逆向的话 就是 

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
     int l[16];
     l[0]=l[1]=1;
    for(int i=2;i<16;i++)
    {
         l[i]=l[i-1]+l[i-2];
         //printf("%d ",l[i]);
    }
    printf("flag{");
    printf("%d",l[15]);
    for(int i=14;i>0;i--)
    {
        printf("%d",l[i]-l[15]);
    }
    printf("}\n");
    return 0;
}

由于本人 没有参加比赛 也不知道 flag 对不对 如果哪里有错 还希望能够指出 谢谢

 

Junk_Instruction

这道题 我分析了  一下午  。。。。。。。  分析完 得到flag 看大佬们的博客 去花指令 什么的 厉害的一批。。。。

我怎么这么菜啊

看着图标就知道是mfc 程序   然后 断按钮   一气呵成。。。。

然后就自闭了。。

靠着我 坚韧不拔(傻乎乎)的韧劲(莽劲)   分析出了

是不是看的 头晕眼花  其实我也一样  

但是 但最后面 我发现一个东西 

这里循环异或了  让我感到很惊讶

这又是一处循环比较  就是我们异或的结果 和这里比较的 那么可以写出脚本

注意的细节就是  这里的比较是反着来的 所以我们 for 循环也要反着  

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
int ss[100]={0x5B, 0xD6, 0xD0, 0x26, 0xC8, 0xDD, 0x19,
  0x7E, 0x6E, 0x3E, 0xCB, 0x16, 0x91, 0x7D, 0xFF, 0xAF, 0xDD,
  0x76, 0x64, 0xB0, 0xF7, 0xE5, 0x89, 0x57, 0x82, 0x9F, 0x0C,
  0x00, 0x9E, 0xD0, 0x45, 0xFA};
int s[100]={0x3d,0xe4,0xe5,0x16,0xad,0xee,
0x7d,0x49,0x5b,0x6,0xf9,0x26,0xa9,0x49,0xc8,
0xcb,0xe9,0x44,0x53,0xd6,0xc4,0x84,0xef,0x66,0xb3,
0xfe,0x3b,0x38,0xad,0xe3,0x72,0xc3};
int main()
{
     /*因为比较的时候是 反着比较的 我们异或的时候也反着*/
    for(int i=31;i>=0;i--)
        printf("%c",s[i]^ss[i]);
    return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值