攻防世界no-strings-attached ida静态调试(做题记录)

首先下载文件 打开 Exeinfo PE拖进去
在这里插入图片描述
发现无壳 打开ida

在这里插入图片描述
找到主函数 F5 先看看c伪代码
在这里插入图片描述
挨个点进去观察
setlocale
在这里插入图片描述
banner
在这里插入图片描述
prompt_authentication()
在这里插入图片描述
authenticate
在这里插入图片描述
在authenticticate函数里面发现了关键 decrypt解密关键
跟踪进去
在这里插入图片描述
v6存的是传入的s的长度 v4应该是初始为0 v7是a2的长度

wcscpy(dest,s)

把s复制给dest 进行解密操作 那就直接追踪s找到s的值
模拟解密的过程 while循环内的意思是 从0开始,for循环开始,且i小于a2长度(且v4就是计数器小于v6)
i不小于V7(a2长度)时候退出 v4仍然小于 v6继续for循环
总结意思遍历s字符串 每项减去 a[i], i一旦超过a2字符串长度又重置 所以我们可以写代码模拟解密过程
在这里插入图片描述
直接选定数据 Shift + E提取数据
在这里插入图片描述

#include<stdio.h>
#include<string.h>
#include<iostream>
#include <tchar.h>
#include <cstdlib>
using namespace std;
char s[] =
{
  0x3A, 0x14, 0x00, 0x00, 0x36, 0x14, 0x00, 0x00, 0x37, 0x14, 
  0x00, 0x00, 0x3B, 0x14, 0x00, 0x00, 0x80, 0x14, 0x00, 0x00, 
  0x7A, 0x14, 0x00, 0x00, 0x71, 0x14, 0x00, 0x00, 0x78, 0x14, 
  0x00, 0x00, 0x63, 0x14, 0x00, 0x00, 0x66, 0x14, 0x00, 0x00, 
  0x73, 0x14, 0x00, 0x00, 0x67, 0x14, 0x00, 0x00, 0x62, 0x14, 
  0x00, 0x00, 0x65, 0x14, 0x00, 0x00, 0x73, 0x14, 0x00, 0x00, 
  0x60, 0x14, 0x00, 0x00, 0x6B, 0x14, 0x00, 0x00, 0x71, 0x14, 
  0x00, 0x00, 0x78, 0x14, 0x00, 0x00, 0x6A, 0x14, 0x00, 0x00, 
  0x73, 0x14, 0x00, 0x00, 0x70, 0x14, 0x00, 0x00, 0x64, 0x14, 
  0x00, 0x00, 0x78, 0x14, 0x00, 0x00, 0x6E, 0x14, 0x00, 0x00, 
  0x70, 0x14, 0x00, 0x00, 0x70, 0x14, 0x00, 0x00, 0x64, 0x14, 
  0x00, 0x00, 0x70, 0x14, 0x00, 0x00, 0x64, 0x14, 0x00, 0x00, 
  0x6E, 0x14, 0x00, 0x00, 0x7B, 0x14, 0x00, 0x00, 0x76, 0x14, 
  0x00, 0x00, 0x78, 0x14, 0x00, 0x00, 0x6A, 0x14, 0x00, 0x00, 
  0x73, 0x14, 0x00, 0x00, 0x7B, 0x14, 0x00, 0x00, 0x80, 0x14, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
unsigned char a[]=
{
  0x01, 0x14, 0x00, 0x00, 0x02, 0x14, 0x00, 0x00, 0x03, 0x14, 
  0x00, 0x00, 0x04, 0x14, 0x00, 0x00, 0x05, 0x14, 0x00, 0x00
};
int main()
{   int num=0;
    for(int i=0;i<150;i++)
    {
    	s[i]-=a[(num++)%20];
    	if(s[i])
    	 printf("%c",s[i]);
	}
	return 0;
}

最后得到flag
在这里插入图片描述

菜鸡总结:

知道如何提取直接提取数据 不是选定复制而是Shift +E
更熟悉了通过理解通过c伪代码追踪关键信息操作

待解决:

1.如何通过动态调试 找到flag
2.如何直接找到伪代码中变量s对应的 view窗口中汇编数据地址和值(而不是在view界面通过主函数一步步 找到s对应的数据 (已解决)
wchar?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值