首页 > 其他分享 >dbg工具使用和脱壳记录

dbg工具使用和脱壳记录

时间:2025-01-18 13:10:53浏览次数:1  
标签:脱壳 reverse 记录 base64 程序 Aspack dbg 输入

dbg

今天第一次手脱了壳(找不到工具,被迫脱壳),是ASpack,搜了一下是压缩壳.

先介绍一下dbg工具的功能吧,真得好用,真的.

x64dbg使用技巧与实用插件合集 - 吾爱破解 - 52pojie.cn

这篇就够了,然后我再贴上我手脱壳题目别人的wp吧,题目是攻防世界难度3的Windows_Reverse2

有点烧脑的ASPACK

EugeneL1发布于2022-08-25

首先拿到程序,将程序拖到exeinfo中,发现是一个利用Aspack加壳后的程序。
图片
因为手里没有现成的Aspack脱壳工具,所以利用OllDBG对程序进行手动脱壳,Aspack壳脱壳的过程很固定,下面将演示对本题目中程序的Aspack壳的脱壳过程。

【ASPACK脱壳】

工具:吾爱破解OllyDBG
过程:
1.首先使用OllyDBG打开题目中给出的可执行文件,首先可以看到程序的基址为0x296000(记住这个基址,后面会用到),同时程序停止在0x296001处,指令为pushad,这是Aspack壳的一个显著特征。
图片
2.按F8步过,此时程序停留在一个call指令,此时右键ESP寄存器,在该地址添加硬件断点,接着按F9执行到这个地址,此时程序已经完成了脱壳。
图片
3.此时程序执行到一条JNZ指令,按两次F8步过直到执行完push指令,到达程序真正的OEP。
图片
4.此时到达程序真正的OEP,在第一次分析时,需要右键重新分析代码。
图片
5.此时,在程序停留的call指令处右键,利用Ollydump脱壳。
图片
6.此时可以看到程序默认的起始地址为0x400000,但是程序当前实际运行的基址为前面记录的0x290000,因此要修改程序的起始地址,否则不能够dump内存。同时,要将程序OEP修改为脱壳后的程序实际OEP,就是刚刚程序JMP之后的第一条call指令地址偏移,为0x170F。
图片
修改后:
图片
7.此时点击脱壳,就完成了对程序的脱壳。

【程序分析】

此时已经完成了脱壳的部分,正式进入到对程序的分析。利用IDA打开脱壳之后的程序,搜索字符串发现了关键字符串DDCTF{reverse+},到其交叉引用的位置,按F5进行反汇编,查看程序逻辑。图中标黄的是关键函数(函数名有自己修改)。
图片
首先查看函数sub_6211F0(),首先可以猜测它是对输入进行了判断,函数的逻辑也确实证实了我的猜测,if中的判断逻辑限制输入的长度必须大于0并且是偶数,while循环中的if判断限定输入必须是09,AF,这很明显,输入必须在16进制的表示范围之内。
图片
回到上层,查看calc函数,这个函数对用户输入进行了处理,并最终将结果与reverse+进行比较。可以看到,第一个do/while循环是将每两位用户输入处理成其对应的16进制数值,例如用户输入AD,则结果等于('A'-55) * 0x10 + 'D'-55 = 0xAD,因为A的ASCII为0x65,因此A减去55等于10,相当于是将其变为16进制中A的值,这是需要思考和理解的一点。
图片
经过处理之后,用户输入存储在一个新的字符串中。接着看return中的函数,根据其特征可以看出是Base64编码的过程。
图片
一个更明显的特征,函数对可能存在的最后两位空位填充时用了=,这是base64的典型特征。
图片

【编写注册机】

现在我们已经基本清楚了程序的逻辑,首先接收用户输入,并将其处理中其在16进制中的实际大小,之后对存储处理之后数据的字符串进行base64编码,将编码之后的字符串与reverse+进行比较。
我们要做的就是将reverse+进行base64解码,将其解码后的十六进制数值变成符合09,AF范围的字符串。

import base64
s = 'reverse+'
s = base64.b64decode(s)
print(s)

结果:
图片
flag = flag{ADEBDEAEC7BE}
图片

标签:脱壳,reverse,记录,base64,程序,Aspack,dbg,输入
From: https://www.cnblogs.com/T0fV404/p/18678367

