正则表达式:在逆向中的一些技巧-软件安全逆向社区论坛-技术社区-学技术网

正则表达式:在逆向中的一些技巧

缘由

我需要把里面的0x数字,全部替换为0x00,

如果是一个一个手动改,就太麻烦了,所以这个时候就可以用正则表达式

BYTE 新名称[] = { 0xD7,0xF7,0xD5,0xDF,0xA3,0xBA,0xB6,0xB6,0xD2,0xF4,0xBF,0xEC,0xCA,0xD6,0xD0,0xA1,0xBA,0xEC,0xCA,0xE9,0xCA,0xD3,0xC6,0xB5,0xBA,0xC5,0xA3,0xBA,0xC9,0xAB,0xD5,0xDF,0x41,0x49,0x0D,0x0A,0x65,0x63,0x68,0x6F,0x2E,0x0D,0x0A,0x65,0x63,0x68,0x6F,0x20,0xCD,0xF8,0xD5,0xBE,0xA3,0xBA,0x77,0x77,0x77,0x2E,0x73,0x65,0x7A,0x68,0x65,0x61,0x69,0x2E,0x63,0x6F,0x6D,0x0D,0x0A,0x65,0x63,0x68,0x6F,0x20,0xB1,0xB8,0xD7,0xA2,0xA3,0xBA,0x20,0xB8,0xFC,0xB6,0xE0,0xD7,0xD4,0xC3,0xBD,0xCC,0xE5,0x41,0x49,0xB9,0xA4,0xBE,0xDF,0xB0,0xFC,0xBF,0xC9,0xC7,0xB0,0xCD,0xF9,0xCE,0xD2,0xB5,0xC4,0xC6,0xB5,0xB5,0xC0,0xB2,0xE9,0xBF,0xB4,0x21,0x20,0xC1,0xBC,0xD0,0xC4,0xD5,0xFB,0xBA,0xCF,0xB7,0xD6,0xCF,0xED,0xA3,0xAC,0xBE,0xF8,0xCE,0xDE,0xCC,0xD7,0xC2,0xB7,0x21,0x0D,0x0A,0x65,0x63,0x68,0x6F,0x20,0xD3,0xCD,0xB9,0xDC,0xA3,0xBA,0x68,0x74,0x74,0x70,0x73,0x3A,0x2F,0x2F,0x77,0x77,0x77,0x2E,0x79,0x6F,0x75,0x74,0x75,0x62,0x65,0x2E,0x63,0x6F,0x6D,0x2F,0x40,0x73,0x65,0x7A,0x68,0x65,0x61,0x69,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };

实践

图片[1]-正则表达式:在逆向中的一些技巧-软件安全逆向社区论坛-技术社区-学技术网

图片[2]-正则表达式:在逆向中的一些技巧-软件安全逆向社区论坛-技术社区-学技术网

解析

0x[0-9A-Fa-f]+ 是一个正则表达式,用于匹配以 “0x” 开头的十六进制数。下面是对这个正则表达式的详细解释:

  1. 0x:这部分是十六进制数的常见前缀,用于指示接下来的数字是十六进制格式。在正则表达式中,它按照字面意思进行匹配,即查找包含 “0x” 的字符串。

  2. [0-9A-Fa-f]:这是一个字符集,用于匹配十六进制数字中的任何一个字符。其中:

    • 0-9:匹配任意一个十进制数字字符。
    • A-F:匹配大写形式的十六进制字母(A 到 F)。
    • a-f:匹配小写形式的十六进制字母(a 到 f)。
  3. +:这是一个量词,表示前面的字符集(即 [0-9A-Fa-f])可以在字符串中出现一次或多次。这意味着,在 “0x” 之后,必须至少有一个十六进制数字字符,也可以有多个。

综上所述,0x[0-9A-Fa-f]+ 这个正则表达式用于匹配形如 “0x1A3F”、”0xFF” 或 “0x12345678” 的十六进制数。它不匹配没有前缀 “0x” 的十六进制数,也不匹配在 “0x” 之后没有十六进制数字字符的字符串。

这个正则表达式在编程和数据验证中非常有用,特别是在处理与计算机内存地址、颜色代码或其他需要以十六进制格式表示的数据时。

拓展

正则表达式确实是一种非常强大的文本处理工具,它用于模式匹配和字符串处理,能够帮助用户高效地处理各种文本数据。以下是一些常用的正则表达式及其应用场景:

