gfsj (no-strings-attached)

本文介绍了如何通过ida pro进行静态分析,利用ida的伪c代码功能理解程序逻辑,特别是针对一个解密函数的分析。作者通过编写脚本计算解密后的字符串,得到了flag。此外,还分享了初次尝试动态调试的经历,包括在Ubuntu环境下安装和使用gdb遇到的问题及解决方案。动态调试中,利用gdb设置断点、查看内存内容来获取计算好的flag。
摘要由CSDN通过智能技术生成

no-strings-attached

在这里插入图片描述
1.下载附件并查壳
在这里插入图片描述
32位且是elf文件
2.用ida32位打开
(1)找到main函数,并查看字符串
在这里插入图片描述
无可用信息
3.f5生成伪c代码

在这里插入图片描述
当跟进最后一个时发现重要信息
在这里插入图片描述
如果s2和ws相等就—跟进
在这里插入图片描述
成功。
然而s2是dword_8048A90被decrypt加密之后的产物,
法一: 分析decrypt这个函数
思路:跟进decrypt然后分析它的运算逻辑,然后,自己写脚本,得到最后的flag
在这里插入图片描述
提取这些s和dword_8048A90的数据(shift+e)
这里引用一位大佬的话

得到 s 和 a2(即dword_8048A90) ,经过计算(相减)就能得到 dest ,即为 s2 。
目标程序是 32 位 Ubuntu ,所以 wchar_t 表示 \0 占 4 字节,后面 4 个是截止符,不代入计算

脚本如下:

#include <stdio.h>
int main() {
unsigned char s[] = {
58, 20, 0, 0, 54, 20, 0, 0, 55, 20,
0, 0, 59, 20, 0, 0, 128, 20, 0, 0,
122, 20, 0, 0, 113, 20, 0, 0, 120, 20,
0, 0, 99, 20, 0, 0, 102, 20, 0, 0,
115, 20, 0, 0, 103, 20, 0, 0, 98, 20,
0, 0, 101, 20, 0, 0, 115, 20, 0, 0,
96, 20, 0, 0, 107, 20, 0, 0, 113, 20,
0, 0, 120, 20, 0, 0, 106, 20, 0, 0,
115, 20, 0, 0, 112, 20, 0, 0, 100, 20,
0, 0, 120, 20, 0, 0, 110, 20, 0, 0,
112, 20, 0, 0, 112, 20, 0, 0, 100, 20,
0, 0, 112, 20, 0, 0, 100, 20, 0, 0,
110, 20, 0, 0, 123, 20, 0, 0, 118, 20,
0, 0, 120, 20, 0, 0, 106, 20, 0, 0,
115, 20, 0, 0, 123, 20, 0, 0, 128, 20,
0, 0,
};
unsigned char a2[] = {
1, 20, 0, 0, 2, 20, 0, 0, 3, 20,
0, 0, 4, 20, 0, 0, 5, 20, 0, 0,
};
int v4 = 0;
int v6 = sizeof(s) / sizeof(unsigned char);
int v7 = sizeof(a2) / sizeof(unsigned char);
while (v4 < v6) {
for (int i = 0; i < v7 && v4 < v6; ++i) {
printf("%c", s[v4++] - a2[i]);
}
}
return 0;
}

flag: 9447{you_are_an_international_mystery
法二: 动态调试
思路:数据在执行程序中就计算好了,我们直接读取
在这里插入图片描述b 表示下断点,gdb 中可以直接用已知函数名下断点,也可通过*指定地址下断点。
r 表示程序运行,n 表示单步步过,s 表示单步步入
x 指令表示查看寄存器内容,参数/s 表示用字符串形式显示,/w 表示四字节宽,/sw 表
示字符串显示,四字节宽

总结: 这道题是我第一次接触动态调试,所以在gdb这一步花了很长时间,在kali安装gdb老是出错,问恩师之后发现Ubuntu自带gdb,于是开始捯饬Ubuntu,经过多次错误,多次上网查询,多次问恩师,解决了出现的问题,这样也算为以后动态调试打下基础。

在使用ubuntu出现的问题
1:屏幕小 (安装vmtool)
2:权限不够 (网上有教程)
3:路径不能有中文名
4:chmod命令使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值