首页 > 其他分享 >2022-9-5

2022-9-5

时间:2022-09-05 22:44:07浏览次数:73  
标签:input2 input3 int sum unsigned 2022 input

2022-9-5

HWS2022-Re1

这题也算复习了一下tea,踩了一下几个做题的坑,希望自己下次做tea的时候可以注意

1.注意ida的赋值问题,要了解出题人的代码规范和习惯
2.注意sum值的变化,和最后的值的变化
3.可以动调一些固定值的值查看直接解题脚本是否正确
第二种解题写法
把一些固定值重新赋值 这样动调好看
#include "defs.h"
#include <iostream>
#include <stdlib.h>
void __fastcall tea( unsigned int* input)
{
    unsigned int input7; // r9d
    unsigned int sum; // edi
    unsigned int input1; // ebp
    unsigned int input0; // esi
    unsigned int input2; // r14d
    unsigned int input3; // r15d
    unsigned int input4; // r12d
    unsigned int input5; // r13d
    unsigned int v10; // r11
    unsigned int v11; // r10
    __int64 v12; // rbx
    unsigned int v13; // r9
    bool v14; // zf
    unsigned int input6; // [rsp+40h] [rbp+8h]
    int round; // [rsp+48h] [rbp+10h]


    input7 = input[7];
    sum = 0x8D12E65; //这里是round减完再-0x61C88647
    input1 = input[1];
    input0 = *input;
    input2 = input[2];
    input3 = input[3];
    input4 = input[4];
    input5 = input[5];
    input6 = input[6];
    
    round = 11;
    unsigned int enc[4] = {
       0x00001234, 0x00002345, 0x00004567, 0x00006789 };
    for(int i=0;i<12;i++)
    {
        sum += 0x61C88647;  
        v10 = enc[(sum >> 2) & 3];
        v12 = (sum >> 2) & 3 ^ 3;
        v13 = enc[(sum >> 2) & 3 ^ 2];
        v11 = enc[(sum >> 2) & 3 ^ 1];
        input7 -= ((sum ^ input0) + (enc[v12] ^ (unsigned int)input[6])) ^ (((16 * (_DWORD)input[6]) ^ (input0 >> 3))
            + (((unsigned int)input[6] >> 5) ^ (4 * input0)));
        input[7] = input7;
        input6 -= (((sum ^ input7) + (v13 ^ input5)) ^ (((16 * input5) ^ (input7 >> 3))
            + ((input5 >> 5) ^ (4 * input7))));
        input[6] = input6;
        input5 -= ((v11 ^ input4) + (sum ^ input6)) ^ (((16 * input4) ^ (input6 >> 3)) + ((input4 >> 5) ^ (4 * input6)));
        input[5] = input5;
        input4 -= ((sum ^ input5) + (v10 ^ input3)) ^ (((16 * input3) ^ (input5 >> 3)) + ((input3 >> 5) ^ (4 * input5)));
        input[4] = input4;
        input3 -= ((sum ^ input4) + (enc[v12] ^ input2)) ^ (((16 * input2) ^ (input4 >> 3))
            + ((input2 >> 5) ^ (4 * input4)));
        input[3] = input3;
        input2 -= ((sum ^ input3) + (v13 ^ input1)) ^ (((16 * input1) ^ (input3 >> 3)) + ((input1 >> 5) ^ (4 * input3)));
        input[2] = input2;
        input1 -= ((v11 ^ input0) + (sum ^ input2)) ^ (((16 * input0) ^ (input2 >> 3)) + ((input0 >> 5) ^ (4 * input2)));
        input[1] = input1;
        input0 -= ((sum ^ input1) + (v10 ^ input7)) ^ (((16 * input7) ^ (input1 >> 3)) + ((input7 >> 5) ^ (4 * input1)));
        *input = input0;
        
       
        
     
        
        
    
        v14 = round--;
        
        
    } 
    
}


int main()
{
    unsigned int enc[9] = {
    0x10BD3B47, 0x6155E0F9, 0x6AF7EBC5, 0x8D23435F, 0x1A091605, 0xD43D40EF, 0xB4B16A67, 0x6B3578A9,0 };
    tea(enc);
    puts((char*) &enc); //7f943921724d63dc0ac9c6febf99fa88

}

在看一些awd,搭了一些awd的docker,还有一些docker的操作

docker ps
docker cp dockerid:/文件目录 /本机文件目录

玄武组的花指令暂时想不到怎么清除,还有一点反调试

转战SCTF2021学习一下C++异常处理

