type
status
date
slug
summary
tags
category
icon
password
ezre
- 首先打开题,找到main函数,简单分析发现有RC4加密以及变表base64加密
那么整道题围绕RC4进行
- 提取s1 = v4
变表base64用厨子梭了
得到解密后的数据
- 下断点进行调试,把刚刚的数据past data给input,再F8步过
vm?
DIE查询是有UPX壳的,UPX -d一键去壳没有成功(当时就卡开头了)
再次学习修改并去除魔改UPX壳[原创] UPX源码学习和简单修改-加壳脱壳-看雪-安全社区|安全招聘|kanxue.com
再次010editor打开
这里overlay_offset值为p_info字段的文件偏移
改为F4 00 00 00就可以正常去壳了
找到main函数,审计可以得到
点开sub_1815
点开sub_1989
result == 0xF8这里0xF8是opcode的最后一位
这里分析出来opcode就是在box中储存,在fun中形成汇编语言进行加密
分析这段代码
上者在v3的地址4,6,8...18这八个位置存储了 -16,-15...,-9这几个值
下面的在v3地址5,7,9...19这八个位置存储了上面的八个函数
根据分析,在sub_1989函数里面的sub_1916函数用到了这十六个位置,条件就是如果这个result的值为*a1[3](这个值就是box[0]是0xF0)的话返回v3奇数(函数)参数为a1,如果是其他值就返回v3偶数位
这时候使用动调得到了结论,box中的一条完整的指令是在 大于0xF0的机器码之间实现的,不同的0xF*就对应不同指令
继续动调,总结出八个函数对应指令
- F0 MOV F1 ADD F2 MOD取余 F3 INC递加1 F4 DEC递减1 F5 XOR F6 CMP F7 JMP
翻译如下:(by 咸鱼渊Yuan)
魔改的RC4就是a1[0] += a1[2] 这一步的代码
加密的最后一步异或相当于a1[0] = (a1[0] ^ a1[1]) + a1[2]
提取出key和data
得到脚本:
- 作者:Sh4d0w
- 链接:https://sh4d0w.life//article/c11f7db8-5f67-4d2c-a598-a1139bb9b93c
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。