《CTF特训营》——Reverse:逆向分析

一、常规逆向分析流程

1.API断点

API的定义:是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

在获取文本输入时。对于窗口类程序获取文本方式主要通过GetWindow Text和GetDlgItem Text两个API来获取,调用API通常为MessageBox。在这些API函数中下断点,在调试器中断下来之后,通过栈回溯即可定位到关键代码。

2.字符检索法

可以在IDA中查找,打开strings子窗口,通过ctrl+F快捷键输入你想查找的字符串

在IDA的view中,打开之后,再打开第一个选项,下面会有strings选项

二、常见加密算法识别

1.base64

base64主要是将输入中的每3字节(24比特)按每6比特分成一组,变成4个小于64的索引值,然后通过一个索引表的到4个可见字符

如果在代码中发现了“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrhsuvwxyz0123456789+/”基本上就可以确定是base64加密了。

2.TEA

TEA是一种常见的分组加密算法,密钥为128比特位,明文为64比特位,主要是做了32轮变换,每轮变换都涉及位移和变换,下面是TEA源代码。

void encrypt(uint32_t*v,unit32_t*k) {
     uint32_t v0 = v[0], v1 = v[1], sum = o ,i;
     uint32_t delta = 0x9e3779b9;
     uint32_t k0 = k[0] ,k1 = k[1] ,k2 = k[2] , k3 = k[3];
     for (i=0;i<32;i++) {
      
          sum += delta;
          v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
          v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
     }
     v[0] = v0;
     v[1] = v1;
 }
 
 void decrypt(uint32_t*v,uint32_t*k) {
     uint32_t v0 = v[0], v1 = v[1] ,sum = 0xC6EF3702, i;
     uint32_t delta = 0x9e3779b9;
     uint32_t k0 = k[0], k1 = k[i], k2 = k[2], k3 = k[3];
     for(i = 0; i < 32; i++) {
   
         v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
         v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
         sum -= delta;
 }
  v[0] = v0;
  v[1] = v1;
}

TEA识别也很容易,在TEA算法中有固定常数0x9e3779b9或者0x61c88647

3.AES

AES是一种很常见的分组加密算法,AES加密解密流程如下, AES加密过程涉及4种操作:字节代替、行位移、列混淆、轮密钥。

其中字节代替过程是通过S盒完成一个字节到另一个字节的映射,S盒是对称密钥算法执行置换计算的基本结构,可以把每个盒子认作是一组数字作用就是非线性置换——也就是说线性输入不能产生线性输出。

如果发现程序中有S盒或者动态生成了S盒,则可以确定采用了AES加密,如下:

do
{
  sub_401140(&v34);      //字节替换
  sub_401230(&v34);      //行移位
  if (v17 != 10)
     sub_4012D(&v34);    //列混淆
v34 ^= *(_BYTE * ) (v18 - 8);   //轮密钥加
v19 = *(_BYTE *)v18;
v20 = *(_BYTE *) (v18 + 4);
v38 ^= *(BYTE *) (v18 - 4);
v42 ^= v19;
v46 ^= v19;
v21 = *(_BYTE *) (v18 - 3);
v22 = *(_BYTE *) (v18 + 1);
v35 ^= *( BYTE *)(v18 - 7);

sub_4013B0函数就是一个AES加密

4.RC4

RC4属于流加密算法,包括初始化函数和加解密函数,函数代码如下:

/*初始化函数*/
void rc4_init(unsigned char*s,unsigned char*key,unsigned long Len)
{
  int i=o,j=0;
  //char k[256]={0};
  unsigned char k[256]={0};
  unsigned char tmp=0;
  for(i=0;i<256;i++) {
      s[i]=i;
      k[i]=key[i&Len];
}
for(i=0;i<256;i++) {
    j=(j+s[i]+k[i])%256;
    tmp=s[i];
    s[i]=s[j];//交换s[i]和s[j]
    s[j]=tmp;
}
/*加解密*/
void rc4_crypt(unsigned char*s,unsigned char*Data,unsigned long Len)
{
   int i=0,j=0,t=0;
   unsigned long k=0;
   unsigned char tmp;
   for(k=0;k<Len;k++)
   {
      i=(i+1)%256;
      j=(j+s[i])%256;
      tmp=s[i];
      s[i]=s[j];//交换s[i]和s[i]
      s[j]=tmp;
      t=(s[i]+s[j])%256;
      Data[k]^=s[t];
    }
}

可以看出,初始化代码对字符数组s进行了初始化复制,并且复制分别递增,之后又对s进行了256次交换操作,通过识别初始化代码,可以判断为RC4算法。

5.MD5算法

MD5消息摘要算法,是一种被广泛使用的密码散列函数,可以产生一个128位(16字节)的散列值用于确保一致性和完整性。

MD5加密函数大致如下:

MD5_CTX md5c;
MD5Init(&md5c);
MD5UpdateString(&md5c,plan);
MD5Final(digest,&md5c);

如果看到0x67452301,0xefcdab89,0x98badcfe,0x10325476这四个常数,就可以怀疑是否为MD5算法了。

三、求解flag

1.直接内存获取

对于一些比较简单代码, 可以通过直接查看内存的方式获取flag,对于这种形式,只需要在比较的地方下一个断点,通过查看内存就可以得到flag。代码如下:

input = get_input()
if(input == calc_flag())
{
    puts(flag is input)
}

2.对算法进行逆变换操作

如果一个判断过程的代码如下所示没那么分析convert算法,然后分析结果编写出对应的逆算法,通过reverse_convert(stardard)方式求flag:

input = get_input()
if(standard == convert(input))
{
   puts(flag is input)
}

3.线性变换求解

如果convert是一个线性变换,那么在output=convert(input)中,output的第i位只能由input的第i位决定,这样,通过获取input[i]的所有可能输入对应的输出output[i],即可求出input[i],因此对于这种变换,可以进行单字符爆破。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CTF特训营是一种为了训练和提高参与者网络安全知识和技能的活动或培训。CTF代表Capture The Flag(夺旗赛),是一种网络安全竞技,参赛选手通常需要在一定时间内解决一系列与信息安全相关的题目,攻击和防守并获取旗帜来获得积分。 PDF文件通常是一种常用的电子文档格式,可包含文本、图像、链接、表单等内容。PDF格式文件的特点是易于共享、可读性好且文件大小较小,广泛应用于文件传输、存储和打印等方面。 CSDN是中文IT技术社区平台,为开发者提供技术博客、问答、培训等服务。在CSDN上,用户可以发布技术文章、分享经验、解答问题,也可以浏览其他用户分享的技术资源。 结合以上三个关键词,可以推测出"CTF特训营 PDF CSDN"的含义可能是关于CTF特训营的PDF文件在CSDN上的相关内容。可能是包含CTF特训营相关介绍、教程、参考资料等的PDF文件可以在CSDN平台上找到和下载。 CTF特训营的PDF文件在CSDN平台上的存在,为参与者提供了方便快捷的学习和参考资源。学习者们可以通过下载PDF文件,了解CTF竞技的规则、技巧和策略,提高他们在网络安全领域的知识水平和技能。同时,他们还可以借助其他CSDN用户的经验分享,深入理解和学习关于CTF特训营的知识。 总之,CTF特训营PDF文件在CSDN上的存在对于提高参与者的网络安全知识和技能非常有帮助,同时也丰富了CSDN平台上关于网络安全方面的技术资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值