取证小白,练习一下,做个记录。这套题内容太多了。
为了方便大家练习。
附上下载连接:
总决赛检材下载地址:
下载地址:https://pan.baidu.com/s/16QnGZZsDJEVGM6zx3yph2w
加密容器密码:2ej)!,[JN-U;wm19J=d9sZt_L6#bf+}[
- 计算流量包文件的SHA256值是?[答案:字母小写][★☆☆☆☆]
- 流量包长度在“640-1279”之间的的数据包总共有多少?[答案:100][★☆☆☆☆]
统计->分组长度
- 黑客使用的计算机操作系统是?[答案:windows7 x32][★★☆☆☆]
流量走的https,需要解密,所以通过:编辑->首选项->Protocols->TLS->
导入密钥进行TLS包解密。解密后就可以看见HTTP包了。
随便找一个HTTP包查看user-agent。
- 黑客上传文件到哪个网盘?[答案:xx网盘][★★☆☆☆]
查看请求序列,可以发现只有访问过百度
- 黑客上传网盘的中间件是?[答案:xxxx]
可以查看与pan.baidu.com(Host为pan.baidu.com)交互的流量包,可以看见返回包中,显示server:nginx
- 黑客首次登陆网盘时间是?[答案:2000-01-01 01:00:33][★★☆☆☆]
黑客使用网盘,肯定第一时间登录,所以查看第一次和百度网盘交互的记录,即访问pan.baidu.com的记录。通过:文件->导出对象->HTTP 可以查看所有HTTP分组,同时按照分组先后,即流量包发送先后,最先访问的分组为699。追踪该分组HTTP流
- 黑客上传到网盘的txt文件的md5值是?[答案:字母小写][★★★☆☆]
使用http contains(意为包含) ".txt"过滤出包含txt的流量包。
发现有四个,上传应该为POST包,再查看POST包内内容,发现只有一个包内为上传文件
在上传完成后,返回包中给出了MD5值。
- 黑客上传到网盘的txt文件第8行的内容是?[答案:XXX][★★★☆☆☆]
传输文件过程中,webkit头与文件内容会空一行,所有从空一行后开始数,答案为$$
- 被入侵主机的计算机名是?[答案:XXXXXXXXXXX][★★★☆☆]
查看该IP的流量包
发现该IP有ftp登录的尝试,故该主机为被黑主机
该主机有NBNS(动态DNS)包,可以获取到其主机名
- 被入侵电脑的数据回传端口是?[答案:11][★★★☆☆]
在流量中,可以看到大量传入setup.exe的流量包,该软件应为木马程序,在木马传输完毕后,139主机主动连接黑客电脑8000端口,该端口应为回传端口
- 流量包中ftp服务器的用户密码是?[答案:abcd][★★☆☆☆]
使用www登录,密码为ftp,返回为Logged on即登录成功
- 流量包中ftp服务器中的木马文件的md5值是?[答案:字母小写][★★☆☆☆]
通过传输流量包,追踪tcp流,然后转化为原始数据另存为一个exe文件,再计算hash值。
- 木马文件伪造的软件版本是?[答案:0.0.0.0][★★☆☆☆]
打开木马文件的属性->详细信息
- 黑客上传到网盘的压缩包解压密码是?[答案:XXXXXXXXXXX][★★★★★]
通过关键词定位,发现有三个文件,全部导出。
pass.jpg怀疑做了隐写,拼接查看不是,提供了字典(字典已经跑过rar包,解不开)怀疑是steghide。通过stegseek跑答案。
发现莫斯密码,直接进行解码
- 黑客上传到网盘的压缩包内文件的内容是?[答案:xxxxxxx]
- 分析技术人员电脑内的手机流量包,给出技术人员的虚拟身份账号是?[答案格式:13039456655][★★☆☆☆]
手机流量包,可以考虑wireshark或者fiddler进行抓包,所有查看电脑内容,发现有一fiddler抓包导出后的流量包(后缀为:saz)
通过fiddler将其打开,进行分析。
发现其有登录记录,将其登录的POST包内容复制出来进行解析
得到其电话,即其虚拟身份账号。
-
分析技术人员电脑内的手机流量包,给出技术人员的虚拟身份密码是?[答案格式:b3039456655][★★☆☆☆]
如上题。
-
分析技术人员电脑内的手机流量包,分析技术人员的看过几段短视频?[答案格式:3][★★☆☆☆]
筛选一下content-type可以发现,有6个mp4流量包
-
分析技术人员电脑内的手机流量包,分析技术人员最后打开的软件的程序名称是?[答案格式:微信][★★☆☆☆]
通过查看流量包,可以发现腾讯bugly服务的包(好像雷电模拟器接入了的)所以查看最后一个bugly包
可以获取到包名,然后这台电脑装了雷电模拟器的,又在刚才流量包旁边发现了雷电模拟器的备份文件,尝试用雷电多开器进行导入后打开,发现里面有多个软件,直接上文件管理器中查看/data/app中的相关包名,打开可以看见apk包
根据图标可知(这里是偷懒,直接看图标,如果图标有重复的,要导出APK包进行解析名称),
最后运行APP为狂神无双
-
分析技术人员电脑内的手机流量包,分析安全防护的服务器地址是?[答案格式:127.0.0.1][★★☆☆☆]
直接导出安全防护APK,丢进去解析,发现包内明文存储了URL,然后进流量包中查找,还居然找到了。直接秒杀,包都不用抓了。
-
分析卡农手机,给出手机的SDK版本?[答案格式:28][★☆☆☆☆]
直接解压手机镜像包,奇安信又出这种自己软件可以解除更多数据的题目。不惯着它。查看deviceinfo.json这个文件是盘古石手机取证自己生成的,所有其他厂商解析不了。
-
分析卡农手机,给出手机最近开机的时间?[答案格式:2023-05-18-19:09:59][★★☆☆☆]
又是时间问题,每个厂商的时间都有自己的标准,这个建议用对应厂商的跑。
如果想通过手工的话,就得在/data/system/dropbox中寻找system_boot文件,文件名中@之后为时间戳,解析出来就是开关机时间(奇安信是这么做的)。
-
分析卡农手机,给出高德地图关联的手机号是?[答案格式:13011221234][★★☆☆☆]
直接软件看
-
分析卡农手机,给出卡农内部聊天工具的昵称是?[答案格式:李多余][★★☆☆☆]
在应用列表搜索chat,发现有三个聊天软件,首先排除蝙蝠,毕竟是内部。然后第二个已经被删除,只剩第一个。先看看数据,进入文件找数据库文件,发现是加密的。为了节省时间(也是偷懒)直接在虚拟机中仿一个。先把安装包到处来
然后导出data目录文件
然后整体拷入data/data目录(先安装软件,然后替换)
然后直接打开,就可以看啦(软件应该没有绑定硬件设备)
然后查看我的
-
分析卡农手机,给出卡农的真实名字可能是?[答案格式:李多余][★★☆☆☆]
支付宝有实名信息
-
黑客计算机系统安装时间是?[答案格式:2000/01/0101:00:01][★☆☆☆☆☆]
-
黑客计算机磁盘0的总磁道数?[答案格式:数字中无标点][★★☆☆☆☆]
-
黑客计算机的产品密钥是?[答案格式:字母大写][★★☆☆☆]
-
黑客计算机共有几次卷影拷贝服务关闭事件?[答案格式:1][★★☆☆☆]
查询了一下,卷影拷贝服务是在日志中来源为VSS,那么直接在日志中搜索即可。不过神奇的是,火眼解析出来只有一个,但仿真出来查看是有两个的。
-
黑客计算机的vc容器解密密码是?[答案格式:字母小写][★★★★★]
仿真后在文件夹中翻找,发现VC密码,打开一看,嚯,RSA解密,梦回CTF。算了,黑客打CTF很正常嘛。
导出公钥文件,解析出n为18762288330807505336471569952368628968038915032364773203018829070696227411217877868952724842039756288121734420378039301563905037169196320417706839549744629044465352679919380329435329653365900312498712121432190200717072138327379844913608851715404086200984072727408758802012147296753317519612628629535373054730645471938738605688629618951071483635716677866010394704066696480858977560809007683074249820225609075518509112704549293147063971302640066331096645041521401155565628466857211261242132897152403975836705170916276159246187173035660820037820087171748591660487636434105623595720788169970861783452500198572918584010881
e为65537
通过yafu因数分解,
获取到了p和q,就可以计算得到d了
编写脚本
输出了明文的十进制数,转化为字符串查看。
-
黑客计算机加密容器中共有几个docx文件?[答案格式:x][★★☆☆☆]
花活还挺多,打破常规的加密文件,直接加密分区。通过VC加载E盘分区
-
黑客计算机加密容器中记录的bt币地址有几个?[答案格式:x][★★★☆☆]
不亏是黑客呀,无时无刻不在藏东西。
利用取证大师对磁盘文件进行恢复。火眼好像不能直接vc解密磁盘。
发现有三个更bt币相关文件,点开看都没有。我去?这也能藏。xlsx文件是以压缩包的形式存储的,所有用zip软件打开看看,结果在tmp文件中发现
挺会藏呀。打开发现有4个
-
黑客计算机加密容器中记录的受害人共有多少人?[答案格式:xx][★★☆☆☆]
受害人就简单了,打开excel,直接29个
-
黑客计算机中win7虚拟机中www用户的登陆密码是?[答案格式:xxxxxxx][★★☆☆☆]
在电脑中找到了win7.7z的压缩包文件,导出来,发现有密码,找了半天没有找到,想起来流量包有个字典,拿来爆破。
然后把镜像导入火眼跑一下
-
黑客计算机中win7虚拟机中chrome浏览“bjh.com”网站保存的密码是?[答案格式:xx][★★★☆☆]
-
分析技术人员电脑,请给出电脑系统安装时间(UTC-0)?[答案格式:20000-01-0100:00:00][★★☆☆☆]
这还要挖个坑,-8小时
-
分析技术人员电脑,请给出电脑内用户John的SID?[答案格式:x-x-x-x-x-x-x-x][★★★☆☆]
-
据技术人员交代,其电脑连接过nas服务器,请给出该nas服务器的iqn名称?[答案格式:iqn.xxx][★★★☆☆]
百度了一下,Windows连接iqn需要使用ISCSI,所以在仿真中打开
发现有两个,再查看widows日志,过滤iScsiPrt
最新的登录连接日志,查看详细信息,
另外一个名称,都是错误日志,即未登录上过。所以还是这个windows这个名称。
-
分析技术人员电脑,请给出该技术人员使用的隐写工具名称?[答案格式:xx][★★☆☆☆]
-
接上题,请给出使用该隐写工具隐写文件所使用的密码?[答案格式:xx][★★★☆☆]
在使用隐写软件附近是有文件访问的,一个是新建文本文档、一个是财务流水.mp4
可以在电脑中搜索到一个新建文本文档,内容为密码
-
据技术人员交代,其电脑内存过一个名为“财务流水.rar”的文件,请给出该文件的SHA-1?[答案格式:字母小写][★★★★☆]
-
分析技术人员的模拟手机,给出安全防护的验证码是?[答案格式:11226655][★★★★★]
验证码错误,返回验证码失败,在jadx中搜索,发现参数名verycodefail,搜索该参数的使用。
发现函数,还有判断函数。
发现返回值函数,利用frida进行hook。
返回值为110110110,这便是验证码
-
分析技术人员的模拟手机,给出安全防护的推送服务的调证值是?[答案格式:11226655][★★★★★]
推送服务,关键词push
发现推送的appkey,查看调用
继续查看调用
发现此处传入了appkey,转到定义
获取到了APPKEY
-
分析技术人员的模拟手机,给出老板的联系方式是?[答案格式:11226655][★★☆☆☆]
-
分析技术人员的模拟手机,给出办公场所是?[答案格式:北京市朝阳区中山路25555号][★★★☆☆]
-
分析技术人员的模拟手机,给出技术人员聊天工具的用户ID是?[答案格式:QN11AATT][★★★☆☆]
-
分析黑客电脑,控制端程序传输协议是什么协议?[答案格式:http][★★☆☆☆]
打开一看,经典python逆向,不亏是奇安信,取证也能塞一堆CTF呀。
利用pyinstxtractor反编译
进入反编译好的文件
改为pyc后缀
利用winhex修复该文件头
可以利用struct文件进行修复,修复后,利用decompyle3进行解析,获取py源文件。(最新的好像不需要手动修改文件头),如何使用uncompyle6进行解析字节码。很神奇,3.8.0之后的版本不支持解析,然后用decompyle3会解析不完全。最后还是下载3.8.0版本的uncompyle6才解析出来。
# uncompyle6 version 3.8.0 # Python bytecode 3.8.0 (3413) # Decompiled from: Python 3.8.10 (tags/v3.8.10:3d8993a, May 3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)] # Embedded file name: server.py import socket, json def decrypt_config(): data_str = '' with open('config.txt', 'rb') as (f): byte = f.read(1) byte_to_int = int.from_bytes(byte, byteorder='big') data = byte_to_int ^ 41 dataB = data.to_bytes(1, byteorder='big') data_str += dataB.decode() while byte: byte = f.read(1) if byte: byte_to_int = int.from_bytes(byte, byteorder='big') data = byte_to_int ^ 41 dataB = data.to_bytes(1, byteorder='big') data_str += dataB.decode() data_dict = json.loads(data_str) return (data_dict['address'], data_dict['port']) def input_data() -> bytes: data = input('请输入指令:') data = Crypt_data(data) return data.encode() def Crypt_data(data) -> str: if isinstance(data, str): data = data.encode('utf-8') temp = b'' for i in data: data_int = i ^ int.from_bytes(b'p', byteorder='big') data_bytes = data_int.to_bytes(1, byteorder='big') temp += data_bytes else: try: temp = temp.decode() except: temp = temp else: return temp def deal(data: bytes): with open('接收数据.txt', 'wb+') as (f): f.write(data) class connect: def __init__(self): self.address = decrypt_config() def tcpServer(self): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as (s): s.bind(self.address) s.listen(10) while True: conn, addr = s.accept() conn.setblocking(0) while True: try: data = conn.recv(1000000) data = Crypt_data(data) except BlockingIOError as e: try: data = b'' finally: e = None del e else: print(data) if not data == '2a': if data == 'ok': send_data = input_data() conn.send(send_data) else: if data == 'er': print('!!!!!!操作失败请重新操作!!!!!!') send_data = input_data() conn.send(send_data) if data == 'end': continue elif data == b'': continue else: deal(data) if __name__ == '__main__': con = connect() con.tcpServer()
走的tcp协议。
-
分析黑客电脑,控制端程序接收数据缓冲区大小是多少?[答案格式:100][★★☆☆☆]
接受数据量由recv方法定义。
-
分析黑客电脑,控制端程序接收并判断几种指令?[答案格式:1][★★★☆☆]
查看代码,判断指令即if判断。
-
分析黑客电脑,控制端程序连接结束指令是什么?[答案格式:xxx][★★★☆☆]
查看这个堆判断语句,就很离谱,反编译的啥。还是直接查看汇编代码。
这里判断为true后,直接跳转到40,而不是循环开始的62,所以这个JUMP_ABSOLUTE应该翻译为break而不是continue。其他的判断顺序也应该调整,修复如下。(不过仅个人观点,还请大佬指正)
-
分析黑客电脑,控制端程序配置文件解密函数是什么?[答案格式:x_x][★★★☆☆]
没啥解释的,函数名称足够明显
-
分析黑客的木马程序,该程序控制端ip是?[答案格式:127.0.0.1][★★★☆☆]
控制端在其电脑上,所以ip就是他电脑的,同时流量包也可以证明,IP就是他自己电脑。
-
分析黑客的木马程序,程序在地址0x00410CA4处调用了Sleep函数,请问该函数会暂停几秒?[答案格式:3][★★★☆☆]
这道题很友好,直接给偏移量,直接跳转,然后反编译。得出16进制,用计算器转化一下,是5000ms
这道题重点是
吧
-
分析黑客的木马程序,该程序“png”型资源下有两张图片,程序图标对应图片的MD5值是?[答案格式:字母小写][★★★☆☆]
用工具提取程序内资源
导出文件,计算hash
-
分析黑客的木马程序,哪个函数直接调用了HOST型资源?[答案格式:sub_1234][★★★☆☆]
通过IDA进行搜索,发现有两个HOST的调用
进入源码分析,发现一个是load一个是update,直接调用应该是load。
-
分析黑客的木马程序,该程序会绕过哪个杀毒软件?[答案格式:腾讯][★★★★★]
闲来没事看字符串,里面总有好东西。
里面有个杀进程的
而且是执行了的。那么KSafeTray是什么呢?k安全,k好像只有金山了吧
-
分析扫地机器人数据,robot1.bin采用的压缩算法是?[答案格式:xxxx][★★☆☆☆☆]
不得不说,binwalk是个伟大的软件。
LZMA算法
-
扫地机器人使用的软件版本是?[答案格式:0.0.0][★★☆☆☆☆]
用binwalk导出都看不了,没办法,用原始方法,搜搜关键词,直接winhex搜version
-
扫地机器人id是?[答案格式:21243245838790][★★☆☆☆]
-
扫地机器人云证书的前6位是?[答案格式:sdfead][★★☆☆☆]
-
扫地机器人连接过的wifi的ssid是(channl1)?[答案格式:xx_xx_xx][★★☆☆☆]
感觉这一块都是配置文件呀,直接导出来用编辑看。
-
扫地机器人连接过的wifi的密码是(channl1)?[答案格式:xxxx][★★☆☆☆]
-
扫地机器人的时区是?[答案格式:xx/xx][★★☆☆☆]
-
扫地机器人的名称是?[答案格式:xxxxx][★★☆☆☆]
-
无人机飞行纬度前两位是?[答案格式:xx][★★☆☆☆]
-
无人机的快门速度是?[答案格式:x/xxx][★★☆☆☆]
-
分析智能门锁数据包,请给出用户“wonderful”首次开门时间?[答案格式:2000-01-0100:00-00:00][★★☆☆☆]
-
分析智能门锁数据包,请给出智能门锁MAC地址?[答案格式:字母大写][★★☆☆☆]
-
请分析服务器,给出NAS服务器系统账号密码?[答案格式:xx@xx][★★★☆☆☆]
-
请分析服务器,给出NAS服务器的版本信息?[答案格式:xx-xx-xx][★★☆☆☆☆]
-
请分析服务器,给出NAS服务器内用户SMB的邮箱?[答案格式:xx@xx][★★☆☆☆☆]
-
请分析服务器,给出NAS服务器系统告警服务使用的邮箱?[答案格式:xx@xx][★★☆☆☆☆]
-
请分析服务器,给出NAS服务器内存储池名?[答案格式:xxx][★★☆☆☆]
-
请分析服务器,给出NAS服务器内有几个数据集和几个Zvol?[答案格式:0,0][★★★☆☆]
-
请分析服务器,给出该NAS服务器存储监听IP和端口?[答案格式:192.168.1.1:8080][★★★☆☆]
访问nas的方法,这个是在iSCSI中的
-
请分析服务器,给出NAS服务器内iSCSI目标为web的连接所使用的启动器组ID?[答案格式:xx][★★★☆☆]
-
请分析服务器,给出web服务器连接NAS服务器所使用的iqn?[答案格式:iqn.xxx][★★★☆☆]
全局配置了基本名称,然后连接web服务器
名称加上目标,以冒号相隔就是了,iqn.2005-10.org.freenas.ctl:web
-
请分析服务器,给出web服务器连接NAS服务器所使用的账号和密码?[答案格式:root/123][★★★★★]
认证采用1号,
所以账号密码就是user/202305140921
-
请分析服务器,给出redis所使用的配置文件?[答案格式:/home/1.conf][★★☆☆☆]
在nas中找了半天,也没发现redis服务啊。然后看了一下,发现还有虚拟机,估计在虚拟机中,虚拟机有4个,大概率在web里面,毕竟前面一直都做的web。打开看看,发现打开要开虚拟化,又重启开启虚拟化。
进vnc一看,我密码呢?算了,重置吧,进单用户进行重置。重置完了,发现怎么登录都进不去,登录正确然后又弹登录窗。找了半天,结果root用户被禁用登录了。又进单用户模式,修改/etc/passwd文件
把root后面改为/bin/bash就可以登录了。
同时,还可以发现redis服务的运行目录在/var/lib/redis,这个虚拟机中确实有redis。
用find找一下就可以了。
-
请分析服务器,给出跑分网站后台根目录?[答案格式:/xx/xx][★★★☆☆]
看看有没有bt,没有,再看看中间件是啥,试了试nginx -t,发现有。
进配置文件里面看看
有两个,一个是前台、一个是后台。
跑分后台是admin开头那个,打开看看。
-
请分析服务器,嫌疑人所使用的跑分系统可能来自哪,请给出网站?[答案格式:www.baidu.com][★★★☆☆]
进源代码看看信息,发现进不去,看看磁盘挂载。
发现sda1没有挂载,直接一个mount进行挂载。然后进入源代码找,根目录看完了都没有,再去文件里面看看配置文件,发现有一个作者信息。
-
请分析服务器,给出数据库root账号密码?[答案格式:password][★★★★★]
查看database.php文件
这里也有上一题答案,但是不是root密码。要找root密码,还得进数据库服务器。老规矩,开启db,用单用户模式重置密码,进入数据库。结果进去看了看,发现不是docker,my.cnf里面也没有。只能再乱找找,在/root目录下找到个backup.sh脚本,进去看看,结果加密了的
一眼自解压,直接用gzexe -d解密。
发现密码
-
请分析服务器,给出数据库备份文件存放路径?[答案格式:/xx/xxx][★★★★★]
注释写得非常好
-
请分析服务器,给出数据库备份文件解压密码?[答案格式:password][★★★★★]
查看代码,发现备份出来后,执行了压缩操作,操作中-k为密钥
-
请分析服务器,给出数据库备份文件间隔多少天会删除?[答案格式:1][★★★★★]
-
请分析服务器,给出数据库每天几点会执行备份操作?[答案格式:00:00][★★★☆☆]
每天2点
-
请分析服务器,给出跑分网站后台用户余额总计?[答案格式:1000][★★☆☆☆]
现在要运行网站了,先把网站配置文件数据库用户密码改一下
然后连接数据库中看看,发现数据库是空的,得把备份导回去。
tar -czPf - $BAK_DATE | openssl des3 -salt -k p@ssw0rd -out db_backup_${BAK_DATE}.tar.gz
这个加密代码是用的openssl,也通过openssl解码。openssl des3 -d -salt -k p@ssw0rd -in db_backup_20230515.tar.gz -out db.tar
然后可以得到paofen.sql,直接用navicat快捷导回数据库
然后访问网站会报500错误,需要打开php-fpm。然后又会报403错误,修改源代码目录权限为775或777。然后又会报redis错误,打开redis。然后记得关防火墙。
历经千辛万苦,终于进入登录界面了。看代码绕过密码登录,直接将密码验证部分删除
进行登录,成功进入后台。(TM题都忘记是啥了,看看再说)
-
请分析服务器,给出跑分平台后天未处理的用户申请有多少个?[答案格式:1000][★★☆☆☆]
这也能打错字,差评,应该是后台吧!
-
请分析服务器,给出会员聂鸿熙推荐人的姓名?[答案格式:张三][★★☆☆☆]
-
请分析服务器,给出给出跑分平台内用户银行卡所属银行共有几家?[答案格式:10][★★★★★]
-
接上题,请给出这些银行中用户数最多的银行名称?[答案格式:xx银行][★★★★★]
-
请分析服务器,给出用户“祝虹雨”通过审核的充值总额?[答案格式:10][★★★★★]
在ob_charge_log表中有该人支付信息。
-
请分析服务器,给出该跑分团队可能的办公大楼有几个?[答案格式:1][★★☆☆☆]
服了,在web应该没有,估计是在另外两个虚拟机中了,linux强化重置密码练习。。。
进去啦,然后发现里面有BT,直接xshell连一下。
里面有一个网站
先运行起来看看,发现是会议网站
这得登录一下看看了。
先看看数据库,进去是空的,需要恢复一下备份
直接通过会员中心登录
所以有两个
-
请分析服务器,给出用户John共提了几次会议预约申请,通过了几个?[答案格式:1,1][★★☆☆☆]
-
接上题,用户John哪个时间段的会议预约申请次数最多[答案格式:2000-01-0100:00-00:00][★★☆☆☆]
见上题图
-
请分析服务器,给出用户Harvey预约了什么时间的会议?[答案格式:2000-01-0100:00-00:00][★★☆☆☆]
-
会议管理系统的后台登陆地址是[答案格式:www.baidu.com:8080/login.php][★★☆☆☆]
这道题答案只给到了dkewl.php,确实只需要输入到这个就可以进入登录界面,但是实际上无论是这里的配置,还是登录界面显示的url连接,我觉得应该写完。也可能是答案格式只要求写道php?反正仁者见仁吧。
至此,服务器终于做完了,太nt了,总有奇奇怪怪的bug。。。。。。
-
分析技术人员电脑内银行卡交易流水,给出转入的对手交易卡号有多少?[答案格式:10][★★☆☆☆]
现在再打开技术员电脑,不要关服务器,现在多出来了一个硬盘,里面数据就回来啦。然后之前不是说有进行隐写吗,现在打开oursecret软件,进行unhide。
是一个rar包,进行解压。发现大量csv,看了一下数据量太大了,excel分析不了
通过导入数据库进行分析。
但是导数据库太耗时了,不如直接python处理。
-
分析技术人员电脑内银行卡交易流水,给出转出的对手交易卡号有多少个?[答案格式:1][★★☆☆☆]
-
分析技术人员电脑内银行卡交易流水,给出卡号"6233542760791453"金额转出比(保留两位有效小数)?[答案格式:10.21%[提示:注意文件编码][★★★★★]
还是写脚本,跑完才发现,就45.csv里面有。浪费时间。
-
分析技术人员电脑内银行卡交易流水,给出金额转出比最大的卡号?[答案格式:xxxx][提示:注意文件编码][★★★★★]
-
分析技术人员电脑内银行卡交易流水,给出收益最大的卡号?[答案格式:xxxxx][提示:注意文件编码][★★★★★]
卧槽,问了最终量还问过程量是吧,还好用的debug停在了最后一句。直接在监视中编程
成功获取到收入最大的,不过还是在代码里面在写一下吧。
最后大结局,把三道题都输出来。
给出代码:
import pandas as pd
import os
import time
folder_path = 'D:\onedrive\桌面\财务流水'
start_time = time.time()
card_in={}
card_out={}
card_list = []
for filename in os.listdir(folder_path):
if filename.endswith('.csv'):
print(filename)
file_path = os.path.join(folder_path, filename)
df = pd.read_csv(file_path)
tmp_card_list = df['交易卡号'].unique().tolist()
card_list=card_list+tmp_card_list
card_list=list(set(card_list))
for i in card_list:
if df[df['交易卡号'] == i].empty:
continue
if i not in card_in:
card_in[i]=0
if i not in card_out:
card_out[i]=0
tmp_out_money = df[df['交易卡号'] == i][df['收付标志'] == '出']['交易金额'].sum()
tmp_in_money = df[df['交易卡号'] == i][df['收付标志'] == '进']['交易金额'].sum()
card_in[i] += tmp_in_money
card_out[i] += tmp_out_money
# 计算转出比
card_ratio = {}
for i in card_in:
if card_in[i]>card_out[i]:
card_ratio[i] = card_out[i] / card_in[i]
else:
card_ratio[i] = card_in[i] / card_out[i]
# 输出6233542760791453的转出比,输出为百分比格式
print("6233542760791453的转出比是:", "{:.2%}".format(card_ratio[6233542760791453]))
# 输出card_in中值最大的卡号
max_in = max(card_in.values())
print("card_in中值最大的卡号是:", [k for k, v in card_in.items() if v == max_in])
# 输出转出比最大的账号
max_ratio = max(card_ratio.values())
print("转出比最大的值是:", max_ratio)
max_ratio_card = [k for k, v in card_ratio.items() if v == max_ratio]
print("转出比最大的账号是:", max_ratio_card)
end_time = time.time()
print("运行时间:", end_time - start_time, "秒")
终于完结了,太长了。