学习报告(最后一次任务)
RE1.PYC
先启动该文件看下运行结果
不知道是因为什么无法再次运行,通过搜索找到是因为没有原py文件所以无法再次运行,那就通过ida(32位)看看其源代码
pyc文件主要是无法通过f5反汇编查找代码逻辑
尝试通过shift+f12查询字符串,结果如下
一般有效的字符串,线索之类的会出现在此,如果不有效也一般会放在内存附近(一般)
通过双击寻找,往上翻后最终找到了对应的密文(非flag{}此类格式应该是经过了加密)
下方也有说明,表现是通过base64加密的,将其拖入base64中解密
得到了最后的flag:D0g3{Do_You_Want_To_Hammer_Me}
RE2
通过反汇编找到对应函数极少(一般是通过了加壳)
再通过寻找字符串,发现确实是通过了upx加壳,且是3.96版本,用普通的脱壳尝试如下
发现报错无法脱壳
疯狂百度,发现是经过了特征码修改
尝试通过winhex修改该文件,失败了。
通过开挂发现需要dump
不太成功dump出源文件后(需进行反反编译操作将真正的EOP找到,然后再将源文件dump下来,此处我不知道为什么无法获取对原文加密的函数)
正常情况应该如图
此处以正常情况距离
先通过shift+f12搜索显示的字符串
双击选中
再通过x查询交叉引用
成功找到对应函数
再通过f5反汇编就可以大致看懂了
根据wp所说此处采用了多重加密(包含仿射加密)
根据此处可以获得仿射加密的字典
1 | strcpy(v29, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwzyz0123456789{}"); |
还有被加密的的字符
unsigned char是因为默认字符有负数
1 | unsigned char a[]={ |
根据仿射加密规则c(密文)=(a*m(待加密字符)+b)(mod n)
解密则需要获得密钥a与字典长度n的最大公因数gcd(a,n)
d(解密)=(a-gcd(a,n)(c-b))(mod n)
其通过异或加密和数字分解加密将实际值掩盖了,首先应该通过
先异或回去再将质数乘回来
如下
此处分别异或的为0xf0和0x0f
将分解出的质数拿出来放入数组中得
1 | int divi_step[] = |
根据wp
具体处理则为
1 |
|
最终代码运行结果不是wp的答案那种而是D8g7{TherefIsfAfLongfWa6fTofGof}
wp中答案则是
D0g3{There_Is_A_Long_Way_To_Go_}
- 标题: 学习报告(最后一次任务)
- 作者: runwu2204
- 创建于 : 2023-01-05 17:05:18
- 更新于 : 2023-06-23 01:51:27
- 链接: https://runwu2204.github.io/2023/01/05/Re/实验室报告/学习报告(最后一次任务)/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。