记录练习reserve(强网先锋AD&&mingyue)

1.强网

64位无壳,ida拖入。

复制qiangwangxianfengjiushini到v6缓冲区,拷贝ZmxhZ3ttYWZha3VhaWxhaXFpYW5kYW9ifQ==前36个字符(正好是36)到v5缓冲区,因为存在“==”符号,应该是base64,下文for循环遍历v4与v5的每个字符(即解码base64),对应相等则成功解出,此题没有任何加密手段。

利用在线网站或编译软件都可解码。

import base64

base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
plaintext = "ZmxhZ3ttYWZha3VhaWxhaXFpYW5kYW9ifQ=="
base64_strings = [i for i in plaintext]
#print(base64_strings)
base64_strings = base64.b64decode(plaintext)
#print(base64_strings)
flag = ""
for i in base64_strings:
    flag += chr(i)
print(flag)

2.mingyue

检查64位无壳。

ida64点击main函数。

分配了一个0x10的字节给到140004618,之后又将其空间地址给到620,此时620指向所分配的地址空间,之后给到618往后偏移8字节的空间设置为0。

ui64:unsigned integer 64位

推测140001080即是类printf或scanf类输入输出函数,格式化“lld”数字(long long int长整型十进制数据),进入1400010E0,跟进查看。

应该是某种加密操作,db字符串的第一处存储处是a4890572163,双击即可查看,如图为")(*&^%489$!057@#><:2163qwe",后面条件判断进入两个函数。

代码理解如下:(个人能力有限,真的好难QAQ)

函数给定参数a1,a2,a1转为64整型给到v3,下面较重要的是do while循环,v4 v2递增,v3整除26取整乘以-26(应该是以整除的取作偏移量),接着v3整除26重新赋值给v2。v2又给到v6,依次递减遍历每个字符给到v7,以v7异或7的值作为参数进入1400011E0,之后跟进1400001220。

内存分配,和main函数的部分差不多,主要是下方的利用此函数参数的v7^7作为result进入。

db字符串第二处存储的是在aV4pY59,之前在main中分配的内存空间620现在用来存储v5和v0作为if判断条件,之前的链表结构定义的每个节点位置进行遍历,判断字符是否对应等于aV4pY59字符表中的字符,判断长度到达14停止(每次判断两个节点),相等则结束循环,认证成功flag。(已晕(φ(◎ロ◎;)φ,真的不会啊QAQ)

编写脚本:(最后再解释下,原本最开始输入的lld长整型根据此得出,原文件是PE类,是要运行输入,得到正确显示框则成功)

str1 = ')(*&^%489$!057@#><:2163qwe'
str2 = '/..v4p$$!>Y59-'
def help(a):
    for i in range(0,26):        #判断对应相等
        if str1[i] == a:        
            return i
str = [0]*14        #预先定义空数组
flag = 0            #下面每次遍历取偏移26
for i in range(0,14):
    flag *= 26
    str[i] = help(chr(ord(str2[i])^7))    
    flag += str[i]
print(flag)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值