1.C++通过从抛异常的函数开始先调用_cxa_allocate_exception申请一片内存存放一个数据结构来春分异常数据,throw函数调用Unwind_RaiseException对于调用链的每一个函数采用personality routine 函数来清除一些局部变量

借用网上的例子来学习一下

#include <iostream>
using namespace std;

void test_func3()
{
    throw 3;

    cout << "test func3" << endl;
}

void test_func2()
{
    cout << "test func2" << endl;
    try
    {
        test_func3();
    }
    catch (int)
    {
        cout << "catch 2" << endl;
    }
}

void test_func1()
{
    cout << "test func1" << endl;
    try
    {
        test_func2();
    }
    catch (...)
    {
        cout << "catch 1" << endl;
    }
}

int main()
{
    test_func1();
    return 0;
}

输出

test func1
test func2
catch 2

认识了unwind存放数据区域 .eh_frame和 DWARF还有CFA

记录一下

在我的理解中,DWARF里的CFA表现为ida对于函数变量便宜的识别,让比如一个数组元素可以用基地址的不断偏移来识别,也就是这个表可以用来记录其他函数的对于基地址的偏移,但在实际情况上,gcc只会记录抛异常的函数

于是再回到eh_frame上,eh_frame通过CIE和FDE来寻找相关的异常信息,得到当前函数的调用函数的现场信息

清除调用函数的函数Personality routine的实现

LSDA 表

主要是在call site table指明异常处理的action 地址 长度还有处理指令的位移,catch抛出的异常会在action部分结合下一个action table 去处理,概括一下,就是调用这个action tabl来去具体化catch的具体情况,类推包括有没有 有一个且或有多个 action 会有指向下一个action table的记录 靠这个来讲函数异常多个catch的action处理链接起来

标签:input2,input3,int,sum,unsigned,2022,input
From: https://www.cnblogs.com/Chis42/p/16659900.html

相关文章

  • 2022 年 9 月水题选做
    20220901SP30919GCDS-Sabbirandgcdproblem思路:显然答案就是不是任意一个数的因数的最小的质数。这个可以在线性筛的时候记录每个数的最小的素因数即可。算法:线性......
  • 【2022-09-05】Django框架(五)
    Django框架(五)定义模型类fromdjango.dbimportmodels#Createyourmodelshere.classUser(models.Model):uid=models.AutoField(primary_key=True,ver......
  • 【题解】做题记录(2022.9)
    可能会断断续续的,是因为可能有的时候忘记了写记录9.5今天搞了一天的平衡树,但大部分都是比较基础的操作[SHOI2009]会场预约题目分析:set大法吼啊我们考虑重新定义两个......
  • JAVA进阶--日志框架、阶段项目实战--2022年9月5日
    第一节 日志框架1、什么是日志用来记录程序运行过程中的信息,并且可以进行永久存储  2、输出语句存在哪些问题,日志结束应该具备哪些特点......
  • 2022-09-03 第二小组 张晟源(JAVAWebMVC)
    JAVAWeb一,MVC架构是一种软件架构模式,把整个软件分为三层:Model,view,controllerModel:模型---获取数据,并处理,返回给controller  entity:数据库实体类User---user表 ......
  • ifort + mkl + impi (全套intel)编译安装量子化学软件GAMESS 2022 R1版本
    说明:linux下编译软件都需要先配置好该软件依赖的系统环境。系统环境可以通过软件的安装说明了解,例如:readme.md等文件或网页。这个前提条件很重要!后面正式编译出错基本都......
  • 2022-09-05 第四小组 王星苹 学习笔记
    学习心得简单的做一个java里面要连接网页和数据库实现注册,主要是代码,建议先写好工具类,这样之后写东西的时候直接就可以用了,比如新学的密码加密的盐的工具类,之前的JDBC工具......
  • 2022 Microsoft Build After Party活动:杨中科聊天分享会
    去年,我组织了一次MicrosoftBuildAfterParty活动,今年,咱们活动继续。预计在2022年11月11日晚上19:00(北京时间),我将会通过哔哩哔哩平台直播,为大家分享我对MicrosoftBuild......
  • 2022-08-30 day38 第一小组 王鸣赫
    目录HttpServletRequest//请求HttpServletResponse//响应路径匹配servlet加载时期常见传参有2种:GET和POST区别获取一个key对应的多个值请求转发作用域其他方法Respo......
  • 20220905 关于DateTimeOffset
    今天在v2ex学到了一个新的词语,DateTimeOffset。然后看了半天的微软文档首先是知道这个东西比DateTime稍微好一点,虽然平时用到的机会不多,这个东西带时区的,以后可以尽量......