匹配单个字符或字符集

  1. .:匹配任意单个字符(除了换行符)。
  2. [...]:匹配方括号内的任意一个字符。例如,[abc] 匹配 ‘a’、’b’ 或 ‘c’。
  3. [^...]:匹配不在方括号内的任意一个字符。例如,[^abc] 匹配除了 ‘a’、’b’、’c’ 之外的任意字符。

匹配字符出现次数

  1. *:匹配前一个字符零次或多次。例如,ab*c 匹配 ‘ac’、’abc’、’abbc’ 等。
  2. +:匹配前一个字符一次或多次。例如,ab+c 匹配 ‘abc’、’abbc’、’abbbc’ 等,但不匹配 ‘ac’。
  3. ?:匹配前一个字符零次或一次。例如,ab?c 匹配 ‘ac’ 或 ‘abc’。
  4. {n}:匹配前一个字符恰好 n 次。例如,a{2}b 匹配 ‘aab’。
  5. {n,}:匹配前一个字符至少 n 次。例如,a{2,}b 匹配 ‘aab’、’aaab’ 等。
  6. {n,m}:匹配前一个字符至少 n 次,但不超过 m 次。例如,a{2,4}b 匹配 ‘aab’、’aaab’、’aaaab’,但不匹配 ‘ab’ 或 ‘aaaaab’。

匹配特定字符类型

  1. \d:匹配一个数字字符(0-9)。
  2. \D:匹配一个非数字字符。
  3. \w:匹配一个单词字符(字母、数字或下划线)。
  4. \W:匹配一个非单词字符。
  5. \s:匹配一个空白字符(空格、制表符、换行符等)。
  6. \S:匹配一个非空白字符。

匹配字符串位置

  1. ^:匹配字符串的开始。
  2. $:匹配字符串的结束。

常用的正则表达式示例

  1. 校验数字

    • 匹配正整数:^\d+$
    • 匹配负整数:^-\d+$
    • 匹配正浮点数:^\d*\.\d+$
    • 匹配负浮点数:^-\d*\.\d+$
    • 匹配非负整数(正整数和零):^\d+$
    • 匹配非正整数(负整数和零):^-\d+|0$
    • 匹配非负浮点数(正浮点数和零):^\d+(\.\d+)?$
    • 匹配非正浮点数(负浮点数和零):^(-\d+(\.\d+)?|0(\.0+)?)$
  2. 校验字符

    • 匹配电子邮件地址:^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
    • 匹配URL:^(https?|ftp)://[^\s/$.?#].[^\s]*$
    • 匹配国内手机号(中国):^1[3-9]\d{9}$
    • 匹配用户名(允许字母、数字、下划线,3到16位):^[a-zA-Z0-9_]{3,16}$
    • 匹配强密码(至少8个字符,至少一个数字和一个字母):^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$
  3. 其他常用

    • 匹配国内电话号码(座机):^\d{3,4}-\d{7,8}$
    • 匹配IP地址:\b(?:\d{1,3}\.){3}\d{1,3}\b
    • 匹配MAC地址:^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$
    • 匹配日期(YYYY-MM-DD):^\d{4}-\d{2}-\d{2}$
    • 匹配时间(HH:MM:SS):^\d{2}:\d{2}:\d{2}$
    • 匹配日期(MM/DD/YYYY或MM-DD-YYYY):^(0[1-9]|1[0-2])[\/\-](0[1-9]|[12][0-9]|3[01])[\/\-]\d{4}$
    • 匹配时间(24小时制,HH:MM):^([01]\d|2[0-3]):[0-5]\d$
    • 匹配邮政编码(国际):^\d{4,6}$
    • 匹配URL(不带协议):^[^\s/$.?#].[^\s]*$
    • 匹配RGB颜色代码:^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$
  4. 特殊情况

    • 匹配HTML标签:^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$
    • 匹配包含中文字符的字符串:[\u4e00-\u9fa5]
    • 匹配括号内的内容:$([^)]+)$
    • 匹配引号内的内容:"([^"]*)"'([^']*)'
    • 匹配Markdown链接:`

`

  • 匹配CSV文件中的一行:^(?:[^,]*,)*[^,]*$
  • 匹配美元金额(如123.45):`^\\d+(.\d{2})?$`

正则表达式非常灵活和强大,通过组合不同的元字符和量词,可以构建出各种复杂的匹配模式。不过,正则表达式的语法有时可能会显得复杂和难以阅读,因此在实际应用中,建议根据具体需求选择合适的正则表达式,并尽量保持其简洁和易读。

请登录后发表评论