首页
社区
课程
招聘
未解决 [求助]如何提取一个exe文件(包括console程序和GUI程序)中的可打印字符串(包括中文等)
2021-2-19 18:31 3432

未解决 [求助]如何提取一个exe文件(包括console程序和GUI程序)中的可打印字符串(包括中文等)

2021-2-19 18:31
3432

请问大佬们在做恶意样本分析时,输入一个exe文件,如何使用python提取二进制exe文件中的可打印字符串,尤其是界面程序上面的字符串


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
打赏
分享
最新回复 (3)
雪    币: 772
活跃值: (977)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ffashi 2021-2-19 19:41
2
0
你应该是新人,你可以先了解什么文件,文件的定义是什么。

不论什么文件都有自己的一套堆叠逻辑。说白了123456789。你要想取5,就定位5的位置和长度。很多游戏资源文件都是以堆叠的方式储存,但这些数据【包括zip,rar】他都不是随意堆叠整合,比喻说。每个数据的起始位置会放在文件头,和长度。
或者直接以:数据长度+数据+数据长度+数据........
长度4字节+首4字节整形为长度得到第二段数据开头,也就是第二段数据长度。

等等。不说了,喝多了。自己琢磨吧。
雪    币: 154
活跃值: (1619)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
q看雪q 2021-2-19 19:47
3
0
ffashi 你应该是新人,你可以先了解什么文件,文件的定义是什么。 不论什么文件都有自己的一套堆叠逻辑。说白了123456789。你要想取5,就定位5的位置和长度。很多游戏资源文件都是以堆叠的方式储存,但这 ...
嗯嗯  现在有个思路是  按照PE文件格式解析  可以得到对应的结构  关键是如何提取中文字符串呢?
雪    币: 365
活跃值: (1959)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
crackwiki 2021-2-19 23:25
4
1
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re
import sys


def strings(file):
    chars = r"A-Za-z0-9/\-:.,_$%'()[\]<> \u4e00-\u9fa5"
    shortestReturnChar = 4
    regExp = '[%s]{%d,}' % (chars, shortestReturnChar)
    pattern = re.compile(regExp)
    with open(file, 'rb') as f:
        return pattern.findall(f.read().decode(errors='ignore'))


if __name__ == "__main__":
    len = len(sys.argv)
    if len <= 1:
        exit(0)
    lines = strings(sys.argv[1])
    for line in lines:
        print(line)

这段代码可以提取中英文字符串,例如:

  1 #include <stdio.h>
  2
  3 int main()
  4 {
  5   printf("你好中国\n");
  6   return 0;
  7 }
$ gcc -o test test.c
$ python strings.py test | head -n 20

/lib64/ld-linux-x86-64.so.2
libc.so.6
puts
__cxa_finalize
__libc_start_main
GLIBC_2.2.5
_ITM_deregisterTMCloneTable
__gmon_start__
_ITM_registerTMCloneTable
HHPTL
H5B/
H)HH
AVIAUIATAUH-,,
SL)H
LLDA
H9uH
A_ff.
你好中国
GCC:
(Ubuntu

注:我测试使用的是linux系统。如果你需要提取windows程式的中文字符串,请修改decode中的encoding="gb2312"

最后于 2021-2-19 23:44 被crackwiki编辑 ,原因:
游客
登录 | 注册 方可回帖
返回