相关文章

  • CF516E Drazil and His Happy Friends 做题记录
    CF516EDrazilandHisHappyFriendsDescription有\(n\)个男生\(m\)个女生,编号分别为\(0\simn-1\)和\(0\simm-1\)。有\(B\)个男生和\(G\)个女生是快乐的,其他人是不快乐的。在第\(i\)天,编号为\(i\bmodn\)的男生和编号为\(i\bmodm\)的女生会一起......
  • Python_CUDA入门教程学习记录
    这是本人21年读书时学习CUDA基础知识保留的一些笔记,学习时的内容出处和图片来源不记得了,仅作为个人记录!CUDA编程关键术语:host:cpudevice:GPUhostmemory:cpu内存devicememory:gpuonboard显存kernels:调用CPU上的在GPU执行的函数devicefunction:只能在GP......
  • 在电脑上记录工作内容和日记的软件哪款好用?
    想要在电脑上随手记录工作内容、日记琐事、待办事项、日程安排等,哪款软件简单好用呢?今天来介绍四款常用的电脑桌面记事软件,总有一款是你喜欢的?一、stickynotesStickyNotes是Windows系统自带的便签工具,也叫“便笺”。它以彩色便利贴的形式展现在电脑桌面上,能记录简单文字......
  • 关于网传微信聊天记录提取工具"留痕"盗取个人信息的分析
    今天早上看到一篇文章,是关于一个微信聊天记录提取工具泄露个人信息的内容,于是我就好奇,看了一下作者的github,然后也是自己小小的分析了一下1、官方地址Github:https://github.com/LC044/WeChatMsg2、作者自证url:https://github.com/LC044/WeChatMsg/issues/4923、本地实践......
  • 2024 11~12 月 做题记录(待更新)
    CF2047DMoveBackataCost要使字典序最大,每次都要找到最小的数,把它前面的数都后移.因为可以钦定后移的顺序使得后移的数按升序排列,所以每个数最多被移位一次.定序后开两个队列模拟即可.CCPC2024上海F羁绊大师将羁绊相同的英雄相连,因为英雄至多\(2\)个羁绊,所以度数不超......
  • 2025.1 做题记录
    A.环覆盖条件等价于每个点度数都是偶数,不难写出恰好保留\(k\)条边时的答案:\[[x^{\varnothing}y^k]\prod_{(u,v)}(1+x^{\{u,v\}}y)\]其中\(x\)这一维是xor卷积,\(y\)这一维是加法卷积。考虑经典套路,\((1+x^Sy)\)FWT之后每位都是\((1\pmy)\),乘起来之后......
  • 【洛谷训练记录】【LGR-213-Div.4】洛谷入门赛 #31
    训练情况赛后反思模拟题差点红温,差一道字符串模拟题AKA题问一个数\(a\)加多少后的个位数变成\(b\),取出\(a\)的个位数,再用\(b\)去减,如果小于零答案再加十。#include<bits/stdc++.h>//#defineintlonglong#defineendl'\n'usingnamespacestd;voidsolve()......
  • [20250117]记录下21c下使用gdb跟踪逻辑读遇到的问题.txt
    [20250117]记录下21c下使用gdb跟踪逻辑读遇到的问题.txt--//在21c下使用gdb跟踪逻辑读遇到的问题,困扰好几天,做一个记录。--//首先我以前写过1个gdb脚本跟踪逻辑读在11g下,使用遇到一些问题,发现21c下没有使用kteinpscan,kdifxs函数。--//我先注解这部分内容,测试看看。1.环境:SCOTT@boo......
  • 【做题记录】csp2025-搜索,折半搜索专题
    A.「NOIP2009」靶形数独暴搜。本着搜索必剪枝的思想,略微做一点优化:优先搜索\(0\)少的行。然后就搜就行。Code#include<bits/stdc++.h>#definelllonglong#defineilinlineusingnamespacestd;namespaceasbt{namespacecplx{boolbegin;}namespaceIO{ const......
  • Shell技巧记录
    中括号判断用"="if[[${pkg}=p]];then获取文件名后缀suffix=${pkg##*.}grep使用正则表达式"-E"adbdevices|grep-E"device$|unauthorized|offline"|grep-E-n"device$|unauthorized|offline"if比较使用正则表达式if[[${device}=~${patt......