findit 1

Posted TFOREVERY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了findit 1相关的知识,希望对你有一定的参考价值。

查壳

进64IDA,找主函数 --> 会发现没有主函数,字符串查找也看不懂

看着有点意思,跟进去看:

全是一些定义啥的,但是在注释那里我们能看到一种标志 --> JAVA语言的String(不确定是不是由他而来的,再看看),空格切换“视图”


好家伙,this (JAVA妥了)--> 进jadx(需要点java的基础哦):有两个定义好的数组(字符串)

x = “ThisIsTheFlagHome”,y = “pvkqm164675262033l4m49lnp7p9mnk28k75”(很像flag了,但是一看就知道是加密过后的,需要解密,不信的话可以交这个上去看看能不能过)

有个进example看程序:

这里我们只看这段方法:

我们能看到,y是凯撒密码(就是通过偏移而得来,这个密码的特点就是除了26个字母(大小写都包括)需要改变,其他保持不变即可)来的,那么我们需要逆推回去就是正确的flag了,x的方法可以不用看了,因为不涉及它。

逆推“m164675262033l4m49lnp7p9mnk28k75”,得到结果即可。写脚本吧大伙:

int32_t main() 
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    string Des = "m164675262033l4m49lnp7p9mnk28k75";
    string flag = "";
    for (int i = 0; i < Des.size(); i++) 
        if((Des[i] >= \'a\' && Des[i] <= \'z\') ||(Des[i] >= \'A\' && Des[i] <= \'Z\'))
            //写凯撒的加密方法
            for (int j = \'a\'; j <= \'z\'; j++) 
                if(j == Des[i])
                    if((j + 16) > \'Z\' && (j + 16) < \'a\' || (j + 16) > \'z\')
                        flag += char(j - 10);
                    else
                        flag += char(j + 16);
                    
                    break;
                
            
            for (int j = \'A\'; j <= \'Z\'; j++) 
                if(j == Des[i])
                    flag += char(j + 16);
                    break;
                
            
        else
            flag += Des[i];
        
    
    cout << "flag" << flag << "" << endl;
    return 0;

得到flagc164675262033b4c49bdf7f9cda28a75收工。

Python3正则匹配re.split,re.finditer及re.findall函数用法详解

这篇文章主要介绍了Python3正则匹配re.split,re.finditer及re.findall函数用法,结合实例形式详细分析了正则匹配re.split,re.finditer及re.findall函数的概念、参数、用法及操作注意事项,需要的朋友可以参考下

 

本文实例讲述了Python3正则匹配re.split,re.finditer及re.findall函数用法。分享给大家供大家参考,具体如下:

re.split re.finditer re.findall

@(python3)

官方 re 模块说明文档

re.compile() 函数

编译正则表达式模式,返回一个对象。可以把常用的正则表达式编译成正则表达式对象,方便后续调用及提高效率。

re 模块最离不开的就是 re.compile 函数。其他函数都依赖于 compile 创建的 正则表达式对象

re.compile(pattern, flags=0)

  • pattern 指定编译时的表达式字符串
  • flags 编译标志位,用来修改正则表达式的匹配方式。支持 re.L|re.M 同时匹配

flags 标志位参数

re.I(re.IGNORECASE)
使匹配对大小写不敏感

re.L(re.LOCAL)
做本地化识别(locale-aware)匹配

re.M(re.MULTILINE)
多行匹配,影响 ^ 和 $

re.S(re.DOTALL)
使 . 匹配包括换行在内的所有字符

re.U(re.UNICODE)
根据Unicode字符集解析字符。这个标志影响 w, W, , B.

re.X(re.VERBOSE)
该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

示例:

1
2
3
4
5
6
7
import re
content = ‘Citizen wang , always fall in love with neighbour,WANG‘
rr = re.compile(r‘wanw‘, re.I) # 不区分大小写
print(type(rr))
a = rr.findall(content)
print(type(a))
print(a)

findall 返回的是一个 list 对象

<class ‘_sre.SRE_Pattern‘>
<class ‘list‘>
[‘wang‘, ‘WANG‘]

re.split 函数

按照指定的 pattern 格式,分割 string 字符串,返回一个分割后的列表。

re.split(pattern, string, maxsplit=0, flags=0)

  • pattern compile 生成的正则表达式对象,或者自定义也可
  • string 要匹配的字符串
  • maxsplit 指定最大分割次数,不指定将全部分割
1
2
3
4
5
6
7
8
9
import re
str = ‘say hello world! hello python‘
str_nm = ‘one1two2three3four4‘
pattern = re.compile(r‘(?P<space>s)‘) # 创建一个匹配空格的正则表达式对象
pattern_nm = re.compile(r‘(?P<space>d+)‘) # 创建一个匹配空格的正则表达式对象
match = re.split(pattern, str)
match_nm = re.split(pattern_nm, str_nm, maxsplit=1)
print(match)
print(match_nm)

结果:

[‘say‘, ‘ ‘, ‘hello‘, ‘ ‘, ‘world!‘, ‘ ‘, ‘hello‘, ‘ ‘, ‘python‘]
[‘one‘, ‘1‘, ‘two2three3four4‘]

re.findall() 方法

返回一个包含所有匹配到的字符串的列表。

  • pattern 匹配模式,由 re.compile 获得
  • string 需要匹配的字符串
1
2
3
4
5
import re
str = ‘say hello world! hello python‘
pattern = re.compile(r‘(?P<first>hw)(?P<symbol>l+)(?P<last>os)‘) # 分组,0 组是整个 world!, 1组 or,2组 ld!
match = re.findall(pattern, str)
print(match)

结果

[(‘he‘, ‘ll‘, ‘o ‘), (‘he‘, ‘ll‘, ‘o ‘)]

re.finditer 、re.findall

re.finditer(pattern, string[, flags=0])
re.findall(pattern, string[, flags=0])

  • pattern compile 生成的正则表达式对象,或者自定义也可
  • string 要匹配的字符串

findall 返回一个包含所有匹配到的字符的列表,列表类以元组的形式存在。

finditer 返回一个可迭代对象。

示例一:

1
2
3
4
5
6
7
8
9
10
11
pattern = re.compile(r[email protected]w+.com‘) #通过 re.compile 获得一个正则表达式对象
result_finditer = re.finditer(pattern, content)
print(type(result_finditer))
print(result_finditer) # finditer 得到的结果是个可迭代对象
for i in result_finditer: # i 本身也是可迭代对象,所以下面要使用 i.group()
 print(i.group())
result_findall = re.findall(pattern, content)
print(type(result_findall)) # findall 得到的是一个列表
print(result_findall)
for p in result_finditer:
 print(p)

输出结果:

<class ‘callable_iterator‘>
<callable_iterator object at 0x10545ec88>
[email protected]
[email protected]
[email protected]
<class ‘list‘>
[‘[email protected]‘, ‘[email protected]‘, ‘[email protected]‘]

由结果可知:finditer 得到的是可迭代对象,finfdall 得到的是一个列表。

示例二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import re
content = ‘‘‘email:[email protected]
‘‘‘
pattern = re.compile(r‘(?P<number>d+)@(?P<mail_type>w+).com‘)
result_finditer = re.finditer(pattern, content)
print(type(result_finditer))
print(result_finditer)
iter_dict = {} # 把最后得到的结果
for i in result_finditer:
 print(‘邮箱号码是:‘, i.group(1),‘邮箱类型是:‘,i.group(2))
 number = i.group(1)
 mail_type = i.group(2)
 iter_dict.setdefault(number, mail_type) # 使用 dict.setdefault 创建了一个字典
print(iter_dict)
print(‘+++++++++++++++++++++++++++++++‘)
result_findall = re.findall(pattern, content)
print(result_findall)
print(type(result_findall))

输出结果:

<class ‘callable_iterator‘>
<callable_iterator object at 0x104c5cbe0>
邮箱号码是: 123456 邮箱类型是: 163
邮箱号码是: 234567 邮箱类型是: 163
邮箱号码是: 345678 邮箱类型是: 163
{‘123456‘: ‘163‘, ‘234567‘: ‘163‘, ‘345678‘: ‘163‘}
+++++++++++++++++++++++++++++++
[(‘123456‘, ‘163‘), (‘234567‘, ‘163‘), (‘345678‘, ‘163‘)]
<class ‘list‘>

finditer 得到的可迭代对象 i,也可以使用 lastindex,lastgroup 方法。

print(‘lastgroup 最后一个被捕获的分组的名字‘,i.lastgroup)

findall 当正则没有分组,返回就是正则匹配。

1
2
re.findall(r"[email protected]w+.com", content)

有一个分组返回的是分组的匹配

1
2
re.findall(r"(d+)@w+.com", content)
[‘2345678‘, ‘2345678‘, ‘345678‘]

多个分组时,将结果作为 元组,一并存入到 列表中。

1
2
re.findall(r"(d+)@(w+).com", content)
[(‘2345678‘, ‘163‘), (‘2345678‘, ‘163‘), (‘345678‘, ‘163‘)]

PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:

JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript

正则表达式在线生成工具:
http://tools.jb51.net/regex/create_reg

 

原文链接:https://blog.csdn.net/cityzenoldwang/article/details/78398406



























以上是关于findit 1的主要内容,如果未能解决你的问题,请参考以下文章

findit WriteUp

python re的findall和finditer

Python3正则匹配re.split,re.finditer及re.findall函数用法详解

如何使 re.finditer 只返回每行一次

python 基础 8.4 re的 spilt() findall() finditer() 方法

python 在python中使用re模块的finditer foo