HardSignin _ 入土为安的第十二天

news2024/11/14 2:58:37

有壳  55 50 58   用010 把vmp改成upx

ctrl+f2,查找main函数

点第三个

Ctrl+x交叉引用

把花指令改了90

一共三处

找db按c

找函数按p封装,按f5反编译函数

smc 用pythonida绕一下

from ida_bytes import *
addr = 0x00401890
for i in range(170):
    patch_byte(addr + i,get_wide_byte(addr + i)^0x66)

c+p进入主函数

sub 401940=printf

sub_401990=scanf

sub 4016B0为加密函数,点进去

分别是换表的base64加密,rc4,xtea

找rc4还有xtea的key,发现是随机数 交叉索引找到TLS1和TLS2

pythonida 得到答案unk_404000

from ida_bytes import *
from idaapi import *
addr=0x00404000
data=[]
for i in range(64//4):
    data.append(get_dword(addr+i*4))
print(data)

[3036486489, 3653154923, 3598177203, 408905200, 1396350368, 645614189, 1318861428, 3625534240, 3046501746, 1445070236, 2433841867, 213678751, 3463276874, 699118653, 845347425, 3058494644]

xtea:

#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
#include<string.h>
 
void XTEA_decrypt(uint32_t* enc, uint32_t* key);
 
int main() {
    uint8_t RC4_key[16] = { 0 };
    char XTEA_key[16] = { 0 };
    uint32_t enc[] = { 3036486489, 3653154923, 3598177203, 408905200, 1396350368, 645614189, 1318861428, 3625534240, 3046501746, 1445070236, 2433841867, 213678751, 3463276874, 699118653, 845347425, 3058494644 };
    srand(0x1919810u);
    for (int i = 0; ; ++i){
        if (i >= 16)
            break;
        RC4_key[i] = rand() % 255;
        XTEA_key[i] = rand() % 255;
    }
    XTEA_decrypt(enc, (uint32_t*)XTEA_key);//指针强转
    uint8_t* temp = (uint8_t*)enc;
    for (int i = 0; i < 64; i++) {
        printf("%d, ", temp[i]);
        //printf("%d, ", RC4_key[i]);
    }
    return 0;
}
void XTEA_decrypt(uint32_t* enc, uint32_t* XTEA_key) {
    uint32_t v7, v6, v5;
    for (int i = 0; i < 16; i += 2){
        v7 = enc[i];
        v6 = enc[i + 1];
        v5 = 0x9E3779B9 * 0x64;
        for (int j = 0; j < 0x64; ++j)
        {
            v6 -= (XTEA_key[(v5 >> 11) & 3] + v5) ^ (v7 + ((v7 >> 5) ^ (16 * v7)));
            v5 -= 0x9E3779B9;
            v7 -= (XTEA_key[v5 & 3] + v5) ^ (v6 + ((v6 >> 5) ^ (16 * v6)));
        }
        enc[i] = v7;
        enc[i + 1] = v6;
    }
}

enc=[188, 237, 0, 123, 134, 244, 22, 147, 149, 249, 135, 220, 103, 168, 162, 127, 77, 226, 98, 159, 123, 52, 174, 233, 69, 3, 126, 53, 66, 208, 139, 112, 240, 251, 46, 199, 221, 233, 185, 115, 227, 204, 26, 117, 173, 220, 253, 20, 168, 200, 69, 22, 49, 110, 42, 8, 44, 15, 29, 159, 7, 186, 213, 239]

RC4_key = [118, 137, 51, 73, 25, 19, 195, 199, 173, 216, 228, 104, 252, 72, 4, 188]

rc4:

def rc4_decrypt(ciphertext, key):
    S = list(range(256))
    j = 0
    for i in range(256):
        j = (j + S[i] + key[i % len(key)]) % 256
        S[i], S[j] = S[j], S[i]
 
    i = j = 0
    plaintext = []
    for byte in ciphertext:
        i = (i + 1) % 256
        j = (j + S[i]) % 256
        S[i], S[j] = S[j], S[i]
        k = S[(S[i] + S[j]) % 256]
        plaintext.append(byte ^ k)
 
    return bytes(plaintext)
enc = [188, 237, 0, 123, 134, 244, 22, 147, 149, 249, 135, 220, 103, 168, 162, 127, 77, 226, 98, 159, 123, 52, 174, 233,
       69, 3, 126, 53, 66, 208, 139, 112, 240, 251, 46, 199, 221, 233, 185, 115, 227, 204, 26, 117, 173, 220, 253, 20,
       168, 200, 69, 22, 49, 110, 42, 8, 44, 15, 29, 159, 7, 186, 213, 239]
RC4_key = [118, 137, 51, 73, 25, 19, 195, 199, 173, 216, 228, 104, 252, 72, 4, 188]
 
decrypted_data = rc4_decrypt(enc, RC4_key)
print(decrypted_data)

b'C+vFCnHRGPghbmyQMXvFMRNd7fNCG8jcU+jcbnjRJTj2GTCOGUvgtOS0CTge7fNs'

base64:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
 
void swap(char* a, char* b) {
    char temp = *a;
    *a = *b;
    *b = temp;
}
 
int main() {
    char base64table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    int v6, v4;
    srand(0x114514u);
    for (int i = 0; i < 100; ++i) {
        v6 = rand() % 64;
        v4 = rand() % 64;
        swap(&base64table[v6], &base64table[v4]);
    }
    printf("%s\n", base64table);
    return 0;
}

4yZRiNP8LoK/GSA5ElWkUjXtJCz7bMYcuFfpm6+hV0rxeHIdwv32QOTnqg1BDsa9

import base64
text1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
text2 = '4yZRiNP8LoK/GSA5ElWkUjXtJCz7bMYcuFfpm6+hV0rxeHIdwv32QOTnqg1BDsa9'
enc = 'C+vFCnHRGPghbmyQMXvFMRNd7fNCG8jcU+jcbnjRJTj2GTCOGUvgtOS0CTge7fNs'
 
decoded_bytes = base64.b64decode(enc.translate(str.maketrans(text2, text1)))
 
print(decoded_bytes.decode("utf-8"))
  • 将自定义 Base64 编码字符集中的字符映射到标准 Base64 编码字符集。
  • 将自定义 Base64 编码字符串转换为标准 Base64 编码字符串。
  • 对标准 Base64 编码字符串进行解码,得到原始的字节数据。
  • flag{C0ngr@tulat1on!Y0u_Re_suCces3fu1Ly_Signln!}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

排序算法----冒泡,插入,希尔,选择排序

冒泡排序 原理 冒泡排序实际上是交换排序&#xff0c;将大的数据通过交换的方式排到一边&#xff0c;依次进行 代码实现 void Swap(int* p1, int* p2) {int temp *p1;*p1 *p2;*p2 temp; }void BullerSort(int* a, int n) {for (int end n - 1; end > 0; end--){for …

卷积神经网络理论(CNN)·基于tensorflow实现

传统神经网络的输入是一维的数据(比如28*28的图片&#xff0c;需要转化为一维向量)。 而卷积神经网络的输入是一个三维的(比如RGB)。 结构 卷积神经网络有以下结构&#xff1a; 输入层卷积层池化层全连接层 输入层 顾名思义&#xff0c;输入层就是输入数据(可以是图片等数…

仅缺一位作者,年内书号

《工程测量学概论》缺第三 《风景园林设计与施工技术研究》缺第二 《对外汉语教学方法与实践研究》缺第三 《基于视觉传达设计下的民间艺术发展研究》缺第三 《英语教学基础与翻译技巧》缺第三 《博物馆学体系与博物馆探究学习》缺第三 《新时期高校辅导员工作与队伍建设研究》…

迈向数智金融:机器学习金融科技新纪元的新风采

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

怎么通过 ssh 访问远程设备

文章目录 什么是 SSH背景环境配置前置准备在 linux 系统中安装 ssh 组件 什么是 SSH ssh 全称是 Secure Shell, 有时候也被叫做 Secure Socket Shell, 这个协议使你能通过命令行的方式安全的连接到远端计算机。当连接建立就会启动一个 shell 会话&#xff0c;这时你就能在你的…

Kubernetes中间件监控指标解读

监控易是一款功能强大的IT监控软件&#xff0c;能够实时监控和分析各种IT资源和应用的状态&#xff0c;为企业提供全面而深入的监控服务。在Kubernetes中间件监控方面&#xff0c;监控易提供了详尽的监控指标&#xff0c;帮助用户全面了解Kubernetes集群的运行状态和性能表现。…

一键PDF翻译成中文,划重点轻松get

现在信息多得跟海一样&#xff0c;PDF文件里全是宝贵的资料和文章。但是&#xff0c;看着满屏幕的外国字&#xff0c;你是不是也头疼过&#xff1f;别发愁&#xff0c;今天咱们就来好好聊聊pdf翻译成中文的工具&#xff0c;帮你轻松搞定语言障碍&#xff0c;一点按钮&#xff0…

电测量数据交换DLMS∕COSEM组件第61部分:对象标识系统(OBIS)(上)

1.范围 GB/T 17215.6的本部分规定了对象标识系统(OBIS)的总体结构并将测量设备中的所有常用数据项映射到其标识代码。 OBIS为测量设备中的所有数据都提供唯一的标识符,不仅包括测量值,而且还包括仪表设备的配置或获取测量设备运行状态的抽象数据。本部分定义的ID代码用作标…

论文解析——CRNN算法

论文paper地址&#xff1a;An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition 本文的主要目的是识别图片中的序列文字的识别。CRNN的主要贡献在于提出了一个网络架构&#xff0c;这种架构具有以下…

基于飞腾平台的Kafka移植与安装

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

java基础 之 集合与栈的使用(一)

文章目录 集合特点&#xff08;从整体性来看&#xff09;区别List接口&#xff08;一&#xff09;实现类&#xff1a;ArrayList&#xff08;二&#xff09;实现类&#xff1a;LinkedList 集合 java集合可分为Set、List、Queue和Map四种体系。其中List、Set、Queue均继承自Coll…

ADC静态误差

0 前言 图1 表示测量数据精密度高&#xff0c;但准确度较差&#xff1b;图2 表示测量数据的准确度高&#xff0c;但精密度差&#xff1b;图3 表示测量数据精密度和准确度都好&#xff0c;即精确度高。 1 简介 模数转换器&#xff08;ADC&#xff09;广泛用于各种应用中&…

Spring Cloud开发实战(一)- 搭建一个Eureka+Feign+LoadBalancer 项目

Spring Cloud开发实战&#xff08;一&#xff09;- 搭建一个EurekaFeignLoadBalancer 项目 文章目录 Spring Cloud开发实战&#xff08;一&#xff09;- 搭建一个EurekaFeignLoadBalancer 项目0.内容简介1.Eureka服务注册与发现1.1.什么是服务注册与发现1.2.Eureka注册中心1.2.…

Android 系统与SDK和JDK版本对照表

Android 系统与SDK和JDK版本对照表 传说中的兼容问题是指在高版本 SDK 平台开发的软件&#xff0c;可能在低版本 Android 系统中运行时出现各种问题。而低版本 SDK 开发的软件在高版本 Android 系统中运行时基本没有兼容问题的。 Android版本SDK/API版本JDK版本备注Android 14…

springboot宠物相亲平台-计算机毕业设计源码16285

目 录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 开发环境及相关技术介绍 2.1 MySQL数据库的介绍 2.2 B/S架构的介绍 2.3 Java语言 2.4 SpringBoot框架 3 宠物相亲平台系统分析 3.1 可行性分析 3.1.1 技术可行性分析 3.1.2 经济…

unplugin-vue-components 插件配置 忽略 部分目录下的组件自动导入

背景 vue3 项目 为了省略 第三方库ui 组件 全局组件的注册代码&#xff0c;使用了 unplugin-vue-components 插件 原理 组件识别 在编译阶段&#xff0c;unplugin-vue-components 会扫描 Vue 单文件组件&#xff08;.vue 文件&#xff09;的模板部分&#xff0c;识别出所有使…

从零开始掌握进程间通信:管道、信号、消息队列、共享内存大揭秘

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好,我是小米,今天我们来聊一聊操作系统中的一个重要话题——进程间通信(Inter-Process Communication,简称IPC)。IPC是指在不同进程间传递数据…

01.docker安装、配置、常用命令、dockerfile、镜像上传下载和Harbor仓库搭建

1.docker安装 1.1移除旧版本 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine1.2安装yum-utils获取yum-config-manager [rootlocalhost ~]# yum install -y yum-utils …

图论之最短路径问题(朴素Dijksra算法\堆优化版Dijksra算法\Bellman-Ford\SPFA)

朴素Dijskra算法 时间复杂度&#xff1a;,适用于稠密图&#xff0c;需要用邻接矩阵来存储。 算法描述 设起点为s,dist[v] 表示起点到v点的最短距离。 a)初始化 dist[v]INF(v!s),dist[s] 0 这里一共有n个点&#xff0c;第一个点(起点)初始化为0&#xff0c;其余都初始化为in…

COFFEE AI PARTNER -- 神奇的AI工具,相当我雇佣了一个AI员工,淘汰你的是会使用AI的人

COFFEE AI PARTNER介绍 COFFEE AI PARTNER是由 AI JAVA开发的一款生成式人工智能工具&#xff08;又名AI助手&#xff09;&#xff0c;尝试一下。 首先域名似乎正在备案中&#xff0c;企业邮箱似乎正在采购&#xff0c;目前服务地址是&#xff1a;COFFEE AI PARTNER-官网 